
大量のExcelファイルを一つにまとめる方法
ここからは、本編で紹介し切れなかった内容について説明いたします。
補足説明
その他の繰り返し処理
繰り返し処理(FOR文)では、本編で使用したもの以外にもさまざまな指定ができます。FOR 変数名 = 開始値 to 終了値 step 増分開始値から終了値まで処理を繰り返します。
一回処理を繰り返すごとに「増分」に指定した分だけ、数が加算されます。
FOR Each 変数名 in 値1, 値2, ..., 値n「in」の後ろに指定した値の数だけ処理を繰り返します。
FOR Each 変数名 in FileList ファイル名ファイル数の分だけ処理を繰り返します。
FOR Each 変数名 in DirList フォルダ名フォルダ数の分だけ処理を繰り返します。(今回使用した構文です。)
デバッグ機能
繰り返し処理の動作が分かりにくい場合は、デバッグ機能を使用してみてください。[ロードスクリプトの編集]画面で、[デバッグ]ボタンをクリックします。

[デバッガ]画面で[ステップ]ボタンをクリックすると、ロードスクリプトを一文ずつ実行できます。

画面下部でそのときの変数の値(DirNameの値)を確認できます。


残りのロードスクリプトをすべて実行したい場合は、[開始]ボタンをクリックしてください。
LOAD文が実行され、データが取り込まれると画面左下に結果が表示されます。

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

下図のように複数のファイルを選択できます。

通常どおりファイルウィザードが起動しますが、[終了]ボタンをクリックすると…

ファイル数の分だけ、立て続けにファイルウィザードが起動します。

さいごまで終了するとLOAD文が一括で生成されます。

しかし、その場合は「年」や「月」の項目の指定も、すべての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
Pages: 1 2