Excel操作
JScriptでExcelを操作する方法を紹介します。 スクリプトの処理で、Excelの起動や、セルの値を取得をするわけですが、実際のスクリプトのソースコードはJScriptとExcel VBA(以下、VBAとする)を混在して記述していく感じになります。 VBAがわからない人は「Excel VBA」でググってください。 ここで、話は戻ってしまうんですが、はじめにでも記述したんですが、「VBScriptの方をお勧めします。」・・と。 実はVBAとVBScriptは構文がほとんど同じ・・、いや同じなのかな? まあ、ほとんど同じノリで記述することが出来ます。 JScriptとVBAを混在させるのと、構文がほぼ同じのVBScriptとVBAでは・・・、わかりますよね。 それに加え、VBScriptは大文字と小文字の区別がないですが、JScriptにはあります。 私の経験談ですが、JScriptとVBAの組み合わせだと、この大文字と小文字の区別のせいで幾度となく実行時エラーが発生しました。 コーディングのしやすさで考えればVBScriptを勉強していればよかったな〜と思うはずです。 とりあえずこの話はここで終わりにします。 本題に入りますが、ここでのVBAについての関数は一切説明しません。 「○○をするには、このサンプルを参照」って感じで紹介していきます。 VBAについての関数やプロパティはググって他のサイトを参照したほうが、多くの情報が得られます。 本音を書くと、メンドイというのが正直なところです。 ご容赦願います。 それと、ここで紹介する全てのサンプルでは動作をわかりやすくするためにSleep()関数を多数使用しています。 Sleep()関数についてはアプリケーション操作のウインドウをアクティブ状態にするを参照してください。 それから本ページを作成するに当たり、下記のサイトをよく参照しました。 VBScriptとJScript(主にVBScript)で解説しています。もし本ページでわからないときはこちらのサイトを参照すればわかるかもしれません。 ・VBScript&JScript Tips ■Excel & Access操作編
Excelの起動と終了
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関数の利用
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秒後に終了します。
VBAマクロを呼び出す
ExcelのVBAマクロを呼び出すには以下のサンプルで実現できます。 ちなみに、サンプルで使用している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〜5の流れを文章で記述すると、以下のようになると思います。 最初にどんなことをしたいかを考えます。 たとえば「セルの背景色を変更したい」とかです。 それから、インターネットを使って「VBA セル 背景色」で検索すればその手のサイトは沢山ヒットします。 で、そのヒットしたページ内からそれらしい説明文が書いてある、VBA関数及びプロパティを発見します。 そしてそれを以下のようにスクリプト内にて呼び出して使用します。
- Excelのどのような機能が使いたいのかを選択
- 「VBA」とその機能の名前をキーワードにしてWebを検索
- それらしい関数及びプロパティを発見
- スクリプト内に使用する
- 実際に動かしてみる
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操作へ |