1

非常に単純に見えるマクロを作成しようとしていますが、思ったより難しいことが証明されています。「ポイント・アンド・クリック」方式で作成を開始しましたが、思ったほどダイナミックではありませんでした。基本的に、vlookup を使用して別のワークシートからセル A2 の名前を検索し、列 D の数値を現在のシートにコピーしています。コードを見ると、この部分は次のようになります。

Range("D2").Select
ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-3],'Downstairs'!R[-1]C[-3]:R[200]C[14],4,0)"

Range("D2").Select
Selection.AutoFill Destination:=Range("D2:D" & lastrow&)

最初の数字を見つけたら、残りを自動入力しようとしています。実行すると動作しますが、名前が整っているからだと思います。ただし、名前が順番どおりでない場合、R[] と C[] 内のすべての数値が行を下るにつれて変化し続けるため、正しい数値が見つかりません。リストにさらに名前を追加しても機能しないと思います。これは、必要なことです。R[] 内の数値を 93 から 200 に変更しました。これは、以前に作成した lastrow オブジェクトを組み込む方法がよくわからず、これを動的にする別の方法がわからないためです。これを行うより良い方法はありますか?

4

1 に答える 1

1

上記のコメントで述べたように、これには VBA は必要ありません。Excel に数式を直接入力して、手動でオートフィルを行うことができます。それでもVBAを実行したい場合は、AutoFillを使用する必要がない場所でこのコードを使用してください。このコードは、関連するすべてのセルに数式を入力します。

テーブル配列が一定ではなく、下に移動すると変化していたため、数式も正しい結果を与えていませんでした。それを防ぐには、単に$記号を使用します。

別のヒント:R1C1フォーマットが苦手な場合、フォーマットは非常に混乱します。A1通常のフォーマットに固執します。

これが、あなたが望むものを達成するための最も簡単な方法です。必要に応じてコードを修正してください

Sub Sample()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim lastrow  As Long

    '~~> Change this to the releavnt sheet name
    '~~> This is the sheet where the formula will go
    Set ws1 = ThisWorkbook.Sheets("Sheet1")

    Set ws2 = ThisWorkbook.Sheets("Downstairs")

    With ws1
        '~~> Get the last row
        lastrow = .Range("A" & .Rows.Count).End(xlUp).Row

        '~~> Fill formula in all the relevant cells in one go
        '~~> replace my formula within quotes with your formula
        '~~> Do not forget to put the $ sign like I have done
        .Range("D1:D" & lastrow).Formula = "=VLOOKUP(A1,Downstairs!$C$1:$N$200,4,0)"
    End With
End Sub
于 2013-09-13T20:09:50.707 に答える