如果列A包含“列D”并且列B包含“列E”,那么增加值

我想写一个macros,它读取A B列中的单词,看它们是否分别与列E F中的单词匹配, 然后 列C中的值添加到列G.

例如:

在这里输入图像描述

例如,你可以看到A列和B列有两个“Lion”和“Horse”的实例,所以G列中有两个(10 + 8 = 18)。

不幸的是,我所做的尝试只是将列C中的值复制到列G:

Sub CombineAnimals() lastRow = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row For x = 1 To lastRow If InStr(1, Sheets("Sheet1").Cells(x, 1), Cells(x, 5)) <> 0 _ And InStr(1, Sheets("Sheet1").Cells(x, 2), Cells(x, 6)) <> 0 Then Sheets("Sheet1").Cells(x, 7).Value = _ Sheets("Sheet1").Cells(x, 7).Value + Cells(x, 3) End If Next x End Sub 

我知道我在做“x”(可能还有很多其他的东西)有些问题,但是我找不到一个办法让它工作。 有没有什么办法可以改变这个,所以它把总数加在一起,就像它在我的示例图片中一样?

非常感谢您的帮助。

它是否必须是一个macros? 您可以将=SUMIFS(C:C,A:A,E2,B:B,F2)放入G2并填写:

在这里输入图像描述

如果你真的想要在macros中有这样的事情,它会是这样的:

 Sub CombineAnimals() Range("G2").FormulaR1C1 = "=SUMIFS(C[-4],C[-6],RC[-2],C[-5],RC[-1])" Range("G2").AutoFill Destination:=Range("G2:G" & Range("F" & ActiveSheet.Cells.Rows.Count).End(xlUp).Row) End Sub 

除非有很好的理由,否则一个简单的SUMIFS循环就可以工作:

 Sub CombineAnimals() With Sheets("Sheet1") lastRow = .Range("E" & .Rows.Count).End(xlUp).Row For x = 2 To lastRow .Cells(x, "G").Value = Application.SumIfs(.Range("C:C"), .Range("A:A"), .Cells(x, "E"), .Range("B:B"), .Cells(x, "F")) Next x End With End Sub 

像这样的东西可以工作,虽然它可能有点矫枉过正:

您连接string中的前两个单元格,并将此string用作字典的键。 然后,当find类似的东西时,将其值添加到字典中。 最后你可以打印字典。

 Option Explicit Public Sub TestMe() Dim dict As Object Dim rngCell As Range Dim rngInput As Range Dim strInput As String Dim dblInput As Double Dim lngCounter As Long Dim varKey As Variant Set dict = CreateObject("Scripting.Dictionary") Set rngInput = ActiveSheet.Range("A2:A6") For Each rngCell In rngInput strInput = rngCell.Value & rngCell.Offset(0, 1).Value dblInput = rngCell.Offset(0, 2).Value If dict.exists(strInput) Then dict(strInput) = dict(strInput) + dblInput Else dict.Add strInput, dblInput End If Next rngCell For Each varKey In dict.keys Debug.Print varKey, dict(varKey) Next varKey End Sub