Office 板


LINE

謝謝S大的回覆,第二個版本比較簡潔,而且我測試成功,第一個版本是我原本的結構, 後來結果還是失敗。不過這裡我還是有幾個問題想要請教: 1.item_range一開始沒有定義它是二維陣列,為什麼後來又要用item_range(i,1),而且 如果不這樣用還跑不出結果。 2.sub模式有逐步執行的功能,但function模式似乎沒有? 沒有辦法看到分段執行結果真 的很難偵錯。 3.在function模式中修改語法後如何使儲存格中的值重新計算? 以上問題請多指教,謝謝!! ※ 引述《nazomegami (深呼吸~)》之銘言: : 軟體:excel vba : 版本:2010 : 各位大大好,以下我有一個function,item_range為儲存格(如A1:A10),內容為文字串, : 如"A", "B", "A", "B", "B", "C", "B", "C", "D", "B",而number_range亦為儲存格 : (如B1:B10),內容為數字,如1, 2, 3, 4, 5, 6, 7, 8, 9, 10。 : 今天想要計算各item_range的項目(以取唯一值)之累加金額,並回傳金額第k大(rank_ : order)之項目名稱,我之前以虛擬陣列在Sub中執行都沒有問題,但是改以Function就 : 執行不出結果,想要請問一下我哪裡做錯了?(變數定義?) 謝謝! : Function inventory_rank(item_range() As Variant, number_range() As Variant, : rank_order As Integer) As String : Dim c, d, str1, str2 : Dim ary1$(), ary2(100), ary3(100) : '求算資料筆數(陣列上限+1) : c = UBound(item_range) : '若某字串a(i)在組合字串(str)中沒有出現才會被加入組合字串(str)中 : For i = 0 To c : If InStr(str1, item_range(i)) = 0 Then : str1 = str1 & "," & item_range(i) : End If : Next : '將第2位開始之字串轉換為陣列 : ary1 = Split(Mid(str1, 2), ",") : '求算不重複項目之個數(陣列上限+1) : d = UBound(ary1) : '求算不重複項目之累加金額 : For i = 0 To d : ary2(i) = ary1(i) : ary3(i) = Evaluate("sum(if({""" & Join(item_range, """,""") & """}=""" : & ary1(i) & """, {" & Join(number_range, ",") & "}))") : Next : '求算第k位金額之項目名稱 : inventory_rank = Application.WorksheetFunction.Index(ary2, Application. : WorksheetFunction.Match(Application.WorksheetFunction. : Large(ary3, rank_order), ary3, 0)) : End Function --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.39.54.158
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Office/M.1457011995.A.2EE.html
1F:→ soyoso: 問題1,暫無找到說明;如要一維的話,可用 03/03 23:33
2F:→ soyoso: worksheetfunction.transpose([a1:a10])的方式 03/03 23:33
3F:→ soyoso: 問題2,可先設中斷點,接著到資料編輯列(公式列)內按下 03/03 23:34
4F:→ soyoso: nter,就可以偵錯;但設中斷點處前如有錯誤產生時則會因無 03/03 23:34
5F:→ soyoso: 法執行到中斷點,而無作用 03/03 23:34
6F:→ soyoso: 問題3,可於工作表按f9重新計算 03/03 23:38
7F:→ soyoso: 問題1,查了一下,則是這樣說明到,儲存格範圍是欄列的二 03/03 23:51
8F:→ soyoso: 維表格,可使用二維陣列來完成。在vba中,只要將variant 03/03 23:51
9F:→ soyoso: 型態變數設為儲存格範圍的值,變數就會自動成為二維陣列的 03/03 23:52
10F:→ soyoso: 變數 03/03 23:52
11F:→ nazomegami: 受教了,謝謝你,我今天再試試。 03/04 06:40
12F:→ nazomegami: 我想要問一下,若陣列只有一個元素,則ubound()函數 03/04 21:14
13F:→ nazomegami: 應會回傳0,但是我在測試時只要遇到一個元素的陣列就 03/04 21:14
14F:→ nazomegami: 會在ubound()函數這裡停下來。 03/04 21:14
15F:→ nazomegami: 我知道只有一個元素的陣列沒有什麼好比較大小的,只是 03/04 21:15
16F:→ nazomegami: 很好奇為什麼會出現這樣的結果? 03/04 21:15
17F:→ soyoso: 只有一個儲存格時讀入時,會以字串string型態,所以會有 03/04 21:47
18F:→ soyoso: 錯誤而停下無法向下執行,可加上range.rows.count判斷 03/04 21:48
19F:→ soyoso: https://imgur.com/hFqy6ho 03/04 21:48
20F:→ nazomegami: 瞭解了,謝謝你! 03/05 11:36







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP