さて、本日はAppleScriptシリーズ第三弾。AppleScriptでExcelを動かそう!です。
第一弾はブラウザとOSの操作、第二弾はStudio Oneの操作でした。
こちら。
さて、本題です。
今回やりたいことは、「特定のフォルダに入っているエクセルファイルのファイル名と、エクセルファイルの中の特定のセルの数値を取得し、一枚のエクセルシートにまとめる」です。
どんな用途で使うのか?
当社は、経理システムにMFクラウド会計を使ってます。それで、毎月毎月当社が発行した請求書の情報をシステムに入力する必要があるんですが、エクセルファイルのインポート機能ってのが用意されてます。
つまり、月ごとに摘要と金額をまとめた一枚のエクセルファイルを作って、それをインポートするわけです。
サンプルはこんな感じです。会社名や金額は適当です。
【請求書サンプル】
【会計ソフトへのインポート用エクセルファイルサンプル】
これを作るために、以前はこんな手続きを手作業でやってました。
- 請求書ファイル名をコピーして、インポート用エクセルファイルにペースト
- 請求書ファイルを開き、請求金額が記載されたセルをコピーして、インポート用エクセルファイルにペースト
- 以上を、請求書ファイルの回数分繰り返す。
…いやいや。なんで21世紀に生きる人間がこんな奴隷みたいなことをさせられてるんでしょうか。馬鹿らしい。
もう、一生こんな非文化的かつ非効率的な作業をやりたくないです。
ってことで、AppleScriptで自動化しました。
スクリプトの大まかな流れ
スクリプトはこちらからダウンロードしてください。
僕が書いたんで、稚拙だと思います。ツッコミお待ちしてます。
【動作確認環境】
OS:macOS Mojave(10.14.4)
App:Microsoft Excel for Mac(16.23)
まずは、本スクリプトのざっくりとした大まかな流れを説明します。
- コピー先となるエクセルファイルを選択
- コピー元となる請求書フォルダを選択
- コピー元フォルダの1つめのファイルのファイル名を、コピー先エクセルのA1セルに入力
- コピー元フォルダの特定のセル(初期値ではC6)をコピー先エクセルのB1セルに入力
- 保存せずに閉じる
- 2つ目以降のファイルについて3〜5を繰り返し
以上です。
では、実際に使ってみます。
ファイルとフォルダの準備
まずは、コピー先エクセルファイルを用意します。
空のファイルを作成してください。ここでは、ファイル名を「コピー先.xlsx」としてデスクトップに保存しました。
次に、コピー元フォルダを作って、請求書ファイルをフォルダ内にコピーします。
ここでは、フォルダ名を「コピー元」にして、デスクトップに作成しました。
そして、実際にスクリプトを実行する前に、請求額が記載されたセルのセル名を確認します。
「C6」みたいに行列で指定しても大丈夫ですし、以下のように「セルの名前」でも指定可能です。
スクリプトを実行!
そして、スクリプトを実行します。
ダウンロードしたスクリプトを開き、スクリプト実行ボタンをクリックです。
もし、OSのセキュリティーの関係で動かなければ、こちらを参考に、
OSのシステム設定でスクリプトエディタのセキュリティーをオフしてください。
すると、ダイアログがでて、3つ聞かれますので、順番に入力していきます。
これでOKを押すと、勝手にExcelが動いて表を作ってくれます。
こんな感じになりました。
補足
これで一旦、やりたいことは終わりです。
あとは、これを並び替えるなり、他のエクセルにコピペするなりしてください。
以下、補足です。
【補足1】濁点と半濁点がおかしくなる場合の対処法
よくよく見ると、濁点と半濁点がおかしなことになってます。
これは、NFDとNFCといった、文字コードの違いのせいです。詳しくは、こちらを読んでもらえれば書いてますが、別に知らなくてもいいです。
これを解決するには、こちらのサイトを使います。
NFD→NFC変換ツール
http://tsuyobi.heteml.jp/html/tools/nfd2nfc/
まずセルをすべて選んでコピーして…
貼り付けて、変換ボタンクリックです。
これをエクセルに戻すと、ちゃんと表示されます。
こういったサービス、本当に有り難いですね。
さらに補足の補足です。
さきほどのNFD→NFC変換についてですが、
以下のURLのような感じで、VBAを使ってNFD→NFC変換をすることも出来るといえば出来ます。
https://qiita.com/ysnhrk/items/b7efab2a078eca8bfb5f
ただ、わざわざVBA使うのが面倒だと思うので、僕は上記の方法で変換してます。
【補足2】日付と拡張子を削除する
当社ルールでは、日付は必ず6桁でその後にアンダーバーを入れるという取り決めがあり、拡張子についても文字数が決まってますので、ExcelのMID関数を使って削除できます。
=MID(A1,8,LEN(A1)-12)
これは、特に説明はいらないですね。
ついでにいうと、日にちの取得は以下の通りです。「190315_◯◯〜」から「15」だけ抜き取れます。
=VALUE(MID(A1,5,2))
【補足3】メニューバーからスクリプトを実行する
いちいち毎回スクリプトエディタを開いて実行するのが面倒な方は、メニューバーから実行することも出来ます。
こちらのサイトをご参考ください。
https://rcmdnk.com/blog/2015/07/26/computer-mac/
以上です。いかがでしたでしょうか。
ちなみに、なぜExcelをいじるのにVBAじゃないの?って思う方もいると思います。
もちろん、僕も最初VBAでやろうとしました。
ただ、VBAを触れば触るほど、Macに向いてないということがわかってきました。Windowsなら普通に使える関数やライブラリが使えなかったりします。でもネット上にはそれがTipsとして紹介されている。ノイズが多いんです。
もう、ウンザリしました。ですので、またまた今回もAppleScriptにお世話になりました。
また、実は本来であれば、マネーフォワードの正規サービスで、クラウドで請求書を管理できるサービスが用意されてます。
そっちを使うのが本当は良いんでしょうが、毎月そこにお金を払うのもどうかと思うので、なんとか無料でやりたかったのもありますし、何より、知力でなんとかなるならなんとかしてしまえってことで、今回の方法を作りました。
不具合や改善点などありましたら、コメントやメールなどで遠慮なくご意見下さい。今後の励みになります。
皆様のデジタルライフを少しでも便利にしていけたら光栄です。
“Excelで複数ファイルの特定のセルの値を一つの表にまとめる方法【AppleScript】” への1件のフィードバック