Excel操作

 JScriptExcel操作する方法を紹介します。
スクリプト処理で、Excelの起動や、セルの値を取得をするわけですが、実際のスクリプトソースコードJScriptExcel VBA(以下、VBAとする)を混在して記述していく感じになります。
VBAがわからない人は「Excel VBA」ググってください。

ここで、話は戻ってしまうんですが、はじめにでも記述したんですが、「VBScriptの方をお勧めします。」・・と。
実はVBAVBScript構文がほとんど同じ・・、いや同じなのかな?
まあ、ほとんど同じノリで記述することが出来ます。
JScriptVBA混在させるのと、構文がほぼ同じのVBScriptVBAでは・・・、わかりますよね。
それに加え、VBScript大文字小文字区別ないですが、JScriptにはあります。
私の経験談ですが、JScriptVBAの組み合わせだと、この大文字小文字区別のせいで幾度となく実行時エラーが発生しました。
コーディングのしやすさで考えればVBScriptを勉強していればよかったな〜と思うはずです。
とりあえずこの話はここで終わりにします。

本題に入りますが、ここでのVBAについての関数は一切説明しません。
「○○をするには、このサンプルを参照」って感じで紹介していきます。
VBAについての関数プロパティググって他のサイトを参照したほうが、多くの情報が得られます。
本音を書くと、メンドイというのが正直なところです。
ご容赦願います。

それと、ここで紹介する全てのサンプルでは動作をわかりやすくするためにSleep()関数多数使用しています。
Sleep()関数についてはアプリケーション操作のウインドウをアクティブ状態にするを参照してください。

それから本ページを作成するに当たり、下記のサイトをよく参照しました。
VBScriptJScript(主にVBScript)で解説しています。もし本ページでわからないときはこちらのサイト参照すればわかるかもしれません。

・VBScript&JScript Tips ■Excel & Access操作編

 Excel起動及び、終了させるには以下のサンプルで実現できます。

[サンプルコード]
//  
//  Excel操作
//  
//   Excelの起動と終了。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  Excelを終了
ExcelApp.Quit();

WScript.Echo( "終了" );

//  オブジェクトを解放
ExcelApp = null;


[実行結果]
 Excelを起動し、3秒後に終了します。

 新しいブック追加するには以下のサンプルで実現できます。

[サンプルコード]
//  
//  Excel操作
//  
//   新しいブックを追加する。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  新しいブックを追加
var book = ExcelApp.Workbooks.Add();

WScript.Sleep( 1000 );

//  Excelを終了
ExcelApp.Quit();

WScript.Echo( "終了" );

//  オブジェクトを解放
ExcelApp = null;


[実行結果]
 Excelを起動し、3秒後に新しいブックが作成される。
その1秒後に終了します。

 既存Excelファイル開き閉じるには以下のサンプルで実現できます。

[サンプルコード]
//  
//  Excel操作
//  
//   既存のブックを開き、そのブックを閉じる。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  既存のブックを開く
var book = ExcelApp.Workbooks.Open( "C:/Test.xls" );

WScript.Sleep( 1000 );

//  ブックを閉じる
book.Close();

WScript.Sleep( 1000 );

//  Excelを終了
ExcelApp.Quit();

WScript.Echo( "終了" );

//  オブジェクトを解放
ExcelApp = null;


[実行結果]
 実行前に「C:」ドライブの直下に「Test.xls」のファイル名のExcelファイルを用意してください。
実行するとExcelが起動し、3秒後に「C:」ドライブの直下の「Test.xls」ファイルを開きます。
その1秒後に、そのブックを閉じます。
そして、その1秒後にExcelを終了します。

 指定したセル設定するには以下のサンプルで実現できます。

[サンプルコード1]
//  
//  Excel操作
//  
//   A1のセルに値を設定する。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  新しいブックを追加
var book = ExcelApp.Workbooks.Add();

//  1シート目のシートオブジェクトを取得
var sheet = book.Worksheets( 1 );

//  A1のセルに値を設定
sheet.Range( "A1" ).Value = "あ";

WScript.Sleep( 1000 );

//  ブックを閉じる(保存しない)
book.Close( false );

//  Excelを終了
ExcelApp.Quit();

WScript.Echo( "終了" );

//  オブジェクトを解放
ExcelApp = null;


[実行結果1]
 Excelを起動し、3秒後に新しいブックを新規作成する。
そして、1シート目のA1のセルに「あ」を設定します。
そして、その1秒後に保存せずにExcelを終了します。

[サンプルコード2]
//  
//  Excel操作
//  
//   行と列を指定してセルに値を設定する。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  新しいブックを追加
var book = ExcelApp.Workbooks.Add();

//  1シート目のシートオブジェクトを取得
var sheet = book.Worksheets( 1 );

//  行が4、列が3のセルに値を設定
sheet.Cells( 4, 3 ).Value = 100;

WScript.Sleep( 1000 );

//  ブックを閉じる(保存しない)
book.Close( false );

//  Excelを終了
ExcelApp.Quit();

WScript.Echo( "終了" );

//  オブジェクトを解放
ExcelApp = null;


[実行結果2]
 Excelを起動し、3秒後に新しいブックを新規作成する。
そして、1シート目の行が4、列が3(C4)のセルに「100」を設定します。
そして、その1秒後に保存せずにExcelを終了します。

 指定したセル取得するには以下のサンプルで実現できます。
ちなみに、ブランクセルにはnull設定されています。
空文字("")ではないので気をつけてください。

[サンプルコード1]
//  
//  Excel操作
//  
//   A1のセルの値を取得する。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  既存のブックを開く
var book = ExcelApp.Workbooks.Open( "C:/Test.xls" );

//  1シート目のシートオブジェクトを取得
var sheet = book.Worksheets( 1 );

//  A1のセルの値をメッセージボックスで表示
WScript.Echo( "A1=" + sheet.Range("A1").Value );

WScript.Sleep( 1000 );

//  ブックを閉じる
book.Close();

//  Excelを終了
ExcelApp.Quit();

WScript.Echo( "終了" );

//  オブジェクトを解放
ExcelApp = null;


[実行結果1]
 実行前に「C:」ドライブの直下に「Test.xls」のファイル名のExcelファイルを用意してください。
そして、1シート目のA1のセルに何でもいいので値を設定してください。(例:「ああああ」等)
実行するとExcelが起動し、3秒後に「C:」ドライブの直下の「Test.xls」ファイルを開きます。
そして、1シート目のA1のセルの値がメッセージボックスで表示されます。
そして、その1秒後にExcelを終了します。

[サンプルコード2]
//  
//  Excel操作
//  
//   行と列を指定してセルの値を取得する。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  既存のブックを開く
var book = ExcelApp.Workbooks.Open( "C:/Test.xls" );

//  1シート目のシートオブジェクトを取得
var sheet = book.Worksheets( 1 );

//  行が4、列が3のセルの値をメッセージボックスで表示
WScript.Echo( "行4, 列3=" + sheet.Cells(4, 3).Value );

WScript.Sleep( 1000 );

//  ブックを閉じる
book.Close();

//  Excelを終了
ExcelApp.Quit();

WScript.Echo( "終了" );

//  オブジェクトを解放
ExcelApp = null;


[実行結果2]
 実行前に「C:」ドライブの直下に「Test.xls」のファイル名のExcelファイルを用意してください。
そして、1シート目のC4のセルに何でもいいので値を設定してください。(例:「ああああ」等)
実行するとExcelが起動し、3秒後に「C:」ドライブの直下の「Test.xls」ファイルを開きます。
そして、1シート目のC4のセルの値がメッセージボックスで表示されます。
そして、その1秒後にExcelを終了します。

 Excelに用意されている、SUM()関数MAX()関数を利用するには以下のサンプルで実現できます。

[サンプルコード1]
//  
//  Excel操作
//  
//   Excel関数のSum関数を呼び出す。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  Excel関数のSum関数を呼び出す
var anser = ExcelApp.WorksheetFunction.Sum( 10, 5, 8 );

WScript.Echo( "10 + 5 + 8 = " + anser );

WScript.Sleep( 1000 );

//  オブジェクトを解放(Excelの終了)
ExcelApp.Quit();

ExcelApp = null;


[実行結果1]
 Excelを起動し、3秒後にExcel関数のSum()関数を呼び出します。
そして、結果がメッセージボックスで表示されます。
そして、その1秒後に終了します。

[サンプルコード2]
//  
//  Excel操作
//  
//   Excel関数のRept関数を呼び出す。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  Excel関数のRept関数を呼び出す
var anser = ExcelApp.WorksheetFunction.Rept( "ABC", 5 );

WScript.Echo( anser );

WScript.Sleep( 1000 );

//  オブジェクトを解放(Excelの終了)
ExcelApp.Quit();

ExcelApp = null;


[実行結果2]
 Excelを起動し、3秒後にExcel関数のRept()関数を呼び出します。
そして、結果がメッセージボックスで表示されます。
そして、その1秒後に終了します。

 ExcelVBAマクロ呼び出すには以下のサンプルで実現できます。
ちなみに、サンプルで使用しているVBAマクロの記載済みのExcelファイルここからダウンロードしてください。

[サンプルコード1]
//  
//  Excel操作
//  
//   シートのマクロを呼び出す。(引数なし)
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  既存のブックを開く
var book = ExcelApp.Workbooks.Open( "C:/MacroTest.xls" );

WScript.Sleep( 1000 );

//  シートのマクロ関数を呼び出す
ExcelApp.Run( "MacroTest.xls!Sheet1.func1" );

//  ブックを閉じる
book.Close();

WScript.Sleep( 1000 );

//  オブジェクトを解放(Excelの終了)
ExcelApp.Quit();

ExcelApp = null;


[実行結果1]
 実行前に「C:」ドライブの直下にこのExcelファイルをダウンロードして置いてください。
実行するとExcelが起動し、3秒後に「C:」ドライブの直下の「MacroTest.xls」ファイルを開きます。
その1秒後に、1シート目のVBAマクロの「func1()」関数を呼び出します。
そして、その1秒後にExcelを終了します。

[サンプルコード2]
//  
//  Excel操作
//  
//   シートのマクロを呼び出す。(引数あり)
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  既存のブックを開く
var book = ExcelApp.Workbooks.Open( "C:/MacroTest.xls" );

WScript.Sleep( 1000 );

//  シートのマクロ関数を呼び出す
ExcelApp.Run( "MacroTest.xls!Sheet1.func2", 100, "ABC" );

//  ブックを閉じる
book.Close();

WScript.Sleep( 1000 );

//  オブジェクトを解放(Excelの終了)
ExcelApp.Quit();

ExcelApp = null;


[実行結果2]
 実行前に「C:」ドライブの直下にこのExcelファイルをダウンロードして置いてください。
実行するとExcelが起動し、3秒後に「C:」ドライブの直下の「MacroTest.xls」ファイルを開きます。
その1秒後に、1シート目のVBAマクロの「func2()」関数に引数を渡して呼び出します。
そして、その1秒後にExcelを終了します。

[サンプルコード3]
//  
//  Excel操作
//  
//   モジュールのマクロを呼び出す。
//  

//  Excelオブジェクトを取得(Excelの起動)
var ExcelApp = new ActiveXObject( "Excel.Application" );

//  Excelアプリケーションを表示
ExcelApp.Visible = true;

//  3秒停止
WScript.Sleep( 3000 );

//  既存のブックを開く
var book = ExcelApp.Workbooks.Open( "C:/MacroTest.xls" );

WScript.Sleep( 1000 );

//  モジュールのマクロ関数を呼び出す
ExcelApp.Run( "MacroTest.xls!Module1.func3" );

//  ブックを閉じる
book.Close();

WScript.Sleep( 1000 );

//  オブジェクトを解放(Excelの終了)
ExcelApp.Quit();

ExcelApp = null;


[実行結果3]
 実行前に「C:」ドライブの直下にこのExcelファイルをダウンロードして置いてください。
実行するとExcelが起動し、3秒後に「C:」ドライブの直下の「MacroTest.xls」ファイルを開きます。
その1秒後に、モジュール内(モジュール名「Module1」)のVBAマクロの「func3()」関数を呼び出します。
そして、その1秒後にExcelを終了します。

 その他操作ガイドという名目でこの場を借ります。
ここで紹介する内容は、上記までに紹介した内容を超えたことをしたい対象にしています。
上記までに紹介した内容は、スクリプトとして知っておきたい最小限のものだと思っています。
でも、本当はブックの保存や、シートの作成削除などExcel機能をほぼ全て操作できます。
そこで、ここでは今後そのように高機能スクリプトを作りたい方に、開発手順みたいなことを紹介します。

開発の手順は大まかに以下の流れになります。

  1. Excelのどのような機能が使いたいのかを選択
  2. 「VBA」とその機能の名前をキーワードにしてWebを検索
  3. それらしい関数及びプロパティを発見
  4. スクリプト内に使用する
  5. 実際に動かしてみる
 まあ、1〜5流れ文章で記述すると、以下のようになると思います。  最初にどんなことをしたいかを考えます。 たとえば「セルの背景色を変更したい」とかです。 それから、インターネットを使って「VBA セル 背景色」検索すればその手のサイト沢山ヒットします。 で、そのヒットしたページ内からそれらしい説明文が書いてある、VBA関数及びプロパティを発見します。 そしてそれを以下のようにスクリプト内にて呼び出し使用します。


var ExcelApp = new ActiveXObject( "Excel.Application" );
ExcelApp.Visible = true;
ExcelApp.Workbooks.Add();

//  背景色を赤色に設定
ExcelApp.Range( "A1" ).Interior.ColorIndex = 3

WScript.Sleep( 3000 );
ExcelApp.Quit();
ExcelApp = null;


とまあ、こんな感じの流れ開発していけば、色々な機能スクリプト組み込むことが出来るでしょう。
皆さん頑張ってください。


マウス操作へ 目次 Access操作へ