【问题标题】:VB Compare two range of cells in multiple workbooks and if match copy to different cellVB比较多个工作簿中的两个单元格范围以及是否将副本匹配到不同的单元格
【发布时间】:2013-01-22 21:16:29
【问题描述】:

我整天都在想办法解决这个问题。这是我需要完成的:

  1. 使用 GetFile 选择多个工作簿而不打开它们。
  2. 逐个循环比较选定工作簿的单元格 A2 与参考工作簿。
  3. 如果所选工作簿的单元格 A2 等于 A 列中包含的参考工作簿中数值的数值,则将匹配的参考工作簿单元格的相应单元格中的 B 列文本复制/粘贴到所选工作簿的 M2 中。

听起来很复杂,但让我来演示一下。字母代表列名。

选定的工作簿 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   

【问题讨论】:

  • MS Access 的故事在哪里?另外,您在哪里遇到问题?
  • 如果您的参考值在 A 列中,为什么还要比较 B 和 C 列中的值?在您的示例代码中是ThisWorkbook“参考”工作簿?
  • 两张表中的单元格是否连续?如果是这样,您可以将数据保存到数组并进行比较,然后将完整转储到新工作表。
  • @蒂姆。我不能透露你的问题的原因
  • @Remou 与 Tim 相同的消息

标签: vba excel compare


【解决方案1】:

为什么需要 VBA 代码?

这可以使用 Excel 公式来实现。

将其粘贴到M2 并复制下来

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

我的假设(请酌情更改)

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

编辑

即使你想使用 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

上面的公式或代码是有益的,因为你在第一点提到的Using GetFile select a number of workbooks without opening them. 如果你不想打开文件,那么formulaformula in VBA 是要走的路:)

【讨论】:

  • 悉达多,感谢您提供有用的反馈。其实是两个问题。如果每次按 Enter 时都在 excel 中使用公式,它会弹出参考工作簿位置的查找链接对话框。其次,我想使用 B2:B1923 的范围来查看是否与所选工作表的 A2 匹配,然后复制包含在参考文件的 G2:I1923 范围内的匹配。有什么进一步的建议吗?
  • 我之前的评论。它是类似于查找链接对话框的查找 ISReference 对话框。无论哪种方式,我都不希望它打开。这是我到目前为止所拥有的...... M2=IF(H2= 'C:\Desktop\Merge[ISReference.xlsx]Reference]Reference!'$B$2:$B$1923,'C:\Desktop\Merge[ ISReference.xlsx]Reference]Reference!'$G$2:$I$1923,"No Match") 这不起作用...有什么修复方法吗?
【解决方案2】:

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

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

我很惊讶没有人向我提出这个建议。鉴于它的简单性,我能够将此函数构建到我构建的一些代码中,以通过表单上的 FSO 文件对话框选择器运行,并使用 Vlookup 链接外部工作簿。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2018-03-25
    • 2014-10-28
    相关资源
    最近更新 更多