Excelファイルに得点の履歴を記録する

Excelファイルは読み込むばかりではありません。もちろん、スクリプトからExcelファイルを更新することもできます。以下では、テキスト読み書き編でも行ったように、得点の履歴を[point]ワークシートに保存してみましょう。以下には、先ほどのword_excel.vbsからの変更部分だけを掲載します(追記部分は★~★で表しています)。なお、このサンプルを利用するには、data.xlsに、あらかじめタイトル行だけを記した[point]ワークシートを作成しておく必要があります。

あらかじめ用意しておく[point]ワークシート

具体的なコードは、次の通りです。

[リスト02]word_excel.vbs(変更分のみ)

WScript.Echo(i & "問中、正解は" & correct & "問でした。")
    ' [point]ワークシートを選択(1)
xls.sheets("point").Select() ------------★
    ' 1~END_ROW行まで順番に読み込み(2)
For i = 1 To END_ROW
    ' i行目1列目のセルが空である場合に、得点を記録
  If xls.Cells(i, 1) = "" Then
    xls.Cells(i, 1) = Now   ' 現在日時をセット
    xls.Cells(i, 2) = correct   ' 得点をセット
    Exit For    ' ループを脱出
  End If
Next
    ' ワークブックを保存
xls.Save() ------------------------------★
xls.Quit()

先ほども述べたように、セルを読み書きするにあたっては、あらかじめ作業対象のワークシートを選択状態にしておく必要があります。ワークシートを選択するのは、Selectメソッドの役割でした。[point]ワークシートを選択したら、(2)のForループで1~END_ROW行目までのセルを順番に読み込みます。読み込んだセルの内容が空であれば、ここを履歴一覧の末尾と見なして、現在日時と得点を記録します。これで履歴情報を常にリストの末尾に追加していくことができるわけです。

履歴の末尾を検出する方法

セルに値を書き込むのは、先ほども紹介したCellsプロパティの役割です。Cellsプロパティは値の読み取りだけではなく、書き込みにも利用できます。ワークシートを更新できたら、あとはSaveメソッドでファイルを上書き保存するだけです。

これで履歴の記録ができるようになりました。何度かword_excel.vbsを実行した上で、data.xlsを直接開いてみましょう。以下のように、スクリプトを実行した数だけ得点の履歴情報が記録されていれば、スクリプトは正しく動作しています(*)。

*)保存する際に、「RESUME.XLWを作成しますか?」のようなダイアログが表示される場合があります。ここでは、そのまま[はい]を選択することで、ワークブックは正しく保存されます。

スクリプトから自動記録された得点履歴

[補足]得点の遷移を折れ線グラフにしてみよう

[point]ワークシートの該当するセル範囲にグラフを関連付けておくことで、スクリプトから記録された得点履歴でもって、グラフを自動生成することもできます。方法はカンタン、[point]ワークシートからB列の適当な範囲を選択した上で、[挿入]タブから[折れ線]を選択するだけです。

折れ線グラフを生成する(1)グラフ化したい範囲を選択する (2)[挿入]タブから[折れ線]を選択

これによって、折れ線グラフが追加され、得点履歴が追加されるごとに折れ線グラフも自動的に更新されていきます。WSHとは直接関係ない内容ですが、このようにExcelの本来の機能とうまく組み合わせることで、スクリプトを書かなくてもグラフの自動生成ができてしまいます。せっかくExcelという強力なアプリケーションの力を借りるのですから、なにからなにまでスクリプトで記述するというのではなく(もちろん、スクリプトからグラフを動的に生成することもできますが)、Excel本来の機能で賄えないか、ちょっと立ち止まって考えてみることも大切です。

以上、今回はスクリプトからExcelファイルを操作する方法について紹介しました。Excelファイルの操作というと、なんだか難しげにも思えるかもしれませんが、実は書いているコードはほとんどVBA(Visual Basic for Application)のコードと同じだったりします。つまり、VBAを理解していれば、WSHからもほとんど同じ要領でExcel(やWord、Accessなども)を操作できるわけですね。本稿では、VBAについての詳細には触れませんが、ちょうど先日、「ゼロからはじめるVBA」も開始しました。興味のある方は、こちらも合わせてご覧になってみてください。

WINGSプロジェクト 山田祥寛
<WINGSプロジェクトについて>
テクニカル執筆プロジェクト(代表 山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。