[算表] VBA 求陣列中重複次數最多的值

看板Office作者時間6年前 (2019/08/14 09:50), 6年前編輯推噓4(4043)
留言47則, 3人參與, 6年前最新討論串1/2 (看更多)
軟體: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://www.ptt.cc/bbs/Office/M.1565747434.A.CF1.html

08/14 10:06, 6年前 , 1F
如三維較無合適以該工作表函數mode回傳的話
08/14 10:06, 1F

08/14 10:07, 6年前 , 2F
可以一、二維陣列,worksheetfunction.mode(變數)
08/14 10:07, 2F

08/14 10:07, 6年前 , 3F
測試一、二維方面是可行的
08/14 10:07, 3F

08/14 10:09, 6年前 , 4F
好的 我來測試一、二維 感謝您的回覆
08/14 10:09, 4F

08/14 10:24, 6年前 , 5F
您好 我測完成後發現另一個問題,也就是
08/14 10:24, 5F

08/14 10:25, 6年前 , 6F
無法取得類別WorksheetFunction的mode屬性
08/14 10:25, 6F

08/14 10:26, 6年前 , 7F
可是我查了office官網確實有這個函數,請問是不是我哪錯了
08/14 10:26, 7F

08/14 10:26, 6年前 , 8F
我將程式碼貼上,可以幫我確認一下嗎 感謝
08/14 10:26, 8F
※ 編輯: genow (117.56.73.248 臺灣), 08/14/2019 10:30:06 ※ 編輯: genow (117.56.73.248 臺灣), 08/14/2019 10:30:43

08/14 10:43, 6年前 , 9F
08/14 10:43, 9F

08/14 10:47, 6年前 , 10F
感謝您的回覆,我疏忽說一件事了,我的工作表1.Cells(1, 1)
08/14 10:47, 10F

08/14 10:48, 6年前 , 11F
是字串型態,所以我有將您的建議內容改為Cstr
08/14 10:48, 11F

08/14 10:49, 6年前 , 12F
執行結果出現:無法取得類別WorksheetFunction的mode屬性
08/14 10:49, 12F

08/14 10:49, 6年前 , 13F
不知道是不是mode無法進行字串計算,還是我改利用其他函數
08/14 10:49, 13F

08/14 10:50, 6年前 , 14F
改為cstr就為文字型態,mid取後就是這個型態了
08/14 10:50, 14F

08/14 10:50, 6年前 , 15F
因此回文連結內以cint來轉換
08/14 10:50, 15F

08/14 10:51, 6年前 , 16F
也可以進行相同結果計算,例如countif
08/14 10:51, 16F

08/14 10:52, 6年前 , 17F
先以回文連結內的cint而非cstr來轉換來試試
08/14 10:52, 17F

08/14 10:54, 6年前 , 18F
假設將a欄內的數字以文字型態來測試
08/14 10:54, 18F

08/14 10:54, 6年前 , 19F
08/14 10:54, 19F

08/14 11:02, 6年前 , 20F

08/14 11:03, 6年前 , 21F
在工作表1的儲存格內容為字串型態時,會出現型態不符
08/14 11:03, 21F

08/14 11:05, 6年前 , 22F
再請so大大有空幫忙看一下<(__ __)>
08/14 11:05, 22F
※ 編輯: genow (117.56.73.248 臺灣), 08/14/2019 11:07:28

08/14 11:13, 6年前 , 23F
如是回文連結內的字串,因無法轉換為數字,可以原po回文
08/14 11:13, 23F

08/14 11:14, 6年前 , 24F
寫到的函數countif,應也不用改為一、二維
08/14 11:14, 24F

08/14 11:15, 6年前 , 25F
但因countif第一引數是以range,所以這方面可以工作表儲存
08/14 11:15, 25F

08/14 11:15, 6年前 , 26F
格來輔助
08/14 11:15, 26F

08/14 14:16, 6年前 , 27F
用原po回文的countif的話,類似這樣
08/14 14:16, 27F

08/14 14:16, 6年前 , 28F

08/14 14:21, 6年前 , 29F
以原 PO 的說明及他寫的 code 來看,strmax 會放在第二
08/14 14:21, 29F

08/14 14:22, 6年前 , 30F
層迴圈結束後,然後繼續跑下一筆的 strmax
08/14 14:22, 30F

08/14 14:23, 6年前 , 31F
以範例來講,應該會跑出三筆結果: AA,無,CC
08/14 14:23, 31F

08/14 14:23, 6年前 , 32F
內文寫了"A(5,3,1:999)中重複次數最多的值是那個"
08/14 14:23, 32F

08/14 14:23, 6年前 , 33F
要解讀要跑三筆可以
08/14 14:23, 33F

08/14 14:24, 6年前 , 34F
我的解讀是a這個陣列內重複次數最多的值是哪個
08/14 14:24, 34F

08/14 14:24, 6年前 , 35F
且我08/14 10:54的回文就已經將該部分調整到迴圈外
08/14 14:24, 35F

08/14 14:29, 6年前 , 36F
當然就看原po要的結果是哪個了
08/14 14:29, 36F

08/14 14:30, 6年前 , 37F
我是看原 po 在 08/14 11:02 回文裡的 code
08/14 14:30, 37F

08/14 14:30, 6年前 , 38F
內文也寫了WorksheetFunction.Mode(mystr(5,3, 1:999))
08/14 14:30, 38F

08/14 14:30, 6年前 , 39F
s 說的是,看原 po 要哪個了!
08/14 14:30, 39F

08/14 14:31, 6年前 , 40F
mystr(5,3, 1:999) 我的理解是某個 cell 會被切成 999 個
08/14 14:31, 40F

08/14 14:32, 6年前 , 41F
我的想法是原po要以函數mode來取變數mystr內出現頻率最高
08/14 14:32, 41F

08/14 14:32, 6年前 , 42F
的值
08/14 14:32, 42F

08/14 14:33, 6年前 , 43F
是的,取每個 cell 切成最多 999 個字串後,頻率最高的
08/14 14:33, 43F

08/14 14:36, 6年前 , 44F
取cell也好,變數也好,我回文只是提供如以原po回文所提的
08/14 14:36, 44F

08/14 14:37, 6年前 , 45F
以函數countif的話,寫法為何而已
08/14 14:37, 45F

08/14 14:37, 6年前 , 46F
嗯,我也是!
08/14 14:37, 46F

08/14 14:48, 6年前 , 47F
還是推 s 大: 使用輔助欄 countif 後 vba 的寫法,厲害(Y)
08/14 14:48, 47F
文章代碼(AID): #1TKsZgpn (Office)
文章代碼(AID): #1TKsZgpn (Office)