
私は VBA の初心者で、名前が少ない sheet1 で 5 つの名前 (sheet2) を検索するコードをFor Loop
.を使用して記述しようとしていました。
しかし、これを実行すると、コードがエラーを出します。
オブジェクト変数またはWithブロック変数が設定されていません
どうすれば取り除けますか?
Sub find()
Sheets("sheet2").Activate
For x = 1 To 5
Cells(x, 1).Select
var1 = Selection.Copy
Sheets("sheet1").Activate
Dim search As Range
Set search = range("a1:f9").find(var1).Activate
Next
End Sub
答え1
この修正された VBA コードを使用すると、2 つのシート間の名前を一致させて返すことができます。
マクロを実行する前:
Sub QuickSearch()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Set ws1 = Sheets(1)
Set ws2 = Sheets(2)
Set rng1 = ws2.Range(ws2.[a2], ws2.Cells(Rows.Count, "A").End(xlUp))
With rng1.Offset(0, 1)
.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],Sheet10!C[-1]:C,1,FALSE),"""")"
.Value = .Value
End With
End Sub
- このコードは、どのシートでも標準モジュールとして入力できます。
マクロ実行後:
注意
ws2.Range(ws2.[a2], ws2.Cells(Rows.Count, "A").End(xlUp))
- このコード行の
[a2]
(セル参照) と"A"
(列名) は編集可能です。
答え2
Selection.Copy
は物体なので、コマンド
var1 = Selection.Copy
エラーが発生します - それは
Set var1 = Selection.Copy
しかし、それはあなたが望んだことではない。変数内の選択内容(テキスト)var1
。
だから
var1 = Selection.Text
その代わり。