0

注文を含む Excel スプレッドシートの VBA コードに問題があります。各行には、ワークブックの別のシートに含まれる顧客の電子メール アドレスを検索するために使用する顧客番号が含まれています。

vlookup コードは 1 つのセルに対しては正常に機能しますが、スプレッドシートのすべての行をループしようとすると問題が発生します。単一セルの Excel 式は、たとえば、

=VLOOKUP(B2,Customers!A2:D1000,4,FALSE)

このために生成される VBA コードは次のとおりです。

    Range("M2").Select
ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)"

開始セルを選択した後、これをループに組み込むと、次のようになります。

Cells(2, 13).Select
Do
  ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-11],Customers!RC[-12]:R[999]C[-9],4,FALSE)"
  ActiveCell.Offset(1, 0).Select
Loop Until IsEmpty(ActiveCell.Offset(0, -10))    

問題は、値が検索されているセルに関連するのではなく、「テーブル配列」を固定したいということです。しかし、私はそれを行う方法をまったく理解できません。コードを次のように変更すると、実行時エラーが発生します。

ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-11],Customers!A2:D1000,4,FALSE)"

範囲変数を.addressで使用して、引用、引用解除、範囲変数の設定を試みました...誰か助けてもらえますか?

どうもありがとう。

4

1 に答える 1

0

R1C1式の括弧は、相対的な範囲を指定していることを示していると確信しています(特にマイナスを含む)。絶対範囲を指定する場合は、R1C1 セルを括弧なしで指定する必要があります。例: R2C2:R4C4。

簡単な例として:

Sub test()
  Sheet1.Range("C5").FormulaR1C1 = "=VLOOKUP(1,R1C1:R3C3,2,FALSE)"
End Sub

これを実行すると、セル C5 に絶対 "A1" スタイルの数式が表示されます。

あなたの問題は次のとおりだと思います:

Customers!RC[-12]:R[999]C[-9]

相対的な範囲だからです。データ テーブルの場所を明示的に指定する必要があります。例Customers!RC12:R999C9(シートのどこにあるかを把握する必要があります)。

これを理解する簡単な方法は、ワークシートのデータ テーブルを強調表示し、Visual Basic Editor に切り替えて、これを手動で実行することです (カーソルを Sub 内に置き、[再生] ボタンを押すか、[実行] -> [実行] に移動します)。 )。

Sub test2()
    Dim r As Range
    Set r = Application.Selection
    InputBox "your r1c1 range:", , r.Address(True, True, xlR1C1)
End Sub
于 2011-08-18T00:18:05.570 に答える