ExcelVBAでシェイプのテキストや色をリストから選んだものに変更する
めちゃめちゃニッチな内容だと思うんですけど、リストの参照元のセルと同じ色合いで図形の色を変更するというものを作る機会があったので履歴メモみたいな気持ちで書き残しておきます。
準備
B2~B6セルに、リストの参照元になる範囲があるとします。ここでフォント色と背景色をそれぞれ好きなものにしておくと、ここを参照してシェイプの色が変わります。その後、D2セルに「データ」→「データの入力規則」で、この範囲をリストとして設定します。
シェイプ(図形)の名称は、選択して左上の部分で確認、変更できます。デフォルトでは半角スペースが混ざっていたりするのでご注意ください。
コード
「セルが変更されたら」というイベントプロシージャを使うので、標準モジュールではなく、上記の諸々が置かれたシートモジュールへ書きます。コードは以下です。
Private Sub Worksheet_Change(ByVal Target As Range) 'D2セルが変更されたときのみ動く If Target.Address(RowAbsolute:=False, ColumnAbsolute:=False) = "D2" Then Dim tgtShape As Shape: Set tgtShape = Shapes("長方形") 'シェイプを指定 Dim refRange As Range: Set refRange = Range("B2:B6").Find(Target.Value) '参照セルを検索 '指定されたシェイプに対して変更 With tgtShape .TextFrame2.TextRange.Text = Target.Value 'テキスト .TextFrame.Characters.Font.Color = refRange.Font.Color 'フォント色 .Fill.ForeColor.RGB = refRange.Interior.Color '背景色 End With End If End Sub
6行目で、選択された内容がどのセルか検索しています。ただこの方法はただのテキスト検索なので、同じテキストで違う色、ということをしたい場合はもうちょっとテコ入れが必要です。
動作
これで、D2セルの内容を変更すると、
シェイプのテキスト・色・背景色が、参照されたセルと同じものになります。
以上です! 今回はかんたんに全部アクティブシートで書きましたが、参照セル範囲を別シートに設定するときなどは明示的にシートを指定する必要があります。
ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。