【发布时间】:2018-03-06 15:03:09
【问题描述】:
Image of WorkSheet1Image of WorkSheet2 如果我想根据两个不同工作表中的标准对一列中的单元格求和并连接另一列中的单元格,Excel VBA 代码会是什么样子?在下面的示例中,我想根据以下条件汇总费率并连接 WorkSheet1 中的类型:
如果 WorkSheet1 中的描述与 WorkSheet2 中的描述匹配
如果 WorkSheet2 中的代码是 03
如果 WorkSheet1 中的类型是“收入”和“特殊现金”
这是 VBA 代码运行之前工作表的样子:
工作表1
Column A Column B Column C
(Row 1) Description Type Rate
(Row 2) BGIO US Equity Income 0.05
(Row 3) BGIO US Equity Short Term Cap Gain 0.009573
(Row 4) BGIO US Equity Special Cash 0.00931
工作表2
Column A Column B Column C
(Row 1) Description Rate Code
(Row 2) BGIO US Equity 0.05931 03
(Row 3) BGIO US Equity 0.009573 07
这是 VBA 代码运行后 WorkSheet1 中的结果:
Column A Column B Column C
(Row 1) Description Type Rate
(Row 2) BGIO US Equity Income + Special Cash 0.05931
(Row 3) BGIO US Equity Short Term Cap Gain 0.009573
本质上,我是在两个工作表之间创建匹配项(如果存在)以进行协调。
这是我目前拥有的 VBA 代码,它不适用于连接部分:
For e = 2 To WorkSheet1LastRow
checkValue = WorkSheet1.Cells(e, 1)
For x = 2 To WorkSheet1LastRow
Type = WorkSheet1.Cells(x, 2)
Next x
Next e
For c = 2 To WorkSheet2LastRow
CheckValue2 = WorkSheet2.cells(c, 1)
For q = 2 To WorkSheet2LastRow
If WorkSheet2.cells(q, 3) = "03" And WorkSheet2.Cells(q, 1) <> CheckValue2 Then
If checkValue2 = CheckValue1 Then
If Type = "Income" Or "Special Cash" Then
Type = Type & "+" & Type
End If
End If
End If
Next q
Next c
我在想如果我能成功编码这部分,我可以记录一个 sumif 公式来完成这个过程。
【问题讨论】:
-
你可以用几个工作表公式更容易地做到这一点,除非你有理由需要在 VBA 中这样做。 (不要阻止任何人学习!)
-
...你想
sumif做什么?我实际上不确定我是否遵循您正在做的事情,但我怀疑您的样本数据不能代表您实际拥有的数据,因为根据您的标准,description是无关紧要的,因为只有一个,所以您只需需要MATCH和IF。 -
我真的很想学习如何使用 VBA 来做到这一点,因为如果能看到它是如何完成的,它将为我开启其他创新项目的道路。
-
该列中会有更多描述,我只是提供了这个示例,因为如果我能得到它并在以后添加其他迭代。
-
是的,我认为有更多的描述,我的观点是,对于代表实际数据的至少种代表的示例很重要,因为从外部角度来看,两个不同的人通常会假设完全不同的事情会影响他们对解决方案的解释。 ...但是 A+ 表示对学习 VBA 的棘手问题的出色态度...(与许多新成员提出的问题相反:“我需要修复此代码并且我不想学习任何东西...我希望它快完成。”...前几百次是有趣,)