Excel と VBScript

[Home]

2015/04/11

ここでは Excel のワークシートを VBScript を使って操作する方法を紹介します。VB.NET を使って Excel を操作する方法はこちら。

既存のワークブックを開いて操作するには

既存のExcelワークブックは GetObject 関数を使うと簡単に取得できます。下のサンプルは "Book1.xls" というファイルを読み込んでセル A1 の内容を表示します。

' WScript.GetObjectを使ってブックを開いてデータを読む。
Set book = WScript.GetObject("Book1.xls")
Set sheet = book.WorkSheets.Item(1)
WScript.Echo sheet.Cells(1, 1).Text
book.Close()
WScript.Echo "Done."
Book1.xlsの内容
実行例

下の例はセル A2 の内容を書き換えて別のブックに保存するサンプルです。GetObject の代わりに CreateObject と Open メソッドでも既存のファイルを開くことができます。

' WScript.CreateObjectを使ってブックを開く。
Set excel = WScript.CreateObject("Excel.Application")
Set book = excel.WorkBooks.Open("Book1.xls")
Set sheet = book.WorkSheets.Item(1)
WScript.Echo sheet.Cells(2, 1)
sheet.Cells(2, 1) = "書き換えました。"
book.SaveAs("c:\temp\Book10.xls")
excel.Quit()
WScript.Echo "Done."

新しいワークブックを作成して保存するには

新しいワークブックを作成するには、WScript.CreateObject メソッドで最初に Excel オブジェクトを作成し、Workbooks コレクションにワークブックを追加し、そのワークブックの Worksheets コレクションにワークシートを追加します。

' WScript.CreateObjectを使って新しいブックを作成する。
Set excel = WScript.CreateObject("Excel.Application")
Set book = excel.WorkBooks.Add()
Set sheet = book.WorkSheets.Add()
sheet.Cells(1, 1) = "セル1,1"
sheet.Cells(1, 2) = "セル1,2"
sheet.Cells(2, 1) = "セル2,1"
sheet.Cells(2, 2) = "セル2,2"
book.SaveAs("Book2.xlsx")
excel.Quit()
WScript.Echo "Done."

Excelワークシートのコピー&貼り付け

下のサンプルはワークブックどうしでコピーと貼り付けをするものです。このような場合、どういうメソッドやプロパティを使えばよいかわからないときは、実際に Excel を操作してそれをマクロとして記録するとどうしたらいいかが簡単にわかります。

FileName1 = "Book3.xls"
FileName2 = "Book3c.xlsx"
Set book1 = GetObject(FileName1)
Set sheet11 = book1.Worksheets(1)
Set excel = CreateObject("Excel.Application")
Set book2 = excel.Workbooks.Add
Set sheet21 = book2.Worksheets.Add
' コピーと貼り付け (1)
xlPasteValues = -4163
sheet11.Range("D3:H10").Copy
sheet21.Range("A1").PasteSpecial xlPasteValues
' コピーと貼り付け (1)
sheet11.Range("A15:D19").Copy
sheet21.Range("A15").PasteSpecial xlPasteValues
book2.SaveAs FileName2
book2.Close
book1.Close
excel.Quit
WScript.Echo "Done."

おまけ

下のサンプルは Excel の列名を番号に変換するものです。

' Excelの列名を番号に変換する。
np = WScript.Arguments.Length
If np = 0 Then
  WScript.Echo "Excelの列名を番号に変換する。" & vbCrLf & "使用例: cscript //nologo GetNumber.vbs A B C Z AA AB"
  WScript.Quit
End If

For i = 1 To np
  x = WScript.Arguments(i - 1)
  If Len(x) = 1 Then
    n = GetNum(x, 0)
  Else
    n = 26 * GetNum(x, 0) + GetNum(x, 1)
  End If
  WScript.Echo x & " => " & n
Next


'
'  列の番号を計算
'    s  列名 (例) 'A', 'AB'
'    i  列名の文字位置。(例) 'AB'のとき0なら'A', 1なら'B'
Function GetNum(ByVal s, ByVal i)
    s0 = Mid(s, i + 1, 1)
    GetNum = Asc(s0) - Asc("A") + 1
End Function

 

 開設 2014年12月   著作権 2014-2015 bonk.red  連絡先: こちらからメッセージを送ってください。

 このページの先頭へ..