はじめに

今回は、VBAだけでは不可能だった機能を実現可能にするJScriptについて、その使い方を解説します。動作確認は、Windows 7、Excel 2010、VBA 7.0およびWindows XP、Excel 2007、VBA 6.5で行っています。

Excel VBAでWebサービス - Excelでヤフオクの商品情報を検索しよう
Excel VBAでWebサービス - Excelでフィードを読もう(RSS2.0編)
Excel VBAでWebサービス - ExcelからWikipediaを引いてみよう
Excel VBAでWebサービス - Amazonで様々な商品情報を検索しよう
Excel VBAでWebサービス - Amazonで書籍情報を検索してみよう
Excel VBAでWebサービス - ExcelでTwitterと連携する 完成編
Excel VBAでWebサービス - ExcelでTwitterと連携する2
Excel VBAでWebサービス - ExcelでTwitterと連携する
Excel VBAでWebサービス - YouTube APIで動画を検索しよう
Excel VBAでWebサービス - Excelで書籍情報を検索・取得してみよう
Excel VBAでWebサービス - MSNマネーから株価の推移を取得しよう
Excel VBAでWebサービス - 天気予報を取得してみよう

今回紹介するJScriptの機能は以下の通りです。

  1. URLエンコード(関数の利用)
  2. 配列のソート(メソッドの利用)
  3. JSONデータの解析(プロパティの利用)
  4. 日付形式の変換(ユーザ定義関数の利用)

図1.完成サンプル

JScriptとは

Windows XP以降では、JScriptというスクリプト(軽量なプログラミング言語)が標準で利用できます。JScriptは、Webページ等で利用されるJavaScriptのMicrosoft版で、文法もJavaScriptと原則同じです。Microsoft独自部分の追加、一部は最新版仕様の未対応、といった程度の違いはありますが、今回紹介する機能では一般的な機能のみ利用していますので、あまり心配することはありません。 スクリプトとしてはVBScriptというVisual Basicベースの言語もありますが、VBAとは異なる系統のJScriptを使うことによって、VBAにない機能を実現する可能性が広がります。

JScriptの特徴

JScriptはオブジェクトを基本とした言語です。長いプログラムではデータとロジックの関連が複雑になりがちですが、プログラムから切り離したモノ(オブジェクト)に、属性(プロパティ)や挙動(メソッド)を持たせることにより、プログラム本体を単純化できます。

Excel VBAでも、コマンドボタンやセルはオブジェクトです。ComboBox1.VisibleプロパティにFalseを設定して非表示にしたり、Range("A1").Clearメソッドでセルの値をクリアしたりしていますよね。

表1.プログラムとオブジェクト

機能 データの保持 挙動の定義
プログラム 変数 関数(ロジック)
オブジェクト プロパティ メソッド

VBAとの文法の比較

JScriptの文法をVBAと対比させながら説明します。

表2.文法の比較

項目 JScript VBA
文と文との区切り ;(セミコロン) 改行、:(コロン)
コメントの書き方 //以降、/*と*/で挟む '以降
変数の宣言 var i; Dim i As Integer
データ型 String, Number, Booleanなど (略)
代入演算子 x = y; x = y
数値の加算 i = j + k; i = j + k
文字列の結合 x = y + z;(文字の結合も+) x = y & z
++演算子 x++ なし(x=x+1と同じ)
複合代入演算子 x += y なし(数値ではx=x+y、文字ではx=x&yと同じ)
比較演算子 if (x == 0) if (x = 0)
条件演算子 x>=0 ? "非負" : "負" なし(Iif(x>=0,"非負","負")に相当)
ブロック(文の集合) 中カッコ{}で囲む なし(If ~ End If、For ~ Nextに相当)
制御構文(if) if ( x == 0 ) {ブロック}; If (x = 0) Then ~
制御構文(for) for ( i = 0; i < 3; i++ ) {ブロック} For i = 0 To 2 ~
ユーザ定義関数 functionのみ Function、Subプロシージャ

(1)文と変数

JScriptでは文の区切りに必ず;(セミコロン)が必要です。//(ダブルスラッシュ)から右側はコメントになります。複数行にわたるコメントは、/*(スラッシュとアスタリスク)と*/とで囲みます。

JScriptはデータ型に寛容で、変数宣言ではデータ型の指定は不要(不可能)です。ただし内部的には、String(文字列)、Number(数値)、Boolean(論理)などの基本データ型を持っており、値が代入された時に自動的に決まります。また、異なるデータ型同士の演算も可能で自動的にデータ型が変換されます。JScriptでは文字列の結合も+(プラス)演算子を使う点に注意してください。

[リスト1]変数宣言とデータ型の自動変換

var x = 2000; //自動的に数値型になる
var y = "Hello"; //自動的に文字列型になる
x += y; //xは"2000Hello"になる(文字列に自動変換される)

配列を利用する場合は、下記のようにします。

[リスト2]配列の利用

var ary = ["X","Y","Z"]; //予め全要素がわかっている場合
//要素が後からわかる場合
var ary = []; //空の配列オブジェクトを生成する
ary.push("A"); //pushメソッドで追加する
ary.push("B");
ary.push("C");

(2)制御構文

条件分岐(ifなど)や繰り返し(forなど)の適用範囲(文の集合)は、中カッコ{と}で囲んだブロックにします。 if文での比較演算子は、=でなく==と等号を2つ並べる点に注意してください。

[リスト3]if文の例

if (x == 0) {
    a = 1;
    b = 2;
}

forループは、「for ( カウンタ変数と初期値; ループ継続条件; カウンタ変数の変更 )」という形で記述します。下記は、ループ用変数iを0から始め、3未満である間、1ずつ加算する処理で、VBAの「For i=0 To 2 Step 1」に相当します。

[リスト4]for文の例

for (i = 0; i < 3; i++) {
    str += ary[i];
}

(3)ユーザ定義関数

VBAでユーザ定義関数を作るためのプロシージャは、SubとFunctionがありますが、JScriptではfunctionしかありません。

[リスト5]function

function sum(x,y){
    return x + y;
}

戻り値がない場合は、「return;」と、戻り値を省略します。