[算表] VBA 求阵列中重复次数最多的值

楼主: genow   2019-08-14 09:50:32
软件:EXCEL
版本:2010
您好:
我有个三维阵列 A(5,3,999)
如果我想知道A(5,3,1:999)中重复次数最多的值是那个
该如何利用VBA求得
我得想法是利用MODE函数
strmax=WorksheetFunction.Mode(mystr(5,3, 1:999))
但是他在1:999这个地方显示语法错误
请问我该如何表达才正确 谢谢
作者: soyoso (我是耀宗)   2019-08-14 10:06:00
如三维较无合适以该工作表函数mode回传的话可以一、二维阵列,worksheetfunction.mode(变量)测试一、二维方面是可行的
楼主: genow   2019-08-14 10:09:00
好的 我来测试一、二维 感谢您的回复您好 我测完成后发现另一个问题,也就是无法取得类别WorksheetFunction的mode属性可是我查了office官网确实有这个函数,请问是不是我哪错了我将程式码贴上,可以帮我确认一下吗 感谢
作者: soyoso (我是耀宗)   2019-08-14 10:43:00
楼主: genow   2019-08-14 10:47:00
感谢您的回复,我疏忽说一件事了,我的工作表1.Cells(1, 1)是字串型态,所以我有将您的建议内容改为Cstr执行结果出现:无法取得类别WorksheetFunction的mode属性不知道是不是mode无法进行字串计算,还是我改利用其他函数
作者: soyoso (我是耀宗)   2019-08-14 10:50:00
改为cstr就为文字型态,mid取后就是这个型态了因此回文连结内以cint来转换
楼主: genow   2019-08-14 10:51:00
也可以进行相同结果计算,例如countif
作者: soyoso (我是耀宗)   2019-08-14 10:52:00
先以回文连结内的cint而非cstr来转换来试试假设将a栏内的数字以文字型态来测试https://i.imgur.com/pp2x9fG.jpg 测试是可行的
楼主: genow   2019-08-14 11:02:00
https://imgur.com/ZRwSWwg在工作表1的储存格内容为字串型态时,会出现型态不符再请so大大有空帮忙看一下<(__ __)>
作者: soyoso (我是耀宗)   2019-08-14 11:13:00
如是回文连结内的字串,因无法转换为数字,可以原po回文写到的函数countif,应也不用改为一、二维但因countif第一引数是以range,所以这方面可以工作表储存格来辅助
作者: cutekid (可爱小孩子)   2019-08-14 14:21:00
以原 PO 的说明及他写的 code 来看,strmax 会放在第二层循环结束后,然后继续跑下一笔的 strmax以范例来讲,应该会跑出三笔结果: AA,无,CC
作者: soyoso (我是耀宗)   2019-08-14 14:23:00
内文写了"A(5,3,1:999)中重复次数最多的值是那个"要解读要跑三笔可以我的解读是a这个阵列内重复次数最多的值是哪个且我08/14 10:54的回文就已经将该部分调整到循环外当然就看原po要的结果是哪个了
作者: cutekid (可爱小孩子)   2019-08-14 14:30:00
我是看原 po 在 08/14 11:02 回文里的 code
作者: soyoso (我是耀宗)   2019-08-14 14:30:00
内文也写了WorksheetFunction.Mode(mystr(5,3, 1:999))
作者: soyoso (我是耀宗)   2019-08-14 14:32:00
我的想法是原po要以函数mode来取变量mystr内出现频率最高的值
作者: cutekid (可爱小孩子)   2019-08-14 14:33:00
是的,取每个 cell 切成最多 999 个字串后,频率最高的
作者: soyoso (我是耀宗)   2019-08-14 14:36:00
取cell也好,变量也好,我回文只是提供如以原po回文所提的以函数countif的话,写法为何而已
作者: cutekid (可爱小孩子)   2019-08-14 14:37:00
嗯,我也是!还是推 s 大: 使用辅助栏 countif 后 vba 的写法,厉害(Y)

Links booklink

Contact Us: admin [ a t ] ucptt.com