作者sagwow (不是我)
看板Office
標題[算表] SUMIF公式 和 VBA FindNext疑問
時間Tue Dec 6 22:52:12 2022
軟體: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函數是否有內建更好的判斷方法呢?或是大家有沒有更簡潔的方法~
--
╭─╮ ──╮ ╭─┤╭╮ ╭╭─╮╮ ╭
│ │ │ ││││││ ││││
╰─╮ ╭─┼╮╰─┼╯││││○││││
│ │ ││ │ ││││ ││││
╰─╯ ╰─╯╰──╯ ╰╰╯╰─╯╰╯╯
傻瓜,我們都一樣~~ ψsagwow
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.133.154.177 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Office/M.1670338335.A.E17.html
1F:推 kinomon: 複雜判斷可以用sumproduct 12/06 23:41
3F:推 waiter337: 用字典key放A+B自動去重 item放C 跑迴圈 12/07 00:56
4F:→ waiter337: 也可以搭配字典的exists判斷是否之前已放入字典 12/07 00:57
5F:推 waiter337: Sub tt() 12/07 01:05
6F:→ waiter337: Set d = CreateObject("scripting.dictionary") 12/07 01:05
7F:→ waiter337: For i = 1 To Cells(Rows.Count, 1).End(3).Row 12/07 01:05
8F:→ waiter337: If Cells(i, 2) = "東" Then 12/07 01:05
9F:→ waiter337: If d.exists(Cells(i, 2).Value) = False Then 12/07 01:05
10F:→ waiter337: d(Cells(i, 1).Value) = Cells(i, 3).Value 12/07 01:05
11F:→ waiter337: End If 12/07 01:05
12F:→ waiter337: End If 12/07 01:05
13F:→ waiter337: Next 12/07 01:05
14F:→ waiter337: For Each Z In d.items(): x = x + Z: Next 12/07 01:05
15F:→ waiter337: Range("e1") = x 12/07 01:06
16F:→ waiter337: End Sub 12/07 01:06
17F:→ newacc: 微軟官方說明文件中的建議跟你想到的方式差不多 12/07 10:48
19F:→ newacc: 第一題想確認,有可能同時出現(甲,東,10)和(甲,東,20)嗎? 12/07 10:50
20F:→ sagwow: 不會! 第二題解了,第一題用w大的方法有成功,但表單變 12/07 19:48
21F:→ sagwow: 很卡QQ 12/07 19:48
22F:→ newacc: 第一題可以嘗試移除重複+SUMIF 12/08 11:09
23F:推 windknife18: 第一題 =SUM(UNIQUE(FILTER(A:C,B:B="東"))) 12/08 11:55