作者genow ()
看板Office
标题[算表] VBA 求阵列中重复次数最多的值
时间Wed Aug 14 09:50:32 2019
软体:EXCEL
版本:2010
您好:
我有个三维阵列 A(5,3,999)
如果我想知道A(5,3,1:999)中重复次数最多的值是那个
该如何利用VBA求得
我得想法是利用MODE函数
strmax=WorksheetFunction.Mode(mystr(5,3, 1:999))
但是他在1:999这个地方显示语法错误
请问我该如何表达才正确 谢谢
---------------------------
更新
---------------------------
Sub TEST()
len1 = WorksheetFunction.CountA(Range("'工作表1'!A:A"))
Dim mystr(999)
k=1
For i = 2 To len1
len2 = Len(工作表1.Cells(i, 1))
for j = 1 to len2
mystr(K) = Mid(工作表1.Cells(i, 1), j, 2)
K = K + 1
Next
strmax = WorksheetFunction.Mode(mystr) <--出现错误
MsgBox strmax
Next
End Sub
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 117.56.73.248 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Office/M.1565747434.A.CF1.html
1F:→ soyoso: 如三维较无合适以该工作表函数mode回传的话 08/14 10:06
2F:→ soyoso: 可以一、二维阵列,worksheetfunction.mode(变数) 08/14 10:07
3F:→ soyoso: 测试一、二维方面是可行的 08/14 10:07
4F:→ genow: 好的 我来测试一、二维 感谢您的回覆 08/14 10:09
5F:→ genow: 您好 我测完成後发现另一个问题,也就是 08/14 10:24
6F:→ genow: 无法取得类别WorksheetFunction的mode属性 08/14 10:25
7F:→ genow: 可是我查了office官网确实有这个函数,请问是不是我哪错了 08/14 10:26
8F:→ genow: 我将程式码贴上,可以帮我确认一下吗 感谢 08/14 10:26
※ 编辑: genow (117.56.73.248 台湾), 08/14/2019 10:30:06
※ 编辑: genow (117.56.73.248 台湾), 08/14/2019 10:30:43
10F:→ genow: 感谢您的回覆,我疏忽说一件事了,我的工作表1.Cells(1, 1) 08/14 10:47
11F:→ genow: 是字串型态,所以我有将您的建议内容改为Cstr 08/14 10:48
12F:→ genow: 执行结果出现:无法取得类别WorksheetFunction的mode属性 08/14 10:49
13F:→ genow: 不知道是不是mode无法进行字串计算,还是我改利用其他函数 08/14 10:49
14F:→ soyoso: 改为cstr就为文字型态,mid取後就是这个型态了 08/14 10:50
15F:→ soyoso: 因此回文连结内以cint来转换 08/14 10:50
16F:→ genow: 也可以进行相同结果计算,例如countif 08/14 10:51
17F:→ soyoso: 先以回文连结内的cint而非cstr来转换来试试 08/14 10:52
18F:→ soyoso: 假设将a栏内的数字以文字型态来测试 08/14 10:54
21F:→ genow: 在工作表1的储存格内容为字串型态时,会出现型态不符 08/14 11:03
22F:→ genow: 再请so大大有空帮忙看一下<(__ __)> 08/14 11:05
※ 编辑: genow (117.56.73.248 台湾), 08/14/2019 11:07:28
23F:→ soyoso: 如是回文连结内的字串,因无法转换为数字,可以原po回文 08/14 11:13
24F:→ soyoso: 写到的函数countif,应也不用改为一、二维 08/14 11:14
25F:→ soyoso: 但因countif第一引数是以range,所以这方面可以工作表储存 08/14 11:15
26F:→ soyoso: 格来辅助 08/14 11:15
27F:→ soyoso: 用原po回文的countif的话,类似这样 08/14 14:16
29F:推 cutekid: 以原 PO 的说明及他写的 code 来看,strmax 会放在第二 08/14 14:21
30F:→ cutekid: 层回圈结束後,然後继续跑下一笔的 strmax 08/14 14:22
31F:→ cutekid: 以范例来讲,应该会跑出三笔结果: AA,无,CC 08/14 14:23
32F:→ soyoso: 内文写了"A(5,3,1:999)中重复次数最多的值是那个" 08/14 14:23
33F:→ soyoso: 要解读要跑三笔可以 08/14 14:23
34F:→ soyoso: 我的解读是a这个阵列内重复次数最多的值是哪个 08/14 14:24
35F:→ soyoso: 且我08/14 10:54的回文就已经将该部分调整到回圈外 08/14 14:24
36F:→ soyoso: 当然就看原po要的结果是哪个了 08/14 14:29
37F:推 cutekid: 我是看原 po 在 08/14 11:02 回文里的 code 08/14 14:30
38F:→ soyoso: 内文也写了WorksheetFunction.Mode(mystr(5,3, 1:999)) 08/14 14:30
39F:→ cutekid: s 说的是,看原 po 要哪个了! 08/14 14:30
40F:→ cutekid: mystr(5,3, 1:999) 我的理解是某个 cell 会被切成 999 个 08/14 14:31
41F:→ soyoso: 我的想法是原po要以函数mode来取变数mystr内出现频率最高 08/14 14:32
42F:→ soyoso: 的值 08/14 14:32
43F:→ cutekid: 是的,取每个 cell 切成最多 999 个字串後,频率最高的 08/14 14:33
44F:→ soyoso: 取cell也好,变数也好,我回文只是提供如以原po回文所提的 08/14 14:36
45F:→ soyoso: 以函数countif的话,写法为何而已 08/14 14:37
46F:推 cutekid: 嗯,我也是! 08/14 14:37
47F:推 cutekid: 还是推 s 大: 使用辅助栏 countif 後 vba 的写法,厉害(Y) 08/14 14:48