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

看板Office作者 (不是我)時間1年前 (2022/12/06 22:52), 編輯推噓4(4019)
留言23則, 5人參與, 1年前最新討論串1/1
軟體: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://www.ptt.cc/bbs/Office/M.1670338335.A.E17.html

12/06 23:41, 1年前 , 1F
複雜判斷可以用sumproduct
12/06 23:41, 1F

12/06 23:43, 1年前 , 2F

12/07 00:56, 1年前 , 3F
用字典key放A+B自動去重 item放C 跑迴圈
12/07 00:56, 3F

12/07 00:57, 1年前 , 4F
也可以搭配字典的exists判斷是否之前已放入字典
12/07 00:57, 4F

12/07 01:05, 1年前 , 5F
Sub tt()
12/07 01:05, 5F

12/07 01:05, 1年前 , 6F
Set d = CreateObject("scripting.dictionary")
12/07 01:05, 6F

12/07 01:05, 1年前 , 7F
For i = 1 To Cells(Rows.Count, 1).End(3).Row
12/07 01:05, 7F

12/07 01:05, 1年前 , 8F
If Cells(i, 2) = "東" Then
12/07 01:05, 8F

12/07 01:05, 1年前 , 9F
If d.exists(Cells(i, 2).Value) = False Then
12/07 01:05, 9F

12/07 01:05, 1年前 , 10F
d(Cells(i, 1).Value) = Cells(i, 3).Value
12/07 01:05, 10F

12/07 01:05, 1年前 , 11F
End If
12/07 01:05, 11F

12/07 01:05, 1年前 , 12F
End If
12/07 01:05, 12F

12/07 01:05, 1年前 , 13F
Next
12/07 01:05, 13F

12/07 01:05, 1年前 , 14F
For Each Z In d.items(): x = x + Z: Next
12/07 01:05, 14F

12/07 01:06, 1年前 , 15F
Range("e1") = x
12/07 01:06, 15F

12/07 01:06, 1年前 , 16F
End Sub
12/07 01:06, 16F

12/07 10:48, 1年前 , 17F
微軟官方說明文件中的建議跟你想到的方式差不多
12/07 10:48, 17F

12/07 10:48, 1年前 , 18F
12/07 10:48, 18F

12/07 10:50, 1年前 , 19F
第一題想確認,有可能同時出現(甲,東,10)和(甲,東,20)嗎?
12/07 10:50, 19F

12/07 19:48, 1年前 , 20F
不會! 第二題解了,第一題用w大的方法有成功,但表單變
12/07 19:48, 20F

12/07 19:48, 1年前 , 21F
很卡QQ
12/07 19:48, 21F

12/08 11:09, 1年前 , 22F
第一題可以嘗試移除重複+SUMIF
12/08 11:09, 22F

12/08 11:55, 1年前 , 23F
第一題 =SUM(UNIQUE(FILTER(A:C,B:B="東")))
12/08 11:55, 23F
文章代碼(AID): #1ZZrSVuN (Office)
文章代碼(AID): #1ZZrSVuN (Office)