はじめに
今回は、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の機能は以下の通りです。
- URLエンコード(関数の利用)
- 配列のソート(メソッドの利用)
- JSONデータの解析(プロパティの利用)
- 日付形式の変換(ユーザ定義関数の利用)
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;」と、戻り値を省略します。