マイクロソフト エクセル - VBA

マイクロソフト エクセル - VBA

私は 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

その代わり。

関連情報