和風スパゲティのレシピ

日本語でコーディングするExcelVBA

AutoFillとFillDownの違い

AutoFillメソッドとFillDownメソッドの違いを解説します。

同じところ

どちらも先頭のセルをセル範囲全体へコピーするメソッドです。

以下のコードはどちらもA1セルをA1~A10セルへコピーします。

Range("A1").AutoFill Range("A1:A10"), xlFillCopy
Range("A1:A10").FillDown

 
AutoFillは上下左右の全方向に実行可能ですが、FillDownは下方向限定です。

といってもFillUp、FillRight、FillLeftとメソッドが分かれているだけなので、
実際はどちらも上下左右全方向に対応しているといってよいです。

違うところ

この二つのメソッドの違いをExcelの対応機能で説明すると、

  • AutoFillメソッドは「フィルハンドル(セルの右下からドラッグする✚)」
  • FillDown/FillRightメソッドは「Ctrl+D、Ctrl+R」

となっています。


仕様上の最も大きい違いはフィルハンドルダイアログと対応した第二引数の存在で、

  • AutoFillメソッドは連続データ・値のみ・書式のみコピーなどを実行できる
  • FillDownメソッドが実行できるのは通常のコピーだけ

という違いがあります。

フィルハンドルダイアログ



AutoFillメソッドの第二引数に設定できる値は以下の通りです。

定数名 内容
xlFillDefault 0 Excelによる自動判定
xlFillCopy 1 セルのコピー
xlFillSeries 2 連続データ
xlFillFormats 3 書式のみコピー
xlFillValues 4 書式なし(値のみ)コピー
xlFillDays 5 連続データ(日単位)
xlFillWeekdays 6 連続データ(平日のみ)
xlFillMonths 7 連続データ(月単位)
xlFillYears 8 連続データ(年単位)
xlLinearTrend 9 連続データ(加算推定)
xlGrowthTrend 10 連続データ(乗法推定)
xlFlashFill 11 フラッシュフィル


よって機能だけで言えばAutoFillが上位互換と言ってよいですが、
その分AutoFillメソッドはコードが面倒になります。

Range("A1").AutoFill Range("A1:A10"), xlFillCopy
Range("A1:A10").FillDown

 
面倒だけならまだしも、AutoFillはRangeを二つ指定する必要があるため、
セルの指定を失敗する可能性がある点も考慮しなければいけません。


例えば以下のコードは不具合やエラーとなります。

Range("A1").AutoFill Range("A1:B5") ' ← なぜかA1がB2~B5へコピーされる
Range("A1").AutoFill Range("A1,A3,A5"), xlFillCopy ' ← エラー

AutoFillメソッドを使用する場合は2つのRangeの不整合にご注意ください。

使い分け

ただのコピーであればFillDown/Rightメソッドを使うのが簡単で安全です。

連続データ、値のみコピー、書式のみコピーなどの特殊なコピーを行う場合は、
2つのRangeの不整合に注意しながらAutoFillメソッドを使用してください。


両メソッドの詳しい解説はこちらをどうぞ