執筆:EugeneAmnis
WEBSERVICE関数
ExcelにはWEBSERVICE関数というWEBのAPIを使用することが出来る関数があります。この関数を使うことでインターネット上の強力なサービスやデータをシームレスにコード無しでシート上に展開できます。 また、Excel APIというサイト様ではこの関数に特化したWEBAPIを多数公開しており、ユーザーに取って有益なサイトになっています。ただし、Excel for Macを除いて。
Excel for Macで使用できない関数
気になったので寝る前にMicrosoftのサイトでExcel for Macで利用できない関数がどの程度あるのか調べたところ、以下の3つであることがわかりました。
- ENCODEURL 関数
- FILTERXML 関数
- WEBSERVICE 関数
ともにWindowsのOS特有機能を使用しているためMacでは利用できない旨が述べてありました。この3つの関数はWEBAPIの操作に特化した関数です。WEBSERVICE関数はすでに述べたとおりですが、ENCODEURL関数は漢字などの文字をURLで使用できる文字に変換する関数で、FILTERXML関数はXMLという構造化データ群から任意のデータを抜き取る関数です。 この関数群を使用できないのはMacユーザーとしては黙っているわけにもいきません。
代替関数を作る
まず、今回はENCODEURL関数とWEBSERVICE関数のみの代替関数を作成します。残念ながらFILTERXML関数の代替機能がAppleScriptやJXAには存在しない為(正確にはAppleScriptにはあるが機能が不十分)、今回はFILTERXML関数の代替関数の作成は諦めます。
今回はAppleScriptとJXAの両方のスクリプト言語を利用します。なぜ一つにまとめないかといえば、主に理由は2つあります。
WEBSETRVICE関数の代替にはcurlというシェルスクリプトを利用します。このシェルスクリプトは元々WEBAPIがきちんと動いているかを確認するために利用されることの多いプログラムです。使い方もURLを打ち込むだけと簡単です。このcurlを利用する必要がありますが、AppleScriptTaskでJXAを利用する際にシェルスクリプトが機能しない問題が発生しました。具体的にはここに書いていますが、解決方法が見当たらない為、AppleScriptで作成することにしました。
次にENCODEURL関数の代替では文字列操作をする必要がありますが文字列操作はAppleScriptよりJXAの方が簡単でより強力なのでJXAで作成します。
実装
具体的な実装に入ります。まずAppleScriptやJXAで目的の動作をするスクリプトを作成し、作成したスクリプト(JXAではscptファイルにコンパイルが必要)を~/LibraryApplication Scripts/com.microsoft.Excel/に保存すると、AppleScriptTask関数で利用できます。
JXA
ENCODEURI関数代替(scptファイル)
function ue(url){
var str = encodeURIComponent(url);
return str;
}
AppleScript(applescriptファイル)
WEBSERVICE関数代替
on wa(surl)
set tgtURL to surl
do shell script "curl -Ss " & tgtURL
end wa
上記のコードを任意の名前でcom.microsoft.Excelフォルダに保存するとAppleScriptTask関数で利用できます。あとはこれらを用いてユーザー関数を作成するだけです。
VBA
あとはAppleScriptTaskで呼び出すと完成です。
Function名 = AppleScriptTask("スクリプトファイル名", 関数名, 引数)
尚、プログラミングが大変だと感じる方はFormeStudioをお使いください。このマクロシートはカイゼン・ハンディターミナルアプリForMeの設定、データ収集用のマクロシートとして作成されていますが単体でも使用できます。上記の関数代替機能がありますので、これを利用してみて下さい。
Contact and Tags
excel vba Mac jxa Excel for Mac