PR

【VBA】フラッシュフィルを使用する

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

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

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