VBScript

処理

VBScriptでマクロを起動する
Dim objExcel

Set objExcel=CreateObject("Excel.Application")
objExcel.Application.visible=False

objExcel.Workbooks.Open("C:\sample.xlsm")
objExcel.Application.Run"sample"
objExcel.DisplayAlerts=False
~処理記述~
objExcel.DisplayAlerts=True
objExcel.Application.visible=True

objExcel.Quit
Set objExcel=Nothing
VBScriptでマクロ(VBA)を呼び出すにはまず、ExcelApplicationを作成しVBAファイルを開きます。 そして呼び出したいマクロのモジュール名をRun関数で指定します。マクロが複数ある場合はモジュール名.プロシージャ名で呼び出します。
ファイルシステムオブジェクト
Dim objFs,b

Set objFs=CreateObject("Scripting.FileSystemObject")
Set b=objFs.OpenTextFile("パス名記述")

Dim myRec
myRec=b.ReadAll
myRec=Replace(myRec,"Taro","Hanako")
b.Close

Set b=objFs.CreateTextFile("パス名記述")
b.WriteLine(myRec)
b.Close
ファイル/フォルダ操作をしたい時はまず、Scripting.FileSystemObjectを作成します。 例文ではtextファイルを開き、Taroという文字列をHanakoという文字列に置換しています。

処理前

VBS画面

処理後

VBS画面
ユーザー名を取得する
Dim x

Set x=WScript.CreateObject("WScript.Network")
WScript.Echo"ユーザー名:"& x.UserName
ユーザー名を取得したい時はまずWScript.Networkを作成します。その後UserNameで自分のPCのユーザー名を取得出来るようになります。

処理結果

VBS画面
UTF-8へ文字列置換
Private Sub WriteUTF8(Byval SourceString As string)
Dim strm As ADODB Stream
Set strm=CreateObject("ADODB.Stream")
With strm
  .Type=adTypeText
  .Charset="UTF-8"
  .Open
  Call.WriteText(SourceString,adWriteLine)
  Call.SavetoFile("D:\temp\sample.txt,adSaveCreateOverWrite")
  .Close
End With
Set strm=Nothing
UTF-8へ変換するにはまず、ADODB.Streamを作成します。その後Charset="UTF-8と文字指定をUTF-8としテキストを読み込みます。 そしてファイルを保存して完了です。
Excel行の削除
activeworkbook.activesheet.rows("指定行").Delete
rowsで行を指定してDeleteでその行を削除することができます。

処理前

VBS画面

処理後

VBS画面
先頭行の固定
With objExcel.ActiveWindow
With objWorkbook.Windows(1)
  .SplitRow=1
  .FreezePanes=True
End With
固定したい行数にSplitRowを指定します。そしてFreezePanesにTrueを指定すると行を固定することができます。

処理前

VBS画面

処理後

VBS画面
データのある最下行+2にデータ合計処理
With objWorksheet
  nRow=.Cells(65536,"A").End(-4162).Row
  .Range("A:C").Rows(nRow+2).FormulaR1C1="Sum(r2c:r"& nRow &"c)"
End With
まずCells(65536,"A").End(-4162).Rowで最終行を取得します。その後、最終行+2として、最下行から2行上を指定します。 最後にSumで行の計算をして結果を最終行+2行のセルに代入します。

処理前

VBS画面

処理後

VBS画面
Excelのインスタンス生成
Set obj=WScript.CreateObject("Excel.Application")
CreateObjectでインスタンスを生成できます。
Excelウインドウの表示・非表示
obj.visible=True
obj.visible=False
visibleのTrue,Falseで表示の切り替えができます。
ブックの新規作成
Set book=obj.Workbooks.add()
新しいブックを作成するにはadd関数を使用します。

処理前

VBS画面

処理後

VBS画面
シート名の変更
obj.sheets(1).name="最初のシート"
シート名を変更したい場合はシートを指定してname関数でシート名を指定します。
VBS画面

処理後

VBS画面
ワークシートへの参照をオブジェクト変数に格納する
Set fsht=obj.sheets(1)
変数を作成してSet関数でシート自体を変数の中に収納することができます。変数に入れておけば後々シートの操作が楽になります。
セルに値入力する
fsht.Cells(1,1)="Hellow World"
セルへの代入は=で楽に入れることができます。
VBS画面

処理後

VBS画面
ブックの保存
book.Save
ブックの保存はSave関数を実行します。
Excelの終了
obj.Quit
Excelに限らずですが作成したインスタンスを終了するにはQuitを実行します。
オブジェクト変数の破棄(メモリの解放)
Set fsht=Nothing
VBSは処理の最後に、明示的に使用した変数を破棄する必要があります。そうしないとずっと解放されずにメモリを占領することになってしまいます。
Excelインスタンスの破棄(メモリの解放)
Set obj=Nothing
変数以外に作成したインスタンスも同じようにメモリの解放を行います。
Excelウインドウの最大化・最小化・標準化
objExcel.WindowState=-4137
objExcel.WindowState=-4140
objExcel.WindowState=-4143
VBAのxl〜定数はVBSでは使用できない為xl定数に相当する値を直接指定します。
配列の要素を完全一致で検索する
Function Is_ExistArray(ArrTarget,CheckValue)
Dim i
Is_ExistArray=False

For i=LBound(ArrTarget)To UBound(ArrTarget)
  If ArrTarget(i)=CheckValue Then
    Is_ExistArray=True
    Exit For
  End If
Next

End Function
まず処理前にIs_ExistArray=Falseとしておきます。Forで配列の中を繰り返し判定します。 ArrTarget(i)の値がCheckValueと同じならTrueに変更します。
特定のブック・シートをアクティブにする
Set excel=getobject("Excel.Application")
excel.activeworkbook.sheets("特定のシート名").select
アクティブにしたい場合はSelectします。
CSVファイルをExcelにして保存する(ドラッグandドロップ)
'Excelインスタンス作成
Set iobj=WScript.CreateObject("Excel.Application")
iobj=Workbooks.OpenText
WScript.Arguments(0)
Set books=iobj.ActiveWorkbook

'FileSystemObjectインスタンス作成
Set fso=CreateObject("Scripting.FileSystemObject")
cdir=fso.getParentFolderName(WScript.scriptFullName)

books.SaveAs cdir & "\csvtoexcel.xlsx",51

books.Close
iobj.Quit()
Set fso=Nothing
Set iobj=Nothing
WScript.Arguments(0)でドラッグ&ドロップされたファイルを取得できます。ファイル操作を行うため FileSystemObjectインスタンスを作成します。そしてSaveAsでExcelファイル名を指定すればCSVをExcelファイルとして保存することができます。
複数のファイルのフルパスを取得する(ドラッグandドロップ)
Option Explicit

Dim DetPathArray
Set GetPathArray=WScript.Arguments

Dim objFSO
Set objFSO=CreateObject("Scripting.FileSystemObject")

Dim pt,FileName
For Each pt in GetPathArray
  FileName=objFSO.GetFileName(pt)
  pt=InputBox("ファイル名" & FileName,"フルパス",pt)
Next
Set objFSO=Nothing
複数のファイル情報を取得したい場合はGetPathArray=WScript.Argumentsと配列にまとめて入れます。 For Eachで配列の中のファイルを順番に処理していきます。GetFileName(pt)でファイル名とパス情報を取得できます。
ファイル名をリネームする(ドラッグandドロップ)
Option Explicit
Call Main

Sub Main()
Dim fso
Set fso=CreateObject("Scripting.FileSystemObject")

Dim arg,f,newName
For Each arg In WScript.Arguments
  Set f=fso.GetFile(arg)
  newName=fso.GetBaseName(f.Name)&"_"& CreateDateTimeString(Now)&"."& fso.GetExtentionName(f.Name)
  f.Name=newName
Next
End Sub
例文では元のファイル名を取得し現在の日付をファイル名の後ろに追加して保存する処理を行っています。
余分なスタイルを消去してファイル容量を軽くする(値コピー時不具合対応)
Set objDoc="ファイル名"
For Each S In objDoc.styles
  If Not S.BuiltIn Then
    S.Delete
  End If
Next
vbsでExcelの値コピーをするとファイル容量が重くなる現象になることがあります。 そんなときは上記の手順で余分なスタイルデータを消しましょう。