連続データを作成する(AutoFillメソッド)|Excel VBA |
任意のセルに「1月」と入力してフィルハンドルをドラッグすると「2月」「3月」…という連続データを作成できます。Excelを始めたばかりのユーザーでもご存知の「オートフィル」機能ですね。これをマクロで実現するには、AutoFillメソッドを使います。
AutoFillメソッドの構文は次のとおりです。
Rangeオブジェクト.AutoFill(Destination, Type)
引数Destinationには、書き込み先のセル範囲を指定します。このとき、必ず基準となるセル範囲を含めます。
引数Typeはオートフィルの種類です。XlAutoFillType 列挙体のメンバを指定します。
よく使うものは次のとおりです。
定数 内容 xlFillDefault (既定) 標準のオートフィル xlFillCopy コピー xlFillSeries 連続データ xlFillFormats 書式のみコピー xlFillValues 書式なしコピー xlFillDays 日単位 xlFillMonths 月単位 xlFillYears 年単位 xlFillWeekdays 土日を除く平日
次のコードは、セル範囲A1:A12に「1月」〜「12月」の連続データを作成します。
Sub Sample1()
With Range("A1")
.Value = "1月"
.AutoFill Destination:=Range("A1:A12")
End With
End Sub
マクロで連続データを作成するには、RangeオブジェクトのAutoFillメソッドを使いますが、ワークシート上の手作業と違い、マクロでは「どこに」連続データを作成するか…というより、「いくつの」連続データを作成するかといった考え方が一般的でしょう。
上記のコードでは、セル範囲A1:A12に連続データを作成しますが、これを12個の連続データと考えれば、次のように書いた方が直感的でしょう。
Sub Sample2()
With Range("A1")
.Value = "1月"
.AutoFill Destination:=.Resize(12) '---(1)
End With
End Sub
Resize(12)は、正確にはResize(12, 1)です。これは、1行×1列であるセルA1を、12行×1列のセル範囲A1:A12に変形してね、という命令です。
横方向に連続データを作る場合は(1)のコードを次のようにしてください。
.AutoFill Destination:=.Resize(1, 12)
次のコードは、ユーザーが指定した文字列から指定した数の連続データを、変数bufに作成します。ワークシートを作業用シートとして使用し、最後にクリアしています。
Sub Sample3()
Dim StartStr As String, cnt As Long, i As Long, buf As String
StartStr = InputBox("連続データの元になる文字列を入力してください")
If StartStr = "" Then Exit Sub
cnt = Val(InputBox("作成する連続データの個数を入力してください"))
If cnt < 1 Then Exit Sub
With Range("A1")
.Value = StartStr
.AutoFill Destination:=.Resize(cnt)
For i = 1 To cnt
buf = buf & Cells(i, 1).Value & vbCrLf
Next i
.Resize(cnt).ClearContents
End With
MsgBox buf
End Sub