執筆:EugeneAmnis
Excel for MacでのUTF-8テキストファイル出力方法(AppleScriptTask)
Excel VBAのSaveAsのファイルフォーマットにUTF-8CSVがいつの間にか実装されていました。Windowsで確認した後にMacで試したところ、成功する場合と失敗する場合があり、かなり使いづらい印象です。詳しくはここからお読み下さい。
今後のアップデートで改善される可能性もありますが、Excel for Mac VBAのファイル関連の機能実装は本家でも難しいんだと変に独り合点してしまいました。
そこで久しぶりの肩慣らし(VBAとAppleScriptのコンビネーションは面倒なので避けていた)ついでに自作のツールとAppleScriptTaskを使ったデモを作成してみることにしました。
VBAとAppleScriptの関係
まず手始めにExcel for MacでのVBAとAppleScriptの関係をおさらいします。当たり前ですがOSの違うExcel for MacではWindowsのオブジェクトを使ったVBAを利用することができません。それを補う方法としてVBAではAppleScriptTask関数を窓口にMacの標準スクリプトであるAppleScriptを操作してWindowsのオブジェクトの代替作業をしてもらうことで機能の互換性を名目上保つようにしています。
図ではVBAを介してシートの操作をしていますが、AppleScriptに直接シートの操作を行わせることも可能なのでVBAは投げっぱなしでも問題ありません。この方法はExcel2008 for MacではVBAの代わりに標準となっており、Excel2011 for MacではAppleScriptのインライン実行に対応したMacScript関数を利用していました。セキュリティ意識の向上からExcel2016 for Macからは所定のスクリプトフォルダにAppleScriptファイルを設置した上でAppleScriptTask関数を利用する方法に変化していきました。今回はExcel2016 for Mac以降のAppleScriptTask関数を用いた方法でデモを作成します。
主な開発の流れ
作成するデモは保存するテキストを指定し、実行するとUTF-8形式のテキストファイルを保存先の指定と名前の記入までユーザーに決定してもらい保存するというものにします。ファイルフォーマットは保存先の拡張子で指定します。
基本的な流れとしては以下のようになります。
- AppleScriptで保存先とテキストを指定し、実行するとUTF-8形式のテキストファイルを保存するスクリプトファイルを作成する。
- 1のスクリプトファイルをExcel VBAのAppleScriptTask仕様に変更し、指定ファルダに保存する。
- 応用編:VBA単一で2を実装する。
- Excel VBA上でOS判定とスクリプトファイルの存在確認をした上で実行する。
はっきり言って3の応用編を除いても、開発の手間と使用するためのハードルが高いことが窺い知れると思います。自分で完結する場合ならまだやれるかもしれませんが、配布となるとエクセルファイルとアップルスクリプトファイルの2つの管理とスクリプトファイルを普段は隠してある指定ファルダに保存するのは現実的と言えないと思います。
3の応用編ではファイル数をエクセルファイル単体として、2の作業をするスクリプトファイルを自動作成し、ユーザーに自動作成したスクリプトファイルを実行してもらう形を取っています。そうすることでマニュアル操作を無くしています。ただし、この方法にも問題があり、自動作成したスクリプトファイル実行してもらう手順が必要になってきます。
Macのスクリプトエディタを利用したことがある人なら問題ありませんが、初見の人はいきなり、英語の羅列と知らないアプリが起動したら戸惑ってしまうでしょう。その為に事前に説明書を配布するか教育を実施する必要があります。この手間が発生するのは覚悟する必要があります。
今回は表題通り、試しにやってみるという姿勢なのでそこらへんは無視しようと思います。(そんな事を言いながら、自分で開発運営しているカイゼンハンディターミナルアプリForMeではユーザーの方に無理強いしています。)今回は長くなってしまったので、次回から具体的な手順を記していきます。