Excel 当单元格与表中的某些列匹配时,执行X

Excel 当单元格与表中的某些列匹配时,执行X,excel,vba,Excel,Vba,因为我是VBA的大傻瓜,我似乎无法解决这个问题。我有以下问题: 我有一个导入数据的“导入”表。在这张纸上,我有3个单元格,它们的值一直在变化,C3,C4和C5 当这些单元格与另一张工作表上另一个表中的单元格匹配时,我希望操纵同一表中另一列中的值 在图像上,它看起来像这样: 当A列与苹果匹配,B列与橙子匹配,C列与桃子匹配时,我想对D列同一行的数字做一些处理 我写了下面的代码,但它不起作用,只返回D列中的所有数字。我不知道出了什么问题 我希望这里有人能帮我 Dim c1 As Range Dim

因为我是VBA的大傻瓜,我似乎无法解决这个问题。我有以下问题:

我有一个导入数据的“导入”表。在这张纸上,我有3个单元格,它们的值一直在变化,C3,C4和C5

当这些单元格与另一张工作表上另一个表中的单元格匹配时,我希望操纵同一表中另一列中的值

在图像上,它看起来像这样:

当A列与苹果匹配,B列与橙子匹配,C列与桃子匹配时,我想对D列同一行的数字做一些处理

我写了下面的代码,但它不起作用,只返回D列中的所有数字。我不知道出了什么问题

我希望这里有人能帮我

Dim c1 As Range
Dim c2 As Range
Dim c3 As Range
Dim r1 As Range
Dim r2 As Range
Dim r3 As Range
Dim a1 As Range
Dim a2 As Range
Dim a3 As Range

Set r1 = Sheets("Specificaties").Range("H" & Rows.Count).End(xlUp)
Set r2 = Sheets("Specificaties").Range("I" & Rows.Count).End(xlUp)
Set r3 = Sheets("Specificaties").Range("J" & Rows.Count).End(xlUp)


Sleutel = Sheets("Specificaties").Range("M" & Rows.Count).End(xlUp).Row

Set a1 = Sheets("Import").Range("C3")
Set a2 = Sheets("Import").Range("C4")
Set a3 = Sheets("Import").Range("C5")

    For Each c1 In r1
            For Each c2 In r2
                    For Each c3 In r3
                    If c3.Value = a3.Value And _
                        c2.Value = a2.Value And _
                        c1.Value = a1.Value Then
                    
                         For i = Sleutel To 3 Step -1
                         MsgBox Cells(i, 13).Value
                         Next
                         
                    Else
                    MsgBox "Negative result"
                    End If
    Next
    Next
    Next

End Sub

我同意@SJR的观点,即自动筛选是一个不错的选择,但这是一个选项。这假设A-D的列标签基于代码或数字8-11位于H-K列中,并且数据从第4行开始。我只选择了其中一列作为长度,因为所有3列中都必须有一个值才能满足您描述的标准。您的3个嵌套循环不会按顺序检查每一行

Sub test()

    Dim r1 As Long
    Dim x As Long
    
    Dim a1 As Range
    Dim a2 As Range
    Dim a3 As Range
    Dim wks1 As Worksheet
    Dim wks2 As Worksheet
    
    Set wks1 = ThisWorkbook.Sheets("Specificates")
    Set wks2 = ThisWorkbook.Sheets("Import")
    
    Set r1 = wks1.Range("H" & Rows.Count).End(xlUp).Row
    
    Set a1 = wks2.Range("C3")
    Set a2 = wks2.Range("C4")
    Set a3 = wks2.Range("C5")
    
    For x = 4 To r1
        If wks1.Cells(x, 8).Value = a1.Value And wks1.Cells(x, 9).Value = a2.Value And wks1.Cells(x, 10).Value = a3.Value Then
            MsgBox wks1.Cells(i, 11).Value
        Else
            MsgBox "Negative Result"
        End If
    Next x
    
End Sub

这就是我最终使用的代码,它正是我想要的

Sub Fruits()
Dim Criteria1 As Variant, Criteria2 As Variant, Criteria3 As Variant
Dim rng As Range, cell As Range
Dim wsImport As Worksheet: Set wsImport = Sheets("Import")
Dim wsSpec As Worksheet: Set wsSpec = Sheets("Specificaties")

Criteria1 = wsImport.Range("C3")
Criteria2 = wsImport.Range("C4")
Criteria3 = wsImport.Range("C5")

Set rng = wsSpec.Range("H3:H" & (wsSpec.Cells(Rows.Count, 8).End(xlUp).Row))

For Each cell In rng
    If cell.Value = Criteria1 And cell.Offset(0, 1).Value = Criteria2 And cell.Offset(0, 2).Value = Criteria3 Then
        MsgBox cell.Offset(0, 5).Value
    End If
Next cell


End Sub

什么是
range1
range2
range3
?如果您想引用
r1
r2
r3
,则它们将仅为1个单元格范围。我的问题是,代码输入错误。很抱歉,我不太明白我应该修改什么来适应我的问题。为什么不使用自动筛选?谢谢你的回复!我没法让它工作。我在代码“MsgBox wks1.Cells(I,11).Value”周围得到一个1004错误,将
I
更改为
x
,它工作得非常好。非常感谢你的帮助!我必须删除“r1=wks1.Range(“H”和Rows.Count.End(xlUp.Row)”之前的“set”。但仍然像一个魅力。