2

そのシートの別のセルから特定のセルの値を単純に入力するマクロを VBA で作成しました。シート内の多くのセルに対してこれを行います。次のようにしています。

Range("B3").Value = Range("B200")
Range("B4").Value = Range("B201")
'etc.

現在、新しい行を挿入して値を追加することが多いので、B200 と B201 の間に新しい行を挿入すると、新しい行を挿入しても自動更新されないため、マクロが壊れます。

新しい行または列を挿入したときにセル参照を自動更新するようにマクロをコーディングするにはどうすればよいですか?

4

3 に答える 3

5

私の提案は、値を取得する行に、いつでも.FINDできる一意の値があることを確認してから、見つかったセルの行の列Bから値を取得することです。したがって、今はB200で値を取得する必要があり、A200には常に「FinalTotal」というテキストが含まれています。これは一意です。

Dim MyRNG As Range

Set MyRNG = Range("A:A").Find("Final Total", LookIn:=xlValues, LookAt:=xlWhole)
Range("B3").Value = Range("B" & MyRNG.Row)
Range("B4").Value = Range("B" & MyRNG.Row + 1)
于 2012-05-19T00:41:41.133 に答える
1

範囲に名前を付けてみてください。範囲を名前で参照すると、Excel はそれを検索し、それを定義する行を取得します。新しい行が追加されると、範囲名の定義が更新されます。

上記に加えて、このチュートリアルは私の要点を示していると思います: http://www.homeandlearn.co.uk/excel2007/excel2007s7p6.htmlこれは範囲の名前を定義する方法です。

このチュートリアルでは、マクロと vba で使用する方法について説明しています: http://excel.tips.net/T003106_Using_Named_Ranges_in_a_Macro.html

これが役立つことを願っています:D

于 2012-05-18T20:45:36.190 に答える
1

これは答えではなく、代替案です。

Shiin が提案したように、範囲に名前を付けることが方法ですが、500 個のセルがある場合、前述のように、500 個のセルに名前を付けてコードで使用するのは非常に面倒です。別の方法は、スマート コードを使用することです。例を見てみましょう

このようなコードがあるとしましょう

Sub Sample()
    Range("B3").Value = Range("B200")
    Range("B4").Value = Range("B201")
    Range("B5").Value = Range("B201")
    ' And
    ' So On
    ' till
    Range("B500").Value = Range("B697")
End Sub

このコードを書く最良の方法は次のようになります

Sub Sample()
    Dim i As Long

    For i = 200 To 697
        Range("B" & i - 197).Value = Range("B" & i)
    Next i
End Sub

たとえば行 300 に行を挿入すると、上記のコードを 2 つの部分に分割するだけです

Sub Sample()
    Dim i As Long

    For i = 200 To 299
        Range("B" & i - 197).Value = Range("B" & i)
    Next i

    For i = 301 To 698
        Range("B" & i - 197).Value = Range("B" & i)
    Next i
End Sub

したがって、行を挿入するたびに、for ループを余分な部分に分割するだけです。これは面倒に見えますが、500 個のセルに名前を付けてコードで使用するよりははるかに優れています。

マクロを 1 回だけ使用する予定の場合 (つまり、1 回だけ使用する場合)、先にお読みください

ユーザーが行を挿入したときにセルが更新されないことが心配な場合は、値を割り当てる代わりに数式を割り当てることができます。

例えば

Range("B3").Formula = "=B200"

=B200これにより、 cellに数式が入力されB3ます。次回、行を挿入して 200 行目の位置を移動すると、数式がセル内で自動的に更新されることに気付くでしょう。B3

HTH

于 2012-05-18T22:40:09.617 に答える