目次
概要
本記事では、ワークシート上の図形(ボタン)をクリックしたときに、その図形自身の外枠線の色だけを変更する、最小構成の Excel VBA をご紹介いたします。グラフや系列など、他要素には一切影響を与えません。色は Windows の「色の選択」ダイアログから任意に指定できます。
前提条件
- Microsoft 365 版 Excel を使用していること。
- 図形(四角形、丸、アイコンなど)をシート上に配置し、後述のマクロを割り当てられること。
- 32bit/64bit いずれの Excel でも動作するように実装しています。
使い方
- ワークシートに図形を一つ配置します。
- 図形を右クリックし、「マクロの登録」から後述の
ChangeCallerShapeOutlineColorを割り当てます。 - 図形をクリックすると色選択ダイアログが開き、選択した色でその図形自身の外枠線の色だけが変更されます。
コード全文(必要最低限)
以下のコードを標準モジュールに貼り付けてご利用ください。機能は「クリックした図形の外枠線色を変更する」のみです。
Option Explicit
'==============================
' 色選択ダイアログ(32/64bit 対応)
'==============================
#If VBA7 Then
Private Type CHOOSECOLOR
lStructSize As Long
hwndOwner As LongPtr
hInstance As LongPtr
rgbResult As Long
lpCustColors As LongPtr
Flags As Long
lCustData As LongPtr
lpfnHook As LongPtr
lpTemplateName As LongPtr
End Type
Private Declare PtrSafe Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" ( _
ByRef pChoosecolor As CHOOSECOLOR) As Long
#Else
Private Type CHOOSECOLOR
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As Long
Flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Private Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" ( _
ByRef pChoosecolor As CHOOSECOLOR) As Long
#End If
Private Const CC_RGBINIT As Long = &H1&
Private Const CC_FULLOPEN As Long = &H2&
' 色選択ダイアログを表示し、選んだ RGB を返す。キャンセル時は -1。
Private Function ShowColorDialog(Optional ByVal DefaultColor As Long = 0) As Long
Dim cc As CHOOSECOLOR
#If VBA7 Then
Dim aCust(0 To 15) As Long ' 16 個のカスタムカラー領域
#Else
Dim CustColors As String
#End If
With cc
.lStructSize = Len(cc)
.hwndOwner = Application.Hwnd
.Flags = CC_RGBINIT Or CC_FULLOPEN
.rgbResult = DefaultColor
#If VBA7 Then
.lpCustColors = VarPtr(aCust(0))
#Else
CustColors = String$(16 * 4, vbNullChar)
.lpCustColors = CustColors
#End If
End With
If ChooseColor(cc) <> 0 Then
ShowColorDialog = cc.rgbResult
Else
ShowColorDialog = -1
End If
End Function
'==============================
' クリックした図形(Application.Caller)の外枠線色だけを変更
'==============================
Public Sub ChangeCallerShapeOutlineColor()
Dim ws As Worksheet
Dim shp As Shape
Dim clr As Long
Set ws = ActiveSheet
' 色を選択(キャンセル時は終了)
clr = ShowColorDialog
If clr = -1 Then Exit Sub
' 実行元が図形であることを前提に外枠線色を設定
On Error Resume Next
Set shp = ws.Shapes(Application.Caller)
If Not shp Is Nothing Then
shp.Line.Visible = msoTrue
shp.Line.ForeColor.RGB = clr
End If
On Error GoTo 0
End Sub
実装上の注意点
- 本マクロは「図形に割り当てて、図形をクリックして実行する」前提です。ショートカットキー実行など、図形以外からの実行では
Application.Callerが図形名を返さない場合があります。 - 図形の外枠線が非表示になっている場合でも、
Visibleを有効化して色を適用します。太さや線種は既存設定のままです。必要であれば、shp.Line.Weight(太さ)やshp.Line.DashStyle(実線・点線など)を追加で設定してください。 - 既存の他マクロやイベントと併用する際は、同じ図形に複数の操作を行わないよう設計を整理してください。
まとめ
最小構成のコードで、クリックした図形自身の外枠線色のみを変更する手順をご説明いたしました。外観の統一や、ユーザーに色選択を委ねたい場面で有用です。必要に応じて、線の太さや塗りつぶし色の変更処理を追加し、用途に合わせて拡張してご活用ください。
