見出し画像

マクロのある暮らし(4回目) - JavaScriptをつかう

こんにちは!なるーらぼです。すっかり春めいて来ましたね。
もう抗アレルギー薬なしでは外に出ることができない季節になりました。

今回は春、異動の季節ということもありましてそれに応じた?内容をお送りしたいと思います。

VBAなんて嫌いだ

ウェブに慣れている方にはVBAなんて、もしくはExcelなんて嫌いだ!という方が一定数いらっしゃると思います。
でもどうしてもマクロは使わないといけないという状況のときもあるでしょう。

例えば、Excelにあるキーワードを並べた表があったとします。

美容に関するキーワードですね。これらのキーワードを自動で検索させたいときに、URLに続いてこのままキーワードをつけていくわけにはいきません。URLエンコードする必要があります。

ただ、JavaScriptでは簡単にできるのですが…

encodeURI("くすみ");
// "%E3%81%8F%E3%81%99%E3%81%BF"

マクロにはそういった機能がありません。
なんだよ!クソが!!と憤るのも無理はありません。だって、あなたの愛するJavaScriptではないのですから。

あるよ、JavaScript

そんなときにお伝えしたいのが、ScriptControlという仕組みです。
ExcelマクロにはこのScriptControlをつかうための仕組みが備わっています。

ScriptControlをつかうには、マクロのエディタ画面のメニューにある「ツール」から「参照設定」を選びます。

このメニューをクリックすると小さなダイアログが表示されます。さらにずらーーっと並んでいる中から「Microsoft Script Control 1.0」というものを探してみてください。そしてこれにチェックを入れたら「OK」をクリックします。

さぁ、これで仕組みを利用するための用意は整いました。あとは手続きを済ませるとJavaScriptを利用できるようになります。

手続き

ではいつものようにサブプロシージャを用意したら、ScriptControl型の変数をつくります。そして、その変数オブジェクトを使ってJavaScriptを利用します。

Sub note_mu()
 Dim js As New ScriptControl
 js.Language = "JScript"
 Debug.Print js.Run("encodeURI", "くすみ")
 Set js = Nothing
End Sub

上記を実行してみてください。イミディエイトウィンドウに結果が出力されているはずです。

すこしだけ解説をしますと、次のようになります。

「js.Language = "JScript"」はスクリプトコントロールで利用するスクリプト言語の種類を指定しています。JavaScriptを利用したいのですが、これのマイクロソフト版である「JScript」しかありませんのでこちらを指定します。

次の行がJavaScriptを実際に実行しているところで、Runメソッドを利用しています。これは1つ目の引数に実行したい関数の名前を入れます。ここではエンコードしたいので「encodeURI」を入れています。そして2つ目の引数にはエンコードしたい文字列を指定しています。実際には複数指定することができ、Variant型の配列で指定することができます。

とはいえ、完全にJavaScriptのすべてが利用できるわけではありません。例えば次の画像ではalert関数で「くすみ」というメッセージボックスを表示しようとしていますが、実行時エラーになります。

理由は簡単で、「alert」関数は「window」オブジェクトに属するメソッドだからです。Excel内ですのでブラウザのウィンドウがありません。ですからエラーになるのも無理はありません。

最終形

一応、先ほどの表のとなり列へエンコードした文字列を書き出すようにしてみました。ご存知かもしれませんが、publicになっている標準モジュール内の関数(Functionプロシージャ)はワークシートから利用することができます。

Function note_mu_encode(Value As String) As String
 Dim js As New ScriptControl
 js.Language = "JScript"
 note_mu_encode = js.Run("encodeURI", Value)
 Set js = Nothing
End Function

いやー、これでワークシートにエンコードした文字列を作り出すことができました!しかも表にしてあるので一瞬ですべてのキーワードがエンコードできましたよ!!!

最後に

今回はマクロからJavaScriptを利用してみました。追求すればさらに複雑なこともできます。例えば、既存のJavaScriptで書かれたファイルから特定の関数を呼び出すとか。JavaScriptばかり書いていたときの便利なアレを再利用することができるかもしれません。

最後に、JScriptはすでに凶悪なほどレガシーな技術です。危険が伴いますので十分に注意して利用してください。それを理解したうえで使うのであれば非常にパワフルなものです。もちろん、JScriptからExcelを操作することもできますので遊んでみてください。

この記事が気に入ったらサポートをしてみませんか?