こんにちは、Ryoです。
Excel2013から実装された「フラッシュフィル」というものがありますが、これは入力されたデータの法則性を見つけ、自動的にデータ入力してくれるという便利な機能になります。今回はこの機能のVBA処理について書いていきたいと思います。
1.サンプル概要
例として二つの表を以下画像の通り作成しています。セルA1:B6の表はA列に氏名が入力されているので、B列に姓のみ取り出してみます。
セルA8:B13の表はA列に月日が入力されており、B列にはそれぞれの日に対応する曜日を適用させます。

先ず氏名の表の実行結果として以下の通り「姓」のみ取り出すことができています。

次に月日/曜日の表の実行結果は以下の通りです。

2.サンプルコード
Sub sample1()
'***氏名から「姓」のみを取り出す***
'セルB2の値を基準とし、フラッシュフィル機能を使用して
'セルB6まで入力する
Range("B2").AutoFill Destination:=Range("B2:B6") _
, Type:=xlFlashFill
'***引数Typeに指定するxlAutoFillTypeクラス値***
'xlFillCopy : ソース範囲からターゲット範囲に値と形式をコピー
'xlFillDays : ソース範囲の曜日名をターゲット範囲に適用
'xlFillDefault : Excelがターゲット範囲を入力するために
' 使用する値と形式を決定する
'xlFillFormats : ソース範囲からターゲット範囲に形式のみをコピー
'xlFillMonths : ソース範囲の月の名前をターゲット範囲に適用
'xlFillSeries : ソース範囲の値をターゲット範囲に連続する数値として適用
'xlFillValues : ソース範囲からターゲット範囲に値のみコピー
'xlFillWeekdays : ソース範囲の平日の名前をターゲット範囲に適用
'xlFillYears : ソース範囲の年をターゲット範囲に適用
'xlGrowthTrend : ソース範囲の数字間の関係が乗法であるものとして、
' ソース範囲からターゲット範囲に数値を適用
'xlLinearTrend : 数時間の関係が加法であると仮定して、ソース範囲から
' ターゲット範囲に数値を適用
'xlFlashFill : フラッシュフィルの実行
End Sub
このSample1()は氏名から姓だけを取り出しているものですが、コード自体は1行です。
フラッシュフィルを利用するにはAutoFillメソッドを使用します。
構文:オブジェクト.AutoFill(Destination, Type)
AutoFillメソッドの引数としてDestinationとTypeがあり、ここに入力する値は以下の通りです。
| 値 | 内容 |
| Destination | オートフィルの入力先を指定し、基準となるデータが入力されたセル範囲も含める |
| Type | オートフィルの種類を指定 |
サンプルコードのコメントとして記入していますが、引数Typeに指定するオートフィルの種類は以下になります。
| 値 | 内容 |
| xlFillCopy | ソース範囲からターゲット範囲に値と形式をコピー |
| xlFillDays | ソース範囲の曜日名をターゲット範囲に適用 |
| xlFillDefault | Excelがターゲット範囲を入力するために使用する値と形式を決定する |
| xlFillFormats | ソース範囲からターゲット範囲に形式のみをコピー |
| xlFillMonths | ソース範囲の月の名前をターゲット範囲に適用 |
| xlFillSeries | ソース範囲の値をターゲット範囲に連続する数値として適用 |
| xlFillValues | ソース範囲からターゲット範囲に値のみコピー |
| xlFillWeekdays | ソース範囲の平日の名前をターゲット範囲に適用 |
| xlFillYears | ソース範囲の年をターゲット範囲に適用 |
| xlGrowthTrend | ソース範囲の数字間の関係が乗法であるものとして、ソース範囲からターゲット範囲に数値を適用 |
| xlLinearTrend | 数字間の関係が加法であると仮定して、ソース範囲からターゲット範囲に数値を適用 |
| xlFlashFill | フラッシュフィルの実行 |
今回サンプルとして使用しているのは「xlFlashFill」「xlFillDays」になります。今回は他のTypeクラスは試していませんが、用途によっては他のTypeでも適したものがあるでしょうから、機会があれば利用していこうと思います。
サンプル概要で示した日に対応する曜日を表内に適用するコードは以下の通り、セル参照範囲とTypeクラス指定を変更すればOKです。
Sub sample2()
'***日に対応する曜日を表内に適用***
'セルB9の値を基準とし、フラッシュフィル機能を使用して
'セルB13まで入力する
Range("B9").AutoFill Destination:=Range("B9:B13") _
, Type:=xlFillDays
End Sub
3.まとめ
この機能は冒頭でも書きましたが、入力されたデータの規則性/法則性を見つけて自動的に入力してくれるものなので、知っておくと利用する機会も多いかと思います。
サンプルでは氏名から姓を抜き出していますが、例えばメールアドレスのアカウント(@の前)なども対応できると思いますので、何か機会があれば活用をご検討くださいませ!
以上、フラッシュフィルを利用する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

