PR

【VBA】AutoFillで連続データ入力などを行う

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
指定されたセル範囲にオートフィル機能を実行するAutoFillメソッドがありますが、オートフィルパターンによって様々な連続データを入力することができますので、今回はその内容について書いていきます。

スポンサーリンク

1.サンプル概要

サンプルとして以下の表を作成しています。AutoFillメソッドの引数Typeに指定する定数に合わせた項目に対して処理を実行します。

セルD2とE2は文字列データとしての「1」を入力し、「書式のみコピー」「書式なしコピー」の処理を行っています。

処理結果としては以下の通りですが、「乗算」についてはセルK2に「2」を入力することでセルK1に対し「2倍」の判定となり、その状態をオートフィルするので2倍ずつ増えています。

ちなみにセルK2に「3」を入力すれば「3倍」判定なので、この通りの結果になります。

また、セルD2は書式のみコピーしているので、セルD3~D6 は手動入力すると文字列扱いとなり、書式なしコピーしたセルE3~E6は「1」を数値として扱う形になります。

以上がサンプル概要になります。

2.サンプルコード

Sub Sample1()

 Dim i, n As Integer
 
 For i = 1 To 11
  Select Case i
   Case 1
     n = 0 'xlFillDefault 標準のオートフィル
   Case 2
     n = 1 'xlFillCopy コピー
   Case 3
     n = 2 'xlFillSeries 連続データ
   Case 4
     n = 3 'xlFillFormats 書式のみコピー
   Case 5
     n = 4 'xlFillValues 書式なしコピー
   Case 6
     n = 5 'xlFillDays 日単位
   Case 7
     n = 6 'xlFillWeekdays 週単位
   Case 8
     n = 7 'xlFillMonths 月単位
   Case 9
     n = 8 'xlFillYears 年単位
   Case 10
     n = 9 'xlLinearTrend 加算
   Case 11
     n = 10 'xlGrowthTrend 乗算
     Cells(3, i).Value = 2
     Range(Cells(2, i), Cells(3, i)).AutoFill Destination:= _
     Range(Cells(2, i), Cells(6, i)), Type:=n
     Exit For
  End Select
  
   Cells(2, i).AutoFill Destination:= _
   Range(Cells(2, i), Cells(6, i)), Type:=n
  
  Next i
 
End Sub

指定されたセル範囲にオートフィル機能を実行する場合は「AutoFillメソッド」を実行します。

構文:オブジェクト.AutoFill(Destination, Type)

引数Typeにオートフィルのパターンを定数で指定します。

◆引数Typeに指定するxlAutoFillTypeクラスの定数

定数 内容
xlFillDefault 0 標準のオートフィル
xlFillCopy 1 コピー
xlFillSeries 2 連続データ
xlFillFormats 3 書式のみコピー
xlFillValues 4 書式なしコピー
xlFillDays 5 日単位
xlFillWeekdays 6 週単位
xlFillMonths 7 月単位
xlFillYears 8 年単位
xlLinearTrend 9 加算
xlGrowthTrend 10 乗算

サンプルでは繰り返し処理の都合上、値を利用しています。引数Destinationには基準となるセルを含めないとエラーとなりますので、サンプルコードでもセルの行2~6という指定の形にしています。

今回のサンプルコードのように引数Typeの順に処理を行う場合、以下のように書き換えても同様の結果になりますので、ご参考までに。

Sub Sample2()

 Dim i As Integer
 
 For i = 1 To 11
 
  If i = 11 Then
     Cells(3, i).Value = 2
     Range(Cells(2, i), Cells(3, i)).AutoFill Destination:= _
     Range(Cells(2, i), Cells(6, i)), Type:=i - 1
   Else
     Cells(2, i).AutoFill Destination:= _
     Range(Cells(2, i), Cells(6, i)), Type:=i - 1
  End If
   
 Next i

End Sub

3.まとめ

Excel操作の上でオートフィル機能を利用することは多々ありますが、VBAで扱うことで以前に投稿した記事のようなことを行うこともできます。

VBAで自動的に指定範囲をAutoFillする方法
こんにちは、Ryoです。 VBAでデータを別ファイルに書込みしたりしていると、気が付けば余裕を持って作ったはずの様式の行数が不足してた!ということがありますよね。 その時にAutoFill機能を使って手動で下にずずーっと伸ばしたりしても良い...

扱うTypeの挙動さえ理解してしまえばそれほど難しい処理でもありませんので、利用機会があればぜひご活用ください。



以上、AutoFillで連続データ入力などを行う方法についてでした!今回の記事が何かの参考になれば幸いです。

Ryo

タイトルとURLをコピーしました