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
を実行してみましょう。テキスト読み書き編でも見たような結果が得られれば成功です。