【发布时间】:2021-10-12 14:27:46
【问题描述】:
我是一名实习生,自周一以来我一直在努力寻找解决方案…… 我是 VBA 新手,我不清楚如何根据某些条件对列中的单元格求和。我尝试了多个代码,但一旦我的代码不起作用,我就删除了它们。
所以我想做的是以下内容;
我有一个名为 worksheets("Amounts") 的工作表,其中有一个数据库。
自周一以来我一直在努力做的事情: 将 Q 列中的金额值相加(“AMOUNT”)仅当 COL A、col B、col C、col、col E、col F 的行具有相等的单元格值时。
然后,我想在 col Q 中根据前一个条件对金额求和,并将总计放在一行中,以代替包含共同值的行。 在我想删除彼此匹配的每一行以显示具有共同值的合计金额之后。像下面的例子;
我的数据库;
| COL A | COL B | COL C | COL E | COL F | COL Q |
|---|---|---|---|---|---|
| CODE | STATUE | ATTRIBUTE | Country | Capital | AMOUNT |
| A1 | OK | Z1 | ENGLAND | LONDON | 400 |
| C1 | NOK | R2 | SPAIN | MADRID | 50 |
| A1 | OK | Z1 | ENGLAND | LONDON | 300 |
| D1 | PENDING | X | CANADA | OTTAWA | 10 |
预期的输出;
| COL A | COL B | COL C | COL E | COL F | COL Q |
|---|---|---|---|---|---|
| CODE | STATUE | ATTRIBUTE | Country | Capital | AMOUNT |
| A1 | OK | Z1 | ENGLAND | LONDON | 700 |
| C1 | NOK | R2 | SPAIN | MADRID | 50 |
| D1 | PENDING | X | CANADA | OTTAWA | 10 |
==> 所以这里我们只有 2 行在 col A、B、C、E 和 F 上具有共同值。我想将这两行的数量相加并删除这两行以形成一个使用这些常见的值,例如上面的示例。
显然对于与其他行不匹配的其他行,我想让它们保持原样。
worksheets("Amount") 中的数据库可能会有所不同,并且可以获取更多或更少的行,因此我需要将这个过程自动化。
这是我最后保存的代码:
Option Explicit
Sub agreg()
Dim i As Long
Dim ran1 As Range
ran1 = ThisWorkbook.Worksheets("Values").Range("A" & Worksheets("Values").Rows.Count).End(xlUp).row + 1
For Each i In ran1
If Cells(i, 1) = Range("A1", Range("A1").End(xlDown)).Value Then
cells(i,4) + range("D1",range("D1").End(xlDown)).Value
End If
Next i
End Sub ```
【问题讨论】:
-
使用 Powerquery 或 Powerpivot 怎么样。无需使用 VBA,如果您不根据需要对行进行分组。
-
另一条评论:您没有提到 G 到 P 列应该发生什么或它们包含哪些数据(如果有)以及您想在输出中对它们做什么?
标签: excel vba if-statement foreach date-range