WeeklyAlteryxTips#4 Excelファイル複数シート読み込み

Alteryx

4回目も、1~3回目の延長線ではありますが、今回はExcelの複数シートの読み込みを紹介したいと思います。

なお、この手法が可能なのは、XLSX形式、XLSM形式のみで、XSLB(バイナリ)形式やXLS形式はできません。理由としては、「シート名のリストのみをインポート」する機能を使うからです。

XLSB形式の場合は、Pythonツールを使ったマクロをCommunity Galleryで公開しているのでそちらで試してください。

Excel読み込みについて

ということで、Excelファイルを読み込みする際に、以下のような「入力選択」画面が出るのにみなさん気づいているかと思います。

通常は、ここで「シートを選択」して使うと思いますが、ここで一番下の「シート名のリストのみをインポート」を選択すると、以下のようにシート名を入手可能です。

この機能を使って、シート名を入手し、3週目で行ったようなファイルパス指定ですべてのシートの読み込みを行うことが可能です。

1つのブックの複数のシートを一気に読み込む

単一のExcelファイルであれば、以下のようにシートリストを取得し、3週目のマクロと組み合わせて読み込むことができます。

最初のデータ入力ツールでは、ファイルリストのみ読み込んでいますが、一緒にフルパスもフィールドに追加しています。つまり、以下のような設定となります。

次のセレクトツールでは、取得したフルパスが格納されているフィールドの文字数を増やしています。これは、次のフォーミュラツールでシート名をファイルパスに追加する際に、確保している文字数を超えないようにするためです。

次のフォーミュラツールで、フルパスにシート名を追加します。ちなみに、ここで得られているファイル名は、シート名のかわりに「<List of Sheet Names>」という文字列が追加されています。つまり、

C:\MyDoc\AYX\WeeklyBlog\001_複数ファイル\Book2.xlsx|||<List of Sheet Names>

といった感じです。この「<List of Sheet Names>」の部分をSheet Namesフィールドで置き換えましょう。

つまり、フォーミュラツールに以下のような数式を入力します。

Replace([FileName], "<List of Sheet Names>", [Sheet Names])

この後に3週目のマクロを使うことで1ファイルから複数のシートを読み込むことができます。

※もちろん、セレクトツールを使わずに、新しいフィールドを作れば1つのフォーミュラツールにすることもできます。

特定のフォルダの複数ブック、シートを一括で読み込む

特定のフォルダ配下にある複数のExcelブックのシートから一括で読み込む場合については、上の手順のシートリストを取得する部分についてマクロ化を行います。

以下のようになります。ちなみに、前提として3週目のようにディレクトリツールでファイルパスを入力する前提の作りとなっています。

ここで、アクションツールの設定を見てみましょう。デバッグにも強くするために少し複雑な設定としています。つまり、「アクションタイプ」として「フォーミュラで値を更新」にしています。

フォーミュラとしては、以下のようになります。

[#1]+"|||<List of Sheet Names>"

その他のツールは、1つのブックの複数のシートを一気に読み込む場合と同じ設定となります。これにより、以下のようなワークフローとなります。

XLSBの場合はどうするのか?

Pythonツールでpyxlsbというライブラリを使います。冒頭でもありましたが、Community Galleryにマクロをアップしています。XLSBはカラム数の制限などもあり使いにくいので、ファイルサイズが小さくなるのは魅力的ですがあまりおすすめできません(Alteryxの場合、標準での読み込みに対応しておらず、Microsoftのドライバも必要です)。

サンプルワークフロー

次回

次回は、「名前付き範囲を選択」を使ったTipsにチャレンジしてみたいと思います。

コメント

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