こんにちは、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