2017-05-09 11 views
0

をループ私は何年もいじっの私のVBAでのコードのこのビットを使用していることができるように:私は今、この機能を取ることができるようにする必要がありレトロフィットVBAコードでは、列

Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row).Formula = _ 
    "" 
Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row).Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 

、および1460をループして1460は可変です。

私の試みは、これまでのようになります。

Dim a As Interger 
a = 3 

Do While Cells(1, a) <> "" 

    Range(Range("R1Ca:RCa") & Range("A" & Rows.Count).End(xlUp).Row).Formula = _ 
     "[super convoluted formula]" 
    Range(Range("R1Ca:RCa") & Range("A" & Rows.Count).End(xlUp).Row).Select 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 

    a = a + 1 

Loop 

したがって、この時点での私の焦点の質問は、私が「B2:B」を変更しない方法でヒットするループすることができます変数に私の始めの例ではすべての列?

答えて

0

"最後の行"を1回計算するのが最善の方法です。

その後、

Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row).Formula = 

のあなたの現在の文が

として、代わりにアドレスの Cellsを使用して、再表現することができる同等

Range("B2:B" & lastRow).Formula = 

で交換することができます

lastRow = Cells(Rows.Count, "A").End(xlUp).Row 

Range(Cells(2, "B"), Cells(lastRow, "B")).Formula = 

これは、簡単に列の変数を使用する式に変換することができる。Cellsオブジェクトのカラムパラメータはいずれかの数(すなわち、として表すことができること

Range(Cells(2, c), Cells(lastRow, c)).Formula = 

注列1,2,3など)または文字列(つまり、列「A」、「B」、「C」など)として表示されます。数値を使用すると、複数の列を反復処理するときに便利です。文字列値を使用すると、既知の単一の列を使用しているときに便利です。コードをより読みやすくします。


あなたの書き換えコードは、したがって、次のようになります。

Dim c As Long 
Dim lastRow As Long 
lastRow = Cells(Rows.Count, "A").End(xlUp).Row 
For c = 2 To Cells(1, Columns.Count).End(xlToLeft).Column 
    Range(Cells(2, c), Cells(lastRow, c)).Formula = "[super convoluted formula]" 
    Range(Cells(2, c), Cells(lastRow, c)).Value = _ 
      Range(Cells(2, c), Cells(lastRow, c)).Value 
Next 

(あなただけの値を貼り付けしようとしている場合はコピー/貼り付けを行う必要はありません - ちょうどValueを設定する方が安全だろうプロパティValueへ)