ExcelVBAでシェイプのテキストや色をリストから選んだものに変更する

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セルの内容を変更すると、

シェイプのテキスト・色・背景色が、参照されたセルと同じものになります。

以上です! 今回はかんたんに全部アクティブシートで書きましたが、参照セル範囲を別シートに設定するときなどは明示的にシートを指定する必要があります。

公開日:2018/11/26

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。