[算表] 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