VBA – 我需要VLookUP-ish代码来复制值

我有两个工作簿。 其中一个wb1由A列中的client名称和B列中的wb1组成。另一个工作簿wb2在columb A中也具有相同的client名称(但顺序不同)。 我需要做的是从wb1复制wb1并粘贴到第二个工作簿使用client名称作为参考。 复制的值必须转到用户指定的列(即J,AC,DC)(使用input框)​​,只有当目标单元格尚未填入idnumber时,macros才能粘贴值。

我不知道如何使用application.vlookup方法,如果它正确的方式或有更简单的方法。

我喜欢听你的build议

到目前为止,我设法想出了这个

 Sub copy_val() Dim lookfor As Range, lookin As Range, found As Variant, col as variant Set lookfor = Workbooks("wb1.xlsm").Sheets("Sheet1").Range("A2:a22") Set lookin = Workbooks("wb2.xlsm").Sheets("Sheet2").Range("A2:a22") col = InputBox("please provide input colum") found = apllication.VLookup(lookfor.Value, lookin, col, 0) For Each cl In ActiveSheet.Range("B2:b21") Range("B&Activecell.row").Select Selection.Copy Range("found").Select Selection.Paste End Sub 

我也用这个,但我不知道为什么我不能得到适当的单元格地址使用:

 col = inputbox("please provide input column" id_row = sheets.("sheet2).range("col"&"2").row id_col = sheets.("sheet2).range("col"&"2").column 

这是您正在寻找的代码。

 Sub VLookupUDF() Dim wb As Workbook Dim ws, ws1 As Worksheet Dim rng As Range Dim col As String Set wb = ActiveWorkbook Set ws = ActiveWorkbook.Sheets(<source sheet name>) Set ws1 = ActiveWorkbook.Sheets(<sheet name for vlookup>) wb.Activate Set rng = ws.Range("A:B") ws1.Select col = InputBox("please provide input colum") For Each cl In ws1.Range("B2:b21") If ws1.Cells(cl.Row, CStr(col)).Value = "" Then ws1.Cells(cl.Row, col).Formula = "=VLOOKUP(" & cl.Address & "," & rng.Worksheet.Name & "!" & rng.Address & ",2,0)" ws1.Cells(cl.Row, col).copy ws1.Cells(cl.Row, col).pastespecial xlpastevalues End If Next cl End Sub 

感谢Aditya Pansare和一些调整,以适应我的情况,我已经find了完整的解决scheme。

 Sub VLookupUDF() Dim wb1, wb2 As Workbook Dim ws1, ws2 As Worksheet Dim rng As Range Dim col As String Set wb1 = Workbooks("wb1.xlsm") Set wb2 = Workbooks("wb2.xlsm") Set ws1 = wb1.Sheets("Data table") Set ws2 = wb2.Sheets("Reg input") wb1.Activate Set rng = ws1.Range("A:B") wb2.Activate ws2.Select col = InputBox("Please provide input column") For Each cl In ws1.Range("A2:A21") If ws2.Cells(cl.Row, CStr(col)).Value = "" Then ws2.Cells(cl.Row, col).Formula = "=VLOOKUP(" & cl.Address & ",'[wb1.xlsm]Data table'!$A:$B,2,0)" ws2.Cells(cl.Row, col).Copy With ws2.Cells(cl.Row, col) .PasteSpecial xlPasteValues .NumberFormat = "hh:mm" End With End If Next cl MsgBox ("Export completed") End Sub