VB比较多个工作簿中的两个单元格范围,如果匹配复制到不同的单元格

时间:2013-01-22 21:16:30

标签: vba excel-vba compare excel

我想整天想出这个。这就是我需要完成的事情:

  1. 使用GetFile选择多个工作簿而不打开它们。
  2. 将所选工作簿的单元格A2循环地与循环工作簿进行比较。
  3. 如果所选工作簿的单元格A2等于列A中包含的参考工作簿内的数值的数值,则将匹配的参考工作簿单元格的相应单元格中的列B的文本复制/过去到所选工作簿的M2。
  4. 听起来很复杂,但让我证明一下。这些字母代表列名。

    选定的工作簿 A2 = 12 M2 =“”

    参考工作手册 A2 = 12 B2 =牛奶,蛋白质

    期望的结果:
    精选工作手册 A2 = 12 M2 =牛奶,蛋白质

    到目前为止,这是我的代码:

    Sub Click() 
    Dim rCell As Range, vVal1, vVal2 
    Dim wbCheck As Workbook 
    
    For Each rCell In Workbooks("2.xls").Worksheets(1).Range("A1:C100") 
        vVal1 = rCell 
        vVal2 = ThisWorkbook.Worksheets(1).Range(rCell.Address) 
        If IsNumeric(vVal1) And IsNumeric(vVal1) Then 
            If vVal1 = vVal2 Then 
                rCell.Interior.ColorIndex = 3 
            ElseIf vVal1 < > vVal2 Then  
            End If 
        End If 
    Next rCell 
    End Sub   
    

2 个答案:

答案 0 :(得分:0)

为什么需要VBA代码?

这可以使用Excel公式实现。

将其粘贴到M2并将其复制

=IF(A2='C:\[Ref.xlsx]Sheet1'!A2,'C:\[Ref.xlsx]Sheet1'!B2,"")

我的假设(请根据情况更改)

  1. 参考文件名为Ref.xlsx
  2. 您正在从参考文件的Sheet1中提取数据
  3. Ref.xlsx位于C:
  4. 修改

    即使你想使用VBA,你也可以这样做。

    Sub Sample()
        Application.Calculation = xlCalculationManual
    
        ThisWorkbook.Sheets("Sheet1").Range("M2").Formula = _
        "=IF(A2='C:\[Sample.xlsx]Sheet1'!A2,'C:\[Sample.xlsx]Sheet1'!B2,"""")"
    
        Application.Calculation = xlCalculationAutomatic
    End Sub
    

    上述公式或代码是有益的,因为您在第1点提到的内容Using GetFile select a number of workbooks without opening them.如果您不想打开文件,那么formulaformula in VBA就是您的选择:)

答案 1 :(得分:0)

我解决了自己的问题。答案是使用VLookup。

= VLOOKUP(I2,'C:\ Desktop \ Merge [ISReference.xlsx]参考'!B2:G1923,6,FALSE)

我很惊讶没有人向我建议。鉴于它的简单性,我能够将这个函数构建到我构建的一些代码中,以便在访问和使用Vlookup链接外部工作簿的表单上运行FSO文件列表选择器。

感谢Siddarth提供了嵌入函数的正确方向,而不是疯狂的迭代循环。