2016-10-04 51 views
0

我有兩個工作簿。其中一個wb1由列A中的client名稱和列B中的idnumber組成。另一個工作簿wb2在圓柱A中也具有相同的client名稱(但順序不同)。我需要做的是從wb1複製idnumbers並粘貼到使用client名稱作爲參考的第二個工作簿。複製的值必須轉到用戶指定的列(即J,AC,DC)(使用輸入框)​​,並且僅當目標單元格尚未填充idnumber時,宏才應該粘貼值。VBA - 我需要VLookUP-ish代碼來複制值

我不知道如何使用application.vlookup方法,如果它的方法正確或方法更簡單。

我還想聽聽你的意見

到目前爲止,我設法想出了這個

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 

我也用這一個,但我不知道爲什麼我不能使用get細胞的正常地址:

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

首先發布您的代碼。 – Miqi180

+0

(見[如何提問](http://stackoverflow.com/help/how-to-ask)如果你很好奇你爲什麼會收到downvotes。) – BruceWayne

+0

@ Miqi180我編輯帖子向你展示我的代碼 – mm90

回答

1

這是您正在尋找的代碼。

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 
+0

這是一個很好的代碼,我可以工作。 This piece: 'Cells(cl.Row,col).Formula =「= VLOOKUP(」&cl.Address&「,」&rng.Worksheet.Name&「!」&rng.Address&「,2,0 )「'從字面上在該單元格中添加公式,但我需要實際值而不是公式在單元格內 此外,您提供的代碼在目標工作表中查找值而不是源表單(這就是爲什麼我得到」N/A「單元格中的錯誤)。但我想我可以通過一些調整來改變它,以適應我的情況。 – mm90

+0

在設置ws&ws1時插入表單名稱而不是索引。將單元格複製並粘貼到同一位置的值將幫助您獲取值而不是公式。請檢查答案的更新版本。 –

+1

所有這些「單元格」引用都需要一個工作表對象 – Brad

1

感謝Aditya Pansare和一些調整,以適應我的情況我已經找到了完整的解決方案。

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