Excelの表に書かれている項目を確認して、複数のブックにデータを分割したい場合があります。例えば、長い顧客データを住所の項目を見て市区ごとにブックを分けたい場合などです。その際、手作業でExcelの表から一つ一つコピーして、異なるブックに振り分けたりすることはないでしょうか。PC版のなでしこを使えば自動で処理できます。
なでしこ3のPC版を活用しよう
なでしこ3のPC版のインストールについては、前回でも紹介しています。今回のようなExcel処理に便利なのは、なでしこ3のPC版です。なでしこ3のPC版は、Windows/macOS/Linuxとマルチプラットフォームで動作します。
特に、Windowsで手軽に使えるように配慮しており、こちらからダウンロードできるWindows版では、なでしこ3の動作に必要なNode.jsランタイムなど必要なツール一式を同梱したZIPファイルを配布しています。
新しくなったプラグインのインストール機能
なでしこ3PC版では、便利なプラグインは、ネットワークから最新版を必要な時に追加する仕組みとなっています。そのため、プラグインは、一覧を確認して、コマンドラインからインストールするという手順が必要でした。しかし、なでしこ3のPC版エディタの「nako3edit」から一覧から選んでインストールできるようになりました。
手順ですが、Windowsでは、実行ファイル「start.exe」を実行してメニューを起動して、「なでしこ3のPC版(Node.jsランタイム)を実行」ボタンをクリックして、「nako3edit」を起動します。macOSやLinuxではコマンドラインから「$(npm prefix)/node_modules/.bin/nako3edit」を実行します。
そして、nako3editが起動したら、画面上部にある「プラグイン」の追加をクリックすると上の画面が表示されます。そして、インストールしたいプラグインを選んでインストールします。
nadesiko3-officeプラグインをインストールしよう
さて、今回のプログラムを実行するには「nadesiko3-office」プラグインが必要になります。上記の「プラグインの追加」画面から「nadesiko3-office」を探して「追加」ボタンを押してインストールしましょう。
macOSやLinuxでは、ターミナルで「npm install nadesiko3-office」とコマンドを実行することでも、プラグインをインストールできます。
なお、このofficeプラグインを使う場合、Excelファイル自体を操作するので、本体のインストールは不要となります。
Excelファイルを住所で分割するプログラム
それでは、今回の本題となるプログラムを作成しましょう。最初に、サンプルのExcelファイルを確認してみましょう。ここで利用するのは、次のような顧客名簿のファイルです。こちらからダウンロードできます。この顧客名簿のExcelファイルをB列(住所1)を元に異なるブックに分割しましょう。
ダウンロードしたら、この名簿ファイルをデスクトップに「sample.xlsx」という名前でコピーしておきます。
プログラムを作って実行しよう
先ほど紹介した手順で「nako3edit」(なでしこ3のPC版エディタ)を起動しましょう。そして、「新規ファイルの作成」ボタンをクリックします。エディタが表示されたら、そこに次のプログラムを記述しましょう。
!「nadesiko3-office」を取り込む。
# Excelファイルを読む --- (*1)
「{デスクトップ}/sample.xlsx」のエクセル開く。
# シート内の全データを読み取る --- (*2)
「A2」から「E999」のエクセル一括取得して住所データに代入。
# 辞書型データに分割する --- (*3)
分割辞書={}
住所データを反復:
変数[F名前, F住所1, F住所2, F住所3, 担当者]は対象。
もし、F名前===NULLならば、抜ける。
もし、分割辞書[F住所1]===undefinedならば:
分割辞書[F住所1] = []
分割辞書[F住所1]に対象を配列追加。
# 分割したデータをExcelファイルに貼り付けて保存 --- (*4)
住所リストで分割辞書を反復:
ファイル名=「{デスクトップ}/名簿-{対象キー}.xlsx」
「保存: {ファイル名}」を表示。
エクセル新規ブック。
「A1」に[["名前","住所1","住所2","住所3", "担当者"]]をエクセル一括設定。
「A2」に住所リストをエクセル一括設定。
ファイル名にエクセル保存。
画面下部の「実行」ボタンを押してプログラムを実行すると、デスクトップに「名簿-(住所).xlsx」というExcelファイルが保存されます。なお、Excelファイルが開いたままだと、読み取りエラーが出るので、Excelファイルを閉じた状態で実行しましょう。
プログラムを確認してみましょう。(*1)では、デスクトップに配置したExcelファイルの「sample.xlsx」を読み取ります。
そして、(*2)ではシート内の「A2」から「E999」までの全セルを取得します。取得したデータは、なでしこの二次元配列変数で得られます。
次に、(*3)では読み取ったデータを一つずつ確認していって、住所1の内容をキーにして変数「分割辞書」に記録していきます。辞書型データは、キーと値をペアにして保存するデータ型です。そのため、市区が記録された「住所1」がキーとなり、住所1の内容ごとにデータが分割されて追記されていきます。
最後の(*4)で、分割したデータをそれぞれExcelファイルに保存します。「{デスクトップ}/名簿-{対象キー}.xlsx」という形式のファイル名でExcelファイルを保存します。ここでは、新規エクセルブック命令を使っているため、まっさらなExcelファイルに住所データを書き込みます。
改造のヒント
なお、このプログラムで分割した後の住所データを開いて見てみると、罫線が引かれていない飾り気のない表となっています。そこで、改造のヒントですが、新規住所録のひな形を作成して、「ひな形.xlsx」の名前で保存しておきましょう。
そして、今回紹介したプログラムの「エクセル新規ブック」と書いてある行を、『「ひな形.xlsx」のエクセル開く』のように書き換えます。これで、分割後の住所データも罫線が引かれた見栄えの良いExcelファイルとなります。
まとめ
以上、今回は、なでしこ3のPC版を利用して、Excelファイルを複数のブックに分割するプログラムを作ってみました。業務でExcelファイルを読み書きする機会は多いと思います。今回の内容を参考にして、業務自動化のプログラムを作ってみてください。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。