複数のグラフの線書式(色、太さ)を一瞬で同時に変更する方法 ※Excel秘伝その2

Excel秘伝2サムネ

Excelで1つのグラフ、または複数のグラフ線の色を一気に変えたい!!と思ったことはないでしょうか?

例えば、4人家族の「体温」「血圧上」「血圧下」を日ごとにモニターするグラフがあったとします。グラフは3つあり、それぞれにに4つの系列があります。

データ作成

この記事で紹介するマクロを使えばこんなことができます。

この記事のマクロで出来ること
  • 複数のグラフのX軸、Y軸の条件を一度に変更できます
  • 複数のグラフの同一系列のON・OFFを一度にでできます
  • 複数のグラフの各系列の線の色・太さ・点線への変更を一度にできます
  • グラフのマーカー(点)のON・OFFを一度にできます


動画を見てもらった方がイメージが湧きやすいです。

時短の参考になればうれしいです。では本題へ。


~複数のグラフの書式を一気に変更する~

広告


グラフに固有名詞を付ける

マクロのコードでグラフを指定すべく、各グラフに固有名詞を付けます。

グラフを選択して、左上のウィンドウに入力し、Enterを押す

注意

Enterを押さないと反映されません

グラフ名

今回は下の通りの名称にしました。
①Taion
②KetHigh
③KetLow


マクロのコード

[1] 軸の条件を一括で変更するマクロ

  • X軸の最小値、最大値の変更
  • X軸の主目盛、補助目盛の変更
  • Y軸の最小値、最大値の変更
  • Y軸の主目盛、補助目盛の変更


軸の条件変更コード
Sub 軸変更()
' 軸の最大、最小を変更するマクロ '1つめのグラフ ActiveSheet.ChartObjects("Taion").Activate ActiveChart.Axes(xlCategory).MinimumScale = Range("U5").Value ActiveChart.Axes(xlCategory).MaximumScale = Range("V5").Value ActiveChart.Axes(xlCategory).MajorUnit = Range("W5").Value ActiveChart.Axes(xlCategory).MinorUnit = Range("X5").Value ActiveChart.Axes(xlValue).MinimumScale = Range("Y5").Value ActiveChart.Axes(xlValue).MaximumScale = Range("Z5").Value ActiveChart.Axes(xlValue).MajorUnit = Range("AA5").Value ActiveChart.Axes(xlValue).MinorUnit = Range("AB5").Value '2つめのグラフ ActiveSheet.ChartObjects("KetHigh").Activate ActiveChart.Axes(xlCategory).MinimumScale = Range("U6").Value ActiveChart.Axes(xlCategory).MaximumScale = Range("V6").Value ActiveChart.Axes(xlCategory).MajorUnit = Range("W6").Value ActiveChart.Axes(xlCategory).MinorUnit = Range("X6").Value ActiveChart.Axes(xlValue).MinimumScale = Range("Y6").Value ActiveChart.Axes(xlValue).MaximumScale = Range("Z6").Value ActiveChart.Axes(xlValue).MajorUnit = Range("AA6").Value ActiveChart.Axes(xlValue).MinorUnit = Range("AB6").Value '3つめのグラフ ActiveSheet.ChartObjects("KetLow").Activate ActiveChart.Axes(xlCategory).MinimumScale = Range("U7").Value ActiveChart.Axes(xlCategory).MaximumScale = Range("V7").Value ActiveChart.Axes(xlCategory).MajorUnit = Range("W7").Value ActiveChart.Axes(xlCategory).MinorUnit = Range("X7").Value ActiveChart.Axes(xlValue).MinimumScale = Range("Y7").Value ActiveChart.Axes(xlValue).MaximumScale = Range("Z7").Value ActiveChart.Axes(xlValue).MajorUnit = Range("AA7").Value ActiveChart.Axes(xlValue).MinorUnit = Range("AB7").Value Range("T29").Select
End Sub


コードの補足です。

Axes(xlCategory)はX軸の設定で、Scaleがレンジ(軸の範囲)です。
Unitは目盛で、Majorが主目盛 / Minorが補助目盛
です。補助目盛はデフォルトは非表示になっているかもです。

Axes(xlValue)はY軸の設定で、X軸と同じくScaleがレンジ(軸の範囲)です。
Unitは目盛で、Majorが主目盛 / Minorが補助目盛
です。補助目盛はデフォルトは非表示になっているかもです。

それぞれの値を反映させたいセルを指定します。(この例では図の色同士が該当します。)

マクロ1

2つめのグラフは、ChartObjects(“Taion”)の部分をChartObjects(“KetHigh”)に変更し、
該当するセルを変更します。(この例では行の数字を15⇒16にするだけ)

3つめのグラフは、ChartObjects(“Taion”)の部分をChartObjects(“KetLow”)に変更し、
該当するセルを変更します。(この例では行の数字を15⇒17にするだけ)


あとは、マクロのボタンを作ってマクロを登録しておきます。

ツールバーの 開発コントロール挿入ボタンを呼び出す。


画像やオートシェイプにマクロ登録もできます。形状や書式の自由度が高いのは、好きなオートシェイプに文字を書いて登録する方です。

ボタン

makuro

マクロ登録に関しては、こちらの記事が参考になると思います。


[2] グラフの線を一括でON・OFFするマクロ

  • 複数グラフの同系列の表示 / 非表示を一度でする
グラフの線を一括でON・OFFするコード
Sub ONOFF()
' ON/OFF切り替え      
Dim Cnt1 As Long '繰り返し変数設置 '1つ目のグラフ ActiveSheet.ChartObjects("Taion").Activate ActiveChart.ChartArea.Select For Cnt1 = 1 To 4 '繰り返し回数=要素数とする If Cells(Cnt1 + 14, 21).Value = "ON" Then ActiveChart.FullSeriesCollection(Cnt1).IsFiltered = False Else ActiveChart.FullSeriesCollection(Cnt1).IsFiltered = True End If Next Cnt1 '2つ目のグラフ ActiveSheet.ChartObjects("KetHigh").Activate ActiveChart.ChartArea.Select For Cnt1 = 1 To 4 If Cells(Cnt1 + 14, 21).Value = "ON" Then ActiveChart.FullSeriesCollection(Cnt1).IsFiltered = False Else ActiveChart.FullSeriesCollection(Cnt1).IsFiltered = True End If Next Cnt1 '3つ目のグラフ ActiveSheet.ChartObjects("KetLow").Activate ActiveChart.ChartArea.Select For Cnt1 = 1 To 4 If Cells(Cnt1 + 14, 21).Value = "ON" Then ActiveChart.FullSeriesCollection(Cnt1).IsFiltered = False Else ActiveChart.FullSeriesCollection(Cnt1).IsFiltered = True End If Next Cnt1 Range("W29").Select
End Sub


コードの補足です。

上ではセルの指定にRangeプロパティ(=Range(” “)の部分)を使いましたが、変数を使って対象を動かしたい時はCellsプロパティを使います。

Cells(数字1 , 数字2)で表記し、数字1には行番号:ここではU15~U18の『ON』or『OFF(空白)』を反映させたいので、Cnt1+14にしています。

変数Cnt1を要素数分1~4まで繰り返すので、15~18行目を指定する事になります。

数字2には列番号:ここではU列なので左から21番目なので21を入れます。

繰り返しのFor文で、Cnt1に1を代入⇒2を代入⇒と繰り返します。

マクロ2

If文を使って、U15に『ON』と記載があれば、グラフを表示するコードが書いてあります。

FullSeriesCollection( )はグラフ系列No.です。カッコの中にNo.を代入するのも変数Cnt1を使います。

2つ目のグラフは、ChartObjects(“Taion”)の部分をChartObjects(“KetHigh”)に変更するだけでOK

3つ目のグラフは、ChartObjects(“Taion”)の部分をChartObjects(“KetLow”)に変更するだけでOK


[3] グラフの線書式を一括で変更するマクロ

  • 複数グラフの同系列の線の色を変更
  • 複数グラフの同系列の線の太さを変更
  • 複数グラフの同系列の線を点線に変更
グラフの線書式を一括で変更するコード
Sub 書式変更()
'要素の色、太さ、点線の変更
Dim Syo As Long '変数定義 '1つめのグラフ ActiveSheet.ChartObjects("Taion").Activate For Syo = 1 To 4 '繰り返し回数=要素数とする '色変更 ActiveChart.FullSeriesCollection(Syo).Format.Line _ .ForeColor.SchemeColor = Cells(Syo + 14, 24).Value '太さ変更。空白なら線太を2 If Cells(Syo + 14, 25).Value = "" Then ActiveChart.FullSeriesCollection(Syo).Format _ .Line.Weight = 2 Else ActiveChart.FullSeriesCollection(Syo).Format _ .Line.Weight = Cells(Syo + 14, 25).Value End If 'dot適用 If Cells(Syo + 14, 26).Value = "d" Then ActiveChart.FullSeriesCollection(Syo).Format _ .Line.DashStyle = msoLineSysDash Else ActiveChart.FullSeriesCollection(Syo).Format _ .Line.DashStyle = msoLineSolid End If Next Syo '2つめのグラフ ActiveSheet.ChartObjects("KetHigh").Activate For Syo = 1 To 4 '繰り返し回数=要素数とする '色変更 ActiveChart.FullSeriesCollection(Syo).Format.Line _ .ForeColor.SchemeColor = Cells(Syo + 14, 24).Value '太さ変更。空白なら線太を2 If Cells(Syo + 14, 25).Value = "" Then ActiveChart.FullSeriesCollection(Syo).Format _ .Line.Weight = 2 Else ActiveChart.FullSeriesCollection(Syo).Format _ .Line.Weight = Cells(Syo + 14, 25).Value End If 'dot適用 If Cells(Syo + 14, 26).Value = "d" Then ActiveChart.FullSeriesCollection(Syo).Format _ .Line.DashStyle = msoLineSysDash Else ActiveChart.FullSeriesCollection(Syo).Format _ .Line.DashStyle = msoLineSolid End If Next Syo '3つめのグラフ ActiveSheet.ChartObjects("KetLow").Activate For Syo = 1 To 4 '繰り返し回数=要素数とする '色変更 ActiveChart.FullSeriesCollection(Syo).Format.Line _ .ForeColor.SchemeColor = Cells(Syo + 14, 24).Value '太さ変更。空白なら線太を2 If Cells(Syo + 14, 25).Value = "" Then ActiveChart.FullSeriesCollection(Syo).Format _ .Line.Weight = 2 Else ActiveChart.FullSeriesCollection(Syo).Format _ .Line.Weight = Cells(Syo + 14, 25).Value End If 'dot適用 If Cells(Syo + 14, 26).Value = "d" Then ActiveChart.FullSeriesCollection(Syo).Format _ .Line.DashStyle = msoLineSysDash Else ActiveChart.FullSeriesCollection(Syo).Format _ .Line.DashStyle = msoLineSolid End If Next Syo Range("Y29").Select
End Sub


コードの補足です。

コードの途中で改行するには

半角スペース+ _ でコードは1文のまま改行できます。(見やすくする時などに使用)

同じくCellsプロパティを使います。

マクロ3

■グラフ線の色変更には、ForeColor.SchemeColor = カラーNo. という式を使いました。X15の値をカラーNo.にしています。カラーNo.はこちらです。

SchemeColor


下の記事で紹介したColorIndexとは違うので注意です。

Outlook書式変更ショートカット Outlook(365)で便利なマクロ:文章のフォント(書式)を変更するショートカットキー作成


■グラフ線の太さ変更には、Format.Line.Weight = 太さNo. という式を使います。If文を使って、空白の時は太さ2指定にしています。空白でない時は、Y15の値が太さNo.になります。

■グラフ線を点線に変更するには、Format.Line.DashStyle = msoLineSysDash という式を使います。If文を使って、セルY列に『d』があれば点線化し、空白の時は実線(msoLineSolid)になる様に指定。

2つ目のグラフは、ChartObjects(“Taion”)の部分をChartObjects(“KetHigh”)に変更するだけでOK

3つ目のグラフは、ChartObjects(“Taion”)の部分をChartObjects(“KetLow”)に変更するだけでOK


[4] グラフのマーカー(点)を一括でON・OFFするマクロ

  • マーカーのON⇔OFFを一度に変更
マーカー(点)を一括でON・OFFするコード
Sub マーカー変更()
'ONOFFの変更
Dim Mar As Long '変数定義 '1つめのグラフ ActiveSheet.ChartObjects("Taion").Activate For Mar = 1 To 4 '繰り返し回数=要素数とする 'ONOFF変更 If Cells(Mar + 14, 27).Value = "ON" Then ActiveChart.FullSeriesCollection(Mar).MarkerStyle = -4105 Else ActiveChart.FullSeriesCollection(Mar).MarkerStyle = -4142 End If Next Mar '2つめのグラフ ActiveSheet.ChartObjects("KetHigh").Activate For Mar = 1 To 4 '繰り返し回数=要素数とする 'ONOFF変更 If Cells(Mar + 14, 27).Value = "ON" Then ActiveChart.FullSeriesCollection(Mar).MarkerStyle = -4105 Else ActiveChart.FullSeriesCollection(Mar).MarkerStyle = -4142 End If Next Mar '3つめのグラフ ActiveSheet.ChartObjects("KetLow").Activate For Mar = 1 To 4 '繰り返し回数=要素数とする 'ONOFF変更 If Cells(Mar + 14, 27).Value = "ON" Then ActiveChart.FullSeriesCollection(Mar).MarkerStyle = -4105 Else ActiveChart.FullSeriesCollection(Mar).MarkerStyle = -4142 End If Next Mar
Range("AA29").Select
End Sub


コードの補足です。

グラフ線のON⇔OFFと同じような内容です。

MarkerStyle = -4105 で表示
MarkerStyle = -4142 で非表示

という設定でできました。

[ad02]


動作確認の動画をもう一度

グラフが何個になっても、構文を増やして該当箇所を変更すればOKです。


記事内で紹介した関連リンク

【Excel秘伝】エクセルでセルの内容に連動して図を切り替えるワザ紹介

Excelでグラフの各要素のON/OFFをチェックボックスで操作する方法

Outlook(365)で便利なマクロ:文章のフォント(書式)を変更するショートカットキー作成

Youtubeの補足動画


おまけ

 

Excelテク集の目次は下の通り
(下のリンクから各項目に直接アクセスできます)

時短や快適さアップのテクニックが多くあります!!


最後まで見ていただき、ありがとうございました。


広告


広告

広告