0

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

  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   
4

2 回答 2

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 中:

编辑

即使你想使用 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.如果您不想打开文件,那么formulaorformula in VBA是要走的路:)

于 2013-01-23T06:06:18.060 回答
0

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

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

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

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

于 2013-01-24T15:29:36.330 回答