使用頻度が高い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)
言葉を覚えるには書くといいと聞くけれども、タイピングやらメモ程度でも効果があるのだろうか。
その都度ググってしまえばいいと思うのだけれども。