作者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/cn.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