2

私は、記録を使用してからクリーニングすることで、いくつかの作業を自動化するプログラムを構築しています。計算に時間がかかりすぎるまではうまくいきました。その単純なネストされたIFステートメント

ActiveCell.FormulaR1C1 = _
    "=IF(RC[-16]="""",""MISSING"",IF(RC[-14]="""",""MISSING"",RC[-14]-RC[-16]))"

わずか10行から数十万までの範囲のデータを処理します。これまでのところ満足していない私の「解決策」では、自動入力が範囲A1:A35000に制限されています。これでも、Excelの処理には少し時間がかかります。これは、xlDown私を100万行目に連れて行かないようにするための解決策でした。さらに、シートサイズを小さくしてみましたが、これも機能しますが、適切な解決策ではありません。

コードは次のようになります。

Selection.AutoFill Destination:=ActiveCell.Range("A1:A35000"), Type:= _
    xlFillDefault

私がしたいのは、次のいずれかです。

  1. 特定のセルの数値で参照される範囲からの自動入力(つまり、入力したデータが500行の場合、500と入力したセルがあり、すべての自動入力はA1:A500から行われます)、または

  2. より好ましくは、これは、プログラムに自動充填する範囲をすでに認識させることによって自動的に行われるであろう。

私は解決策を確認しましたが、それを自分の状況に適用する方法がわかりません。

4

1 に答える 1

2

私はあなたが次のものを探しているかもしれないと思います...

Dim ws as Worksheet
Set ws = Worksheets("Sheet1")

Dim usedRows as Long

'Option One (not recommended): USED RANGE METHOD 
usedRows = ws.UsedRange.Rows.Count

'Option Two (more robust) .END(xlUp) METHOD (Assuming you have your Data in column "RC")
usedRows = ws.Cells(ws.Rows.Count, "RC").End(xlUp).Row

'YOUR
'CODE
'HERE

Selection.AutoFill Destination:=ws.Range(Cells(1,1),Cells(usedRows,1)), Type:= _ xlFillDefault

その列にワークシートで最も使用されている行がある場合。

.End(xlUp)オプションの優位性を指摘してくれた@scottに感謝します:)

于 2013-01-04T17:30:43.493 に答える