2016-02-10
ExcelVBA覚書 Resize
モノを整理するのにモノを買う・・・
という、断捨離しているはずなのにモノを増やす、愚かしいことをやってしまった。
いや、何にせよ、今のままじゃイカン!と、虚無感たっぷりに自分に活を入れつつ。
ExcelのRangeオブジェクトのメソッドにあるResize。起点セルと行列数を指定して範囲指定するのに使っているようだ。
こんなメソッドがあるとは全く知らなかったが、ネットサーフィンしてたらたまたま見つけたので試してみる。
参照サイト:Range,Cells」と「Resize」のセル範囲指定を比べてみる
パターン1:ごくごく一般的な範囲指定
With ThisWorkbook.Worksheets(1) .Range("C2:E4").Select End With
パターン2:一般的なはずな範囲指定
With ThisWorkbook.Worksheets(1) .Range(.Cells(2, 3), .Cells(4, 5)).Select End With
パターン3:「Resize使って同じことしてみるよ」な範囲指定
With ThisWorkbook.Worksheets(1) .Cells(2,3).Resize(3,3).Select End With
パターン4:「Offset使って同じことしてみるよ」な範囲指定
With ThisWorkbook.Worksheets(1) .Range(.Cells(2,3),.Cells(2,3).Offset(3,3)).Select End With
パターン1から4まで、すべて同じ範囲が指定される。(つまり、セルC2~E4)
なるほど、少なくともパターン4よりは、パターン3の方がきれいだ。
パターン2と3、どちらを使うかは、周辺のロジック次第。
なお、参照サイトには「Rangeが参照しているシートがアクティブになっていないとエラーになる」と書いてあるが、実はどのメソッドでも同じ。Selectメソッド自体、アクティブシート上にでないと動かないので、ResizeやOffsetとは関係がないと思う。