Excel操作(最終行取得 その1234)を一本化してみた
みんな大好き、Excel操作(最終行取得)。
わたしはいつも「そのnが何だっけ?」と迷います、、
同じように迷うかた向けの情報です。
nは特に拠り所となる序列が存在しないようです。
わたしは未だに覚えていません。
検索でヒットするこのページを読み返すことが多いです。
No.8 ワークシートの最終行、最終列を取得する
http://www.niji.or.jp/home/toru/notes/8.html
その1~4を1ライブラリにまとめてみました。
ノウハウのお裾分けです。
脳ミソの皴の節約家向けです。
最終行を取得するブロックをこのスクリプトに差し替えてみてください。
ベースはどれでも構いません。
その1~4をそれぞれ1行化して、順に並べただけです。
最終行を取得するブロックの差し替え用
見やすさ優先で、スペースを全角にしてあります。
適宜半角スペース×2等に置き換えて使ってください。
On Error Resume Next
'設定タブの表示順
調性調整のためのダミー
targetRow = !検索列!
startColumn = !開始行!'ボディ
With worksheet
SetUMSVariable $最終行1$, .UsedRange.Row + .UsedRange.Rows.Count - 1
SetUMSVariable $最終行2$, .Range(!検索列! & !開始行!).End(-4121).Row
SetUMSVariable $最終行3$, .Range(!検索列! & "1:" & !検索列! & .Rows.Count).Find("").Row - 1
SetUMSVariable $最終行4$, .Range(!検索列! & .Rows.Count).End(-4162).Row
End WithOn Error Goto 0
Set xlsApp = Nothing ’この行の前まで
設定メモ
- 検索列と開始行はオプション(不要なケースなら空欄でOK)
- 最終行1~4は、変数名の指定がマスト
仕様はベースライブラリに基づく
テスト結果
- その1~4用のExcelで、想定通りの結果が得られた
テスト内容
- C2:C4に文字列を入力
- 検索列C、開始行2で、最終行1~4の変数にそれぞれ4が格納された
- 概ねその1~4と同等に動く模様
用途
- とりあえず試して、意図通りに取得できた最終行nを採用
メリデメ
- ◎ パターン毎に1行
- ◎ 行数節約
- ◎ テストの残骸っぽいコードやコメントの断捨離
- ◎ スパゲティコードの解消
- ◎ オブジェクト変数をworkbookに一本化 → 4倍の処理でも1ライブラリと遜色ない所要時間
- ★ 「どれだっけ?」を考える時間の節約
- ▲ スクリプトの加工を要する
考慮漏れ、「わたしならこうする」、その他お気づきの点があれば、お知らせいただけると嬉しいです。