如果列A包含"列D" AND列B包含"列E"然后增加价值

时间:2017-02-02 11:12:06

标签: excel vba excel-vba

我想写一个宏来读取A列 B中的单词,看看它们是否分别匹配E列 F中的单词,< strong>然后 将C列中的值添加到G列。

例如:

enter image description here

例如,您可以看到有两个&#34; Lion&#34;和&#34;马&#34;在列A和B中,因此列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

我知道我对&#34; x&#34;做错了。 (可能还有很多其他的东西),但我无法找到一种方法让它发挥作用。有没有办法改变它,所以它将总数加在一起,就像在我的示例图片中一样?

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:3)

它必须是一个宏吗?您可以将y=6放入G2并填写:

enter image description here

如果你真的想在宏中使用它,那就是这样的:

=SUMIFS(C:C,A:A,E2,B:B,F2)

答案 1 :(得分:2)

除非有充分的理由不这样做,否则一个简单的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

答案 2 :(得分:1)

这样的东西会起作用,虽然可能有点矫枉过正:

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

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