Excelから英単語データを読み込もう

それではさっそく、具体的なコードを見ていくことにします。英単語データは、あらかじめExcelファイル(data.xls)の[data]ワークシートに、以下のように記録しておくものとします。

英単語データをあらかじめExcelワークシートに用意

英単語帳アプリケーションの基本的な流れは、テキスト読み書き編で解説していますので、ここではExcelファイルに関係する部分に注目してコードを見ていくことにしましょう。

[リスト01]word_excel.vbs

    ' データファイルが格納されているフォルダ
Const DATA_XLS = "C:\tmp\data.xls"
    ' 英単語データが格納されている可能性のある行の最大値
Const END_ROW = 100
Dim line, answer, i, correct, tmp   ' 以下で使用する変数を宣言
correct = 0 ' 正解数のカウンタ

    ' Excel.Applicationオブジェクトを生成(1)
Set xls = WScript.CreateObject("Excel.Application")
    ' あらかじめ用意しておいたdata.xlsを開く
Set book = xls.Workbooks.Open(DATA_XLS)
    ' data.xlsの中の[data]ワークシートを選択
xls.Sheets("data").Select()

    ' 1~END_ROW行目まで順番に読み込み(2)
For i = 1 To END_ROW
    ' i行目1列目のセルから質問(もとの英単語)を取得
  quest  = xls.Cells(i, 1)
    ' 質問がカラである場合には、Forループを脱出
  If quest = "" Then
    i = i - 1   ' あとからの表示用に質問数を-1
    Exit For
  End If
    ' 問題(英語)をインプットボックスで表示
  answer = InputBox(quest, "第" & i & "問")
    ' 入力された解答(answer)と正解(i行目2列目のセル)を比較
  If xls.Cells(i, 2) = Trim(answer) Then
    ' 解答が正しい場合は「正解!」と表示し、正解数をカウントアップ
    WScript.Echo("正解!")
    correct = correct + 1
  Else
    ' 間違っていた場合には正解をメッセージ表示
    WScript.Echo("残念!正解は'" & xls.Cells(i, 2) & "'でした...")
  End If
Next

    ' 結果を表示
WScript.Echo(i & "問中、正解は" & correct & "問でした。")
    ' Excelファイルを閉じる(3)
xls.Quit()

ポイントとなる部分について、順に解説していきます。

(1)スクリプトからExcelファイルを開く

Excelファイルを操作するには、Excel.ApplicationというCOMオブジェクトを使います。テキスト読み書き編でも紹介したように、オブジェクトを生成するにはWScriptオブジェクトのCreateObjectメソッドを使用するのでした。Excel.Applicationオブジェクトが生成できたら、次にWorkbooks.Openメソッドであらかじめ用意しておいたワークブック(data.xls)を読み込みます。また、読み込む対象となるワークシートをSelectメソッドで有効な状態にしておきましょう。

[構文]Selectメソッド

Excelオブジェクト.Sheets(シート名).Select()

これで[data]ワークシートに対して、読み書きの作業が行えるようになりました。

(2)セルの内容を読み込む

英単語データをワークシートから読み込んでいるのは、(2)のForループです。セルにアクセスするには、Cellsプロパティを使用します。

[構文]Cellsプロパティ

Excelオブジェクト.Cells(行番号, 列番号)

つまり、「xls.Cells(i, 1)」であれば、i行目1列目のセルにアクセスしているわけですね。列番号の1、2、3...は、それぞれA、B、C...列に相当します。ここでは、Forループを利用して、1~END_ROW行目までを順番に読み込み、読み込んだセルが空であった場合にループを脱出するようにしています。これによって、スクリプトは最大END_ROW行目のセルまで読み込めるようになるわけです。

(3)Excelファイルを閉じる

必要な作業を終えたら、最後にExcelファイルを閉じます。Excelファイルを閉じるには、Quitメソッドを使用します。Quitメソッドを呼び出さないと、スクリプトが終了した後もExcelのプロセスが残ってしまいますので、要注意です。

はい、ここまでを理解したら、word_excel.vbsを実行してみましょう。テキスト読み書き編でも見たような結果が得られれば成功です。