DrawRectangleRound|角が丸い長方形を作図する
- yuji fukami
- 3 日前
- 読了時間: 3分

この部品でできること
DrawRectangleRound は、指定した座標とサイズで、角が丸い長方形(msoShapeRoundedRectangle)をシート上に自動で作図するExcel VBAの汎用プロシージャです。
左上の座標と幅・高さを渡すだけで、角丸の長方形を1つ作図する
幅・高さにマイナス値を渡した場合でも、基準点がどの頂点になるかを自動で判定して正しい位置に作図する
作図したシェイプ(Shapeオブジェクト)を戻り値で受け取れるので、続けて色や文字を設定できる
使いどころ
クリックすると処理を実行する「ボタン」を、VBAコードだけで自動的に並べて作図したいとき
セルを選択したタイミングで、その近くに操作用のボタンを動的に表示したいとき(EventShowSpinButton_MultiやEventSelectChangeUpDownRowがこの用途で使っています)
ボタンの数や位置をループ処理で動的に変えたいため、あらかじめ図形を手作業で用意しておけないとき
コード
使い方・引数
引数は5つです。Sheetだけ省略可能です。
Left(Double)・・・基準点のX座標
Top(Double)・・・基準点のY座標
Width(Double)・・・幅。マイナス値も指定可能
Height(Double)・・・高さ。マイナス値も指定可能
[Sheet](Worksheet)・・・作図先のシート。省略時はActiveSheet
呼び出し例は次のとおりです。
Width・Heightにマイナス値を渡すと、指定した座標を「右下」「右上」「左下」の基準点として扱い、そこから正しい向きに作図します。例えば DrawRectangleRound(200, 200, -80, -30) なら、(200, 200) を右下の角として、そこから左上方向に幅80・高さ30の長方形を作図します。
依存プロシージャ
このコードは自作の依存プロシージャを持たない、自己完結した部品です。上のコードブロックをそのまま標準モジュールに貼り付ければ動作します。
応用・注意点
AddShape は本来、Left・Top・Width・Heightをすべて左上基準・正の値で渡す前提のメソッドです。DrawRectangleRound では、幅・高さにマイナス値が渡された場合に「基準点がどの頂点にあたるか」を4パターンに分けて座標を補正してからAddShapeを呼んでいます。
この設計にしているのは、呼び出し側で「対象セルの右上を基準にボタンを並べたい」「左下を基準にしたい」といったケースを、呼び出し側でいちいち座標計算をせずに済ませるためです。例えばEventShowSpinButton_Multiでは、選択セルの右上・左下のどちらを基準にボタンを並べるかを引数で切り替えられるようにしていますが、これもDrawRectangleRoundが基準点の違いを吸収してくれるおかげで、呼び出し側のコードがシンプルになっています。
作図した図形は既定でグレー系の塗り・黒縁になります。色や文字を設定したい場合は、戻り値のShapeに対して.Fill.ForeColor.RGBや.TextFrame2.TextRangeを続けて設定してください。
まとめ
DrawRectangleRound は、座標とサイズを渡すだけで角丸長方形を自動作図できる汎用プロシージャです。基準点がどの頂点であっても正しい位置に作図できるため、セルの右上・左下といった相対位置を基準にボタンを動的に並べたい処理の土台として使えます。

