例題として
Excelのデータ最終行までを処理するコードをVBSで実行してみます
下記、いつもの解説動画です※蛇足付きですがよろしく。
【VBS】VBSでExcelの定数xlDownなどを使う方法 例.End(xlDown).Rowで最終行【三流君】 - YouTube
www.youtube.com
最終行までループさせるコードでよく見かけるのが
Range("A1").End(xlDown).Row
などで、
データの入ってる最終行を求め、
ループで回す方法です。
Sub test最終行までループする() Dim i As Long Dim MaxRow As Long MaxRow = Range("A1").End(xlDown).Row For i = 2 To MaxRow MsgBox i & "行目" & Cells(i, "B") & " さん" Next i End Sub
これをVBSに移植すると
1.エラーの例
'errサンプル Option Explicit Dim ex, bk, sh, i Set ex = GetObject(,"Excel.Application") '開いているExcel Set bk = ex.Workbooks(1) 'ブック Set sh = bk.Worksheets(1) 'シートを指定 For i = 2 To sh.Range("A1").End(xlDown).Row 'シート最後までループ MsgBox i & "行目" & sh.Cells(i, "B") & " さん" Next
xlDownでエラーが発生する
VBScriptでExcelの定数xlDownが定義されていないため
2.定数を調べて直接書く方法
定数がエラーなので、
ExcelのVBA イミディエイトやネットでxlDownの値を調べて書く
? xlDown
- 4121
Option Explicit Dim ex, bk, sh, i Set ex = GetObject(,"Excel.Application") '開いているExcel Set bk = ex.Workbooks(1) 'ブック Set sh = bk.Worksheets(1) 'シートを指定 For i = 2 To sh.Range("A1").End(-4121).Row 'シート最後までループ MsgBox i & "行目" & sh.Cells(i, "B") & " さん" Next
みたいに、
sh.Range("A1").End(-4121).Row
と直接書く方法もあります。
3.定数をConstで定義する
sh.Range("A1").End(-4121).Row
これだと、後からソースを見た時に
.End(-4121)?ってなると思います。
※コードの意味が伝わりにくいです
そこで、頭で自分でxlDown=-4121を定義しておきます。
Option Explicit Const xlDown = -4121 '定数をConstで定義 Dim ex, bk, sh, i Set ex = GetObject(,"Excel.Application") '開いているExcel Set bk = ex.Workbooks(1) 'ブック Set sh = bk.Worksheets(1) 'シートを指定 For i = 2 To sh.Range("A1").End(xlDown).Row 'シート最後までループ MsgBox i & "行目" & sh.Cells(i, "B") & " さん" Next
ポイントは、
Const xlDown = -4121 '定数をConstで定義
として(書いて)、
For i = 2 To sh.Range("A1").End(xlDown).Row
と
使います。
Excel VBA を VBSに移植するときに
定数の探り方やエラーが出た時の参考となれば。。。
余談、元ネタ
ken3memo.hatenablog.com
先輩やネット上のコードは正しく理解して使いましょう?
コードは言語なので、書き手のクセや表現方法があるのかも?