[算表] 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