大量のExcelファイルを一つにまとめる方法

大量のExcelファイルを一つにまとめる方法

Pocket


ここからは、本編で紹介し切れなかった内容について説明いたします。


補足説明


その他の繰り返し処理

繰り返し処理(FOR文)では、本編で使用したもの以外にもさまざまな指定ができます。

FOR 変数名 = 開始値 to 終了値 step 増分
開始値から終了値まで処理を繰り返します。
一回処理を繰り返すごとに「増分」に指定した分だけ、数が加算されます。

FOR Each 変数名 in 値1, 値2, ..., 値n
「in」の後ろに指定した値の数だけ処理を繰り返します。

FOR Each 変数名 in FileList ファイル名
ファイル数の分だけ処理を繰り返します。

FOR Each 変数名 in DirList フォルダ名
フォルダ数の分だけ処理を繰り返します。(今回使用した構文です。)


デバッグ機能

繰り返し処理の動作が分かりにくい場合は、デバッグ機能を使用してみてください。
[ロードスクリプトの編集]画面で、[デバッグ]ボタンをクリックします。
combine-many-excel-files-revised-301
[デバッガ]画面で[ステップ]ボタンをクリックすると、ロードスクリプトを一文ずつ実行できます。
combine-many-excel-files-revised-302
画面下部でそのときの変数の値(DirNameの値)を確認できます。
combine-many-excel-files-revised-303combine-many-excel-files-revised-304
残りのロードスクリプトをすべて実行したい場合は、[開始]ボタンをクリックしてください。
LOAD文が実行され、データが取り込まれると画面左下に結果が表示されます。
combine-many-excel-files-revised-305

複数ファイルの選択

非常に単純な機能なのですが、意外と知られていないようですので、ここで説明しておきたいと思います。
ファイルを選択する際、複数のファイルを選択できます。

[テーブルファイル]ボタンをクリックします。
combine-many-excel-files-revised-306
下図のように複数のファイルを選択できます。
combine-many-excel-files-revised-307
通常どおりファイルウィザードが起動しますが、[終了]ボタンをクリックすると…
combine-many-excel-files-revised-308
ファイル数の分だけ、立て続けにファイルウィザードが起動します。
combine-many-excel-files-revised-309
さいごまで終了するとLOAD文が一括で生成されます。
combine-many-excel-files-revised-310つまり[終了]ボタンを36回連打すれば、全ファイルを一括で取り込むことは可能です。
しかし、その場合は「年」や「月」の項目の指定も、すべてのLOAD文に記述する必要があります。
そのため、ファイル数が多い場合は、やはりワイルドカードやFOR文を使用した方が簡単です。
ただし、意味の異なるデータ(たとえば、地域、商品、部門のデータ)を一括で取り込むときは、この方法が便利です。


文字列関数

本編ではMid関数とSubField関数をご覧いただきましたが、文字列から一部を抜き出す関数には、他にも以下のようなものがあります。
  • Left関数
    文字列の左端から、指定した文字数分を抜き出します。
    Left(文字列, 文字数)
  • Right関数
    文字列の右端から、指定した文字数分を抜き出します。
    Right(文字列, 文字数)
  • TextBetween関数
    文字列と文字列に挟まれた、あいだの文字列を抜き出します。
    TextBetween(文字列, 文字列1, 文字列2)
    文字列1と文字列2のあいだの文字列を抜き出します。たとえば以下の指定の結果は「2008」になります。
    TextBetween('売上実績2008年度', '売上実績', '年度')


ファイル関数

本編ではFileBaseName関数とFileDir関数をご覧いただきましたが、ファイル関数には他にも以下のようなものがあります。
各関数の説明の下に記載しているのは、読み込んだファイルが以下のファイルだったときの結果です。
C:\Users\qlikview\Desktop\combine-many-excel-files\例1\売上200801.xls
  • FileBaseName関数
    ファイル名(拡張子なし)
    売上200801
  • FileName関数
    ファイル名(拡張子あり)
    売上200801.xls
  • FileExtension関数
    ファイルの拡張子(.ドットは含まない)
    xls
  • FileDir関数
    フォルダのフルパス
    C:\Users\qlikview\Desktop\combine-many-excel-files\例1
  • FilePath関数
    ファイルのフルパス
    C:\Users\qlikview\Desktop\combine-many-excel-files\例1\売上200801.xls
  • FileSize関数
    ファイルサイズ(単位はバイト)
    45056
  • FileTime関数
    ファイルの更新日時
    2013/10/09 13:00:00


作成したロードスクリプト

今回作成したロードスクリプトは以下のとおりです。
※前半の「SET」文は省略しています。

Excelファイルの統合1(あるディレクトリ中のファイルをすべて取り込む)

LOAD Mid(FileBaseName(), 3, 4) as 年,
     Mid(FileBaseName(), 7, 2) as 月,
     日, 
     商品名, 
     販売単価, 
     納品数量, 
     売上金額
FROM
*.xls
(biff, embedded labels, table is [売上$]);

Excelファイルの統合2(ディレクトリが複数ある場合)

FOR Each DirName in DirList *

LOAD SubField(FileDir(), '\', -1) as 年,
     Mid(FileBaseName(), 3, 2) as 月,
     日, 
     商品名, 
     販売単価, 
     納品数量, 
     売上金額
FROM
$(DirName)\*.xls
(biff, embedded labels, table is [売上$]);

NEXT