0

私はVBAを独学しようとしています。Sheet1 と Sheet2 の 2 つのワークシートを含むワークブックがあります。以下のコードを見つけて、自分で動作するように変更しました。Sheet1!B1 の値を取得し、Sheet2!K:K で検索し、Sheet1!D1 を Sheet2 の列 E (K - 6) のセルの値に設定します。

これをループして、B1:B100 を見て D1:D100 を設定するにはどうすればよいですか?

Sub Looping()
    Dim rng1 As Range
    Dim strSearch As String
    strSearch = Range("B1").Value
    Set rng1 = Worksheets("Sheet2").Range("K:K").Find(strSearch, , xlValues, xlWhole)
    If Not rng1 Is Nothing Then
        Range("D1").Value = rng1.Offset(0, -6)
    Else
        MsgBox strSearch & " not found"
    End If
End Sub

ありがとう!

4

1 に答える 1

1

まず第一に、その問題には VBA ソリューションは必要ありません。この数式を Sheet1!D1:D100 に入れるだけです。

=IFERROR(INDEX(Sheet2!$E:E$,MATCH(B1,Sheet2!$K:$K,0))),"見つかりません")

VBA でこれを行う場合は、ループ内のコードを次に示します。

サブループ()
    範囲として暗い rngTarget
    Dim rngSearched as Range

    For Each rngTarget in Sheets("Sheet1").Range("D1:D100")
        rngSearched = Sheets("Sheet2").Range("K:K").Find( _ を設定します。
            rngTarget.Offset(, -2).Value, , xlValues, xlWhole)    
        rngSearch が何もない場合
            rngTarget.Value = "見つかりません"
        そうしないと
            rngTarget.Value = rngSearch.Offset(, -6)
        終了条件
    次の rngTarget
サブ終了

または、両方のアプローチを組み合わせます。

サブフィル直接
    With Sheets("Sheet1").Range("D1:D100")
        .Formula="=IFERROR(INDEX(Sheet2!$E:E$,MATCH(B1,Sheet2!$K:$K,0))),""見つかりません"")"
        .計算する
        .Value = .Value '値のコピーを作成します
    で終わる
サブ終了
于 2013-01-25T22:11:02.443 に答える