[算表] SUMIF公式 和 VBA FindNext疑問

作者: sagwow (不是我)   2022-12-06 22:52:12
軟體:Excel
版本:Office 365
問題1:
A B C
1 甲 東 10
2 甲 東 10
3 乙 西 20
4 乙 東 20
5 乙 東 20
6 丙 東 30
求B欄為東,且A欄不重複的C欄值總合。 想得到的答案是10 + 20 + 30 = 60。
請問公式要怎麼寫呢?
問題2:
寫VBA用到FindNext時,搜尋到表單最後,又會重頭搜尋,無法跳出迴圈。
我的問題是要怎麼判斷出已搜尋至該表最後一筆符合的結果,並跳出呢?
網路上有看到做法是每搜到一筆,就將它的值改掉,
這樣搜完後就不會再搜到符合的結果,自然就能判斷要跳出迴圈。
另外自己有想到方法是,判斷當前row值 < 前一筆結果的row值,就跳出。
但FindNext函數是否有內建更好的判斷方法呢?或是大家有沒有更簡潔的方法~
作者: kinomon (奇諾 Monster)   2022-12-06 23:41:00
複雜判斷可以用sumproducthttps://i.imgur.com/tUgVB4S.jpg
作者: waiter337 (給開司一罐蘇格登)   2022-12-07 00:56:00
用字典key放A+B自動去重 item放C 跑迴圈也可以搭配字典的exists判斷是否之前已放入字典Sub tt()Set d = CreateObject("scripting.dictionary")For i = 1 To Cells(Rows.Count, 1).End(3).RowIf Cells(i, 2) = "東" ThenIf d.exists(Cells(i, 2).Value) = False Thend(Cells(i, 1).Value) = Cells(i, 3).ValueEnd IfEnd IfNextFor Each Z In d.items(): x = x + Z: NextRange("e1") = xEnd Sub
作者: newacc (XD)   2022-12-07 10:48:00
微軟官方說明文件中的建議跟你想到的方式差不多https://bit.ly/3F0wTWU第一題想確認,有可能同時出現(甲,東,10)和(甲,東,20)嗎?
作者: sagwow (不是我)   2022-12-07 19:48:00
不會! 第二題解了,第一題用w大的方法有成功,但表單變很卡QQ
作者: newacc (XD)   2022-12-08 11:09:00
第一題可以嘗試移除重複+SUMIF
作者: windknife18 (windknife18)   2022-12-08 11:55:00
第一題 =SUM(UNIQUE(FILTER(A:C,B:B="東")))

Links booklink

Contact Us: admin [ a t ] ucptt.com