2016-10-04 7 views
0

私は2つのワークブックを持っています。そのうちの1つはwb1で、列Aにはclientの名前、列Bにはidnumberとなっています。他のワークブックwb2もcolumb Aの名前は同じですが(順序は異なります)。私がする必要があるのはwb1からidnumbersをコピーして、参考としてclientという名前を使って2番目のブックに貼り付けることです。コピーした値は、入力ボックスを使用してユーザーが指定した列(つまり、J、AC、DC)に移動し、ターゲットセルがidnumberによってまだ入力されていない場合にのみ値を貼り付ける必要があります。VBA - 値をコピーするのにVLookUP-ishコードが必要です

私はapplication.vlookupメソッドの使い方がわからないし、正しい方法や単純なメソッドがあるかどうかは分かりません。

Idはこれまでのところ、私はこの

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

まず、コードを投稿してください。 – Miqi180

+0

(なぜ、あなたがダウンボトンスを受け取ったのか不思議であれば、[How to Ask](http://stackoverflow.com/help/how-to-ask)を参照してください) – 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

それは素晴らしいコード私は上で動作することができます。 この部分は 'セル(cl.Row、col).Formula =" = VLOOKUP( "&cl.Address&"、&rng.Worksheet.Name& "&rng.Address&"、2,0 ) "は文字通りそのセルに数式を追加しますが、セル内の数式の代わりに実際の値が必要です また、ソースシートの代わりにターゲットシートの値を探します。/A "エラー)。しかし、私は自分のケースに合わせていくつかの調整をして自分でそれを変えることができると思う。 – mm90

+0

wsとws1を設定している間、インデックスの代わりにシート名を挿入します。同じ場所に値としてセルをコピーして貼り付けると、式の代わりに値を取得するのに役立ちます。更新版の回答を確認してください。 –

+1

これらのすべての 'Cells'リファレンスは、それらの前にワークシートオブジェクトが必要です – 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 
関連する問題