使用頻度が高いvbaコマンド

久しぶりにいじったらRubyとこんがらがってて、配列長取得(UBound)を忘れているなど・・・

最終行を取得

btmRow = Range("A65536").End(xlUp).Row

というのをよく見るけれども、65536っていうのが何となく気持ち悪かったり、空行が入ってたら止まってしまった方がいい時などは

btmRow = Range("A1").End(xlDown).Row

これは行分ループしたいときに使うことが多いのだけれども、たとえばシートをEach objectで回すなど、中途半端なオブジェクトも使える。
セル範囲をとりたいときは、意外とusedRangeもちゃんと領域を認識してくれる。


検索
RangeObjectに対して、

Set RangeObject = Columns("A").Find(What:=検索文字)

特定の列だけ(Columns)だったり、範囲(Range)だったり、シート全体(Cells)だったり。
注意点としては、オプションを指定しないと、その時点でのエクセルの条件(GUI画面で設定する方)が適用された気がする。
マクロ実行前に、大文字小文字区別がonだと、その条件で検索してしまう。
・LookAt{xlPart/xlWhole}:部分一致か完全一致か
・MatchCase{True/False}:大文字小文字区別するかしないか

Findは、検索結果で条件分けしないと、エラーの原因になる。

If RangeObject Is Nothing Then
  検索対象見つからず
Else
  検索対象みつかった
End If

FindNextやFindPreviousもよく使う。
こっちはRangeObjectを引数にして、もう一度Setする。

Set RangeObject = Columns("A").FindNext(RangeObject)

言葉を覚えるには書くといいと聞くけれども、タイピングやらメモ程度でも効果があるのだろうか。
その都度ググってしまえばいいと思うのだけれども。