VBA 基本技術カテゴリの記事ですよ~。
今回は セル範囲の座標とサイズ を頂いてしまう方法を解説しますよ~。オートシェイプを作る場所やサイズを決めるときに重宝するプロパティですよ~。
セル範囲の座標とサイズを取得します
セル範囲の位置と幅の情報を得るために Top, Left, Width, Height の 4 種類のプロパティが用意されています。たとえば C4:D5 に適用した場合は、それぞれ下の図のような値を取得するのです。
選択範囲の位置とサイズを得るマクロ
選択したセル範囲の位置とサイズの情報を取得する簡単なマクロを作ってみましょー。
Sub RangePosition()
Dim cleft As Double, ctop As Double
Dim cheight As Double, cwidth As Double
With Selection
cleft = .Left
ctop = .Top
cwidth = .Width
cheight = .Height
End With
Debug.Print cleft; ctop; cwidth; cheight
End Sub
たとえば、上図のような状況で C4:D5 を選択してマクロを実行するとイミディエイトウィンドウに 96, 54, 96, 36 のような数字が並びます(もちろん開いているシートの行幅や列幅によって出力される値は異なります)。
単独セルの位置と幅の情報をとる CPOS関数
Width とか Height とか書くのが面倒くさいというような人のために、数字を指定して必要な情報をとるユーザー定義関数もつくっておきましたよ。
Function CPOS(y As Integer, x As Integer, n As Integer) As Double
Select Case n
Case 1
CPOS = Cells(y, x).Left
Case 2
CPOS = Cells(y, x).Top
Case 3
CPOS = Cells(y, x).Width
Case 4
CPOS = Cells(y, x).Height
End Select
End Function
この関数を呼び出すときは
と記述します。情報番号はそれぞれ
に対応しています。たとえば
とすれば、C4セルの幅の値を取ってくれます。
選択範囲に長方形を描くマクロ
マウスで好きなセル範囲を選択して、そこにぴったりはまる長方形を作成するマクロを載せておきますよ。これはとっても便利ねー。
Sub MakeRectangle()
Dim p1 As Single, p2 As Single
Dim s1 As Single, s2 As Single
With Selection
p1 = .Left
p2 = .Top
s1 = .Width
s2 = .Height
End With
ActiveSheet.Shapes.AddShape(msoShapeRectangle, p1, p2, s1, s2) _
.Fill.Visible = False
End Sub
たとえば次のように B3:D4 の範囲を選択してマクロを実行すると ...
長方形ができましたね! ちなみに AddShapeメソッドは
という記述で Shapesコレクションに新しい図形を追加しますけど、
の部分に選択範囲の位置と幅の情報を指定しているのです。他にも円とか矢印とか、好きな図形を描けるので色々試してくださいな~。それでは今回はこのへんで~。 ≫ VBA の技術