VBA セル範囲の座標とサイズを取得するプロパティ

 VBA 基本技術カテゴリの記事ですよ~。
 今回は セル範囲の座標とサイズ を頂いてしまう方法を解説しますよ~。オートシェイプを作る場所やサイズを決めるときに重宝するプロパティですよ~。

セル範囲の座標とサイズを取得します

 セル範囲の位置と幅の情報を得るために Top, Left, Width, Height の 4 種類のプロパティが用意されています。たとえば C4:D5 に適用した場合は、それぞれ下の図のような値を取得するのです。

VBAセルの位置と幅の情報

選択範囲の位置とサイズを得るマクロ

 選択したセル範囲の位置とサイズの情報を取得する簡単なマクロを作ってみましょー。

 '選択範囲の位置とサイズを取得します

 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

 この関数を呼び出すときは

=CPOS(行, 列, 情報番号)

と記述します。情報番号はそれぞれ

1:left, 2:Top, 3:Width, 4:Height

に対応しています。たとえば

=CPOS(4,3,3)

とすれば、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 の範囲を選択してマクロを実行すると ...

 VBA選択した範囲に長方形を描くマクロ

 長方形ができましたね! ちなみに AddShapeメソッドは

Shapes.AddShape(図形の種類, Left, Top, Width, Height)

という記述で Shapesコレクションに新しい図形を追加しますけど、

Left, Top, Width, Height

の部分に選択範囲の位置と幅の情報を指定しているのです。他にも円とか矢印とか、好きな図形を描けるかので、色々試してくださいな~。それでは今回はこのへんで~。

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)