VBA(Microsoft Visual Basic for Applications)を使用して、Excelのグラフの横軸を一括して変更する方法をまとめました。
目次
- Excelのメニューに「開発」を表示する方法(VBAを初めて使用する方へ)
- 選択中のワークシート上にある複数のグラフの横軸をまとめて変更する
- 選択中のワークシート上にある全てのグラフの横軸をまとめて変更する
- 全てのワークシート内にある全てのグラフの横軸をまとめて変更する
- 全てのグラフシートの横軸をまとめて変更する
- まとめ
Excelのメニューに「開発」を表示する方法(VBAを初めて使用する方へ)
VBAを使用するために、Excelのメニューに「開発」を追加する方法をご説明します(すでに追加している方は読み飛ばしてください)。
メニューの「ファイル」から「オプション」を選択します。
すると、「Excelのオプション」が開きますので、「リボンのユーザー設定」を選択し、「開発」にチェックマークをつけて、「OK」ボタンを押します。
これにより、メニューに「開発」が追加されます。
VBAは「開発」メニューの「Visual Basic」から開くことができます。
マクロを追加するには、下図のように、マクロを追加したいブックのプロジェクトに「標準モジュール」を挿入します。
VBAのコードは、この挿入した「標準モジュール」に書き込みます。
作成したVBAのコードは、「開発」メニューの「マクロ」から実行できます。
選択中のワークシート上にある複数のグラフの横軸をまとめて変更する
選択中のワークシート上にある複数のグラフの横軸をまとめて変更するためのサンプルコードを示します。
Sub 選択中のワークシート上にある複数のグラフの横軸をまとめて変更()
Dim ChartObj As ChartObject
Dim majorUnit
Dim minorUnit
Dim maxRange
Dim minRange
Dim Response
Application.ScreenUpdating = False
On Error GoTo errorProc
minRange = InputBox("横軸の最小値を設定してください")
maxRange = InputBox("横軸の最大値を設定してください")
majorUnit = InputBox("横軸のメジャーユニットを設定してください")
minorUnit = InputBox("横軸のマイナーユニットを設定してください")
If Not IsNumeric(minRange) Or _
Not IsNumeric(maxRange) Or _
Not IsNumeric(minorUnit) Or _
Not IsNumeric(majorUnit) Then
Response = MsgBox("数値を入力してください。", vbOKOnly, "エラー")
GoTo errorProc
End If
If ActiveChart Is Nothing Then
' アクティブチャートがない場合(複数選択されている場合)
For Each ChartObj In Selection
With ChartObj.Chart
With .Axes(xlCategory)
.MinimumScale = minRange
.MaximumScale = maxRange
.majorUnit = majorUnit
.minorUnit = minorUnit
End With
End With
Next
Else
' アクティブチャートがある場合(1つしか選択されていない場合)
With ActiveChart.Axes(xlCategory)
.MinimumScale = minRange
.MaximumScale = maxRange
.majorUnit = majorUnit
.minorUnit = minorUnit
End With
End If
errorProc:
Application.ScreenUpdating = True
End Sub
<使い方>
Ctrlを押しながらグラフをクリックすることで、複数のグラフを選択します。この状態でマクロを実行します。
マクロを実行すると、ダイアログボックスが開かれますのでメッセージにしたがって、横軸の最小値、最大値、メジャーユニット、マイナーユニットを入力します。
それにより、グラフの横軸が変更されます。
数値以外が入力された場合はエラーメッセージを出力してマクロを終了します。
アクティブチャートの処理を分けることで、1つだけグラフが選択されている場合でも動作するようになっています。
このマクロは散布図のように、横軸に数値軸をもつグラフを対象にしています。
選択中のワークシート上にある全てのグラフの横軸をまとめて変更する
選択中のワークシート上にあるすべてのグラフの横軸を一括で変更するためのサンプルコードを示します。
Sub 選択中のワークシート上にある全てのグラフの横軸をまとめて変更()
Dim ChartObj As ChartObject
Dim majorUnit
Dim minorUnit
Dim maxRange
Dim minRange
Dim Response
Application.ScreenUpdating = False
On Error GoTo errorProc
minRange = InputBox("横軸の最小値を設定してください")
maxRange = InputBox("横軸の最大値を設定してください")
majorUnit = InputBox("横軸のメジャーユニットを設定してください")
minorUnit = InputBox("横軸のマイナーユニットを設定してください")
If Not IsNumeric(minRange) Or _
Not IsNumeric(maxRange) Or _
Not IsNumeric(minorUnit) Or _
Not IsNumeric(majorUnit) Then
Response = MsgBox("数値を入力してください。", vbOKOnly, "エラー")
GoTo errorProc
End If
For Each ChartObj In ActiveSheet.ChartObjects
With ChartObj.Chart
With .Axes(xlCategory)
.MinimumScale = minRange
.MaximumScale = maxRange
.majorUnit = majorUnit
.minorUnit = minorUnit
End With
End With
Next
errorProc:
Application.ScreenUpdating = True
End Sub
<使い方>
ワークシートを選択した状態でマクロを実行すると、ダイアログボックスが開かれますのでメッセージにしたがって、横軸の最小値、最大値、メジャーユニット、マイナーユニットを入力します。
それにより、グラフの横軸が変更されます。
数値以外が入力された場合はエラーメッセージを出力してマクロを終了します。
このマクロは散布図のように、横軸に数値軸をもつグラフを対象にしています。
全てのワークシート内にある全てのグラフの横軸をまとめて変更する
すべてのワークシート内にあるすべてのグラフの横軸を一括で変更するためのVBAのサンプルコードを示します。
Sub 全てのワークシート内にある全てのグラフの横軸をまとめて変更()
Dim i As Long
Dim pattern As String
Dim regex As Object
Dim ChartObj As ChartObject
'
Dim majorUnit
Dim minorUnit
Dim maxRange
Dim minRange
Application.ScreenUpdating = False
On Error GoTo errorProc
minRange = InputBox("横軸の最小値を設定してください")
maxRange = InputBox("横軸の最大値を設定してください")
majorUnit = InputBox("横軸のメジャーユニットを設定してください")
minorUnit = InputBox("横軸のマイナーユニットを設定してください")
If Not IsNumeric(minRange) Or _
Not IsNumeric(maxRange) Or _
Not IsNumeric(minorUnit) Or _
Not IsNumeric(majorUnit) Then
Response = MsgBox("数値を入力してください。", vbOKOnly, "エラー")
Exit Sub
End If
pattern = InputBox("変更するワークシートの名前を正規表現で指定ください", , "^.*$")
For Each Worksheet In Worksheets
Set regex = CreateObject("VBScript.RegExp")
With regex
.Global = True
.MultiLine = False
.IgnoreCase = True
.pattern = pattern
End With
If regex.Test(Worksheet.Name) Then
For Each ChartObj In Worksheet.ChartObjects
With ChartObj.Chart
.Axes(xlCategory).Select
.Axes(xlCategory).minorUnit = minorUnit
.Axes(xlCategory).majorUnit = majorUnit
.Axes(xlCategory).MinimumScale = minRange
.Axes(xlCategory).MaximumScale = maxRange
End With
Next
End If
Next
errorProc:
Application.ScreenUpdating = True
End Sub
<使い方>
マクロを実行すると、ダイアログボックスが開かれますのでメッセージにしたがって、横軸の最小値、最大値、メジャーユニット、マイナーユニットを入力します。数値以外が入力された場合はエラーメッセージを出力してマクロを終了します。
最後に、ワークシートの名前を正規表現で指定するダイアログボックスが開かれます。正規表現を指定すると、それにマッチする名前をもつワークシート上のすべてのグラフの横軸が変更されます。
デフォルトでは「^.*$」が指定されています。これは、すべてのワークシート上のグラフの横軸を変更することを意味します。
正規表現については、「VBA RegExp 正規表現」などのキーワードを使用して、Googleなどで検索すると情報が得られます。
このマクロは散布図のように、横軸に数値軸をもつグラフを対象にしています。
全てのグラフシートの横軸をまとめて変更する
すべてのグラフシートの横軸を一括で変更するためのVBAのサンプルコードを示します。
Sub 全てのグラフシートの横軸をまとめて変更()
Dim i As Long
Dim pattern As String
Dim regex As Object
'
Dim majorUnit
Dim minorUnit
Dim maxRange
Dim minRange
Application.ScreenUpdating = False
On Error GoTo errorProc
If Charts.Count = 0 Then Exit Sub
minRange = InputBox("横軸の最小値を設定してください")
maxRange = InputBox("横軸の最大値を設定してください")
majorUnit = InputBox("横軸のメジャーユニットを設定してください")
minorUnit = InputBox("横軸のマイナーユニットを設定してください")
If Not IsNumeric(minRange) Or _
Not IsNumeric(maxRange) Or _
Not IsNumeric(minorUnit) Or _
Not IsNumeric(majorUnit) Then
Response = MsgBox("数値を入力してください。", vbOKOnly, "エラー")
Exit Sub
End If
pattern = InputBox("変更するグラフシートの名前を正規表現で指定ください", , "^.*$")
For i = 1 To Application.Charts.Count
With Application.Charts(i)
Set regex = CreateObject("VBScript.RegExp")
With regex
.Global = True
.MultiLine = False
.IgnoreCase = True
.pattern = pattern
End With
If regex.Test(.Name) Then
.Axes(xlCategory).Select
.Axes(xlCategory).minorUnit = minorUnit
.Axes(xlCategory).majorUnit = majorUnit
.Axes(xlCategory).MinimumScale = minRange
.Axes(xlCategory).MaximumScale = maxRange
End If
End With
Next i
errorProc:
Application.ScreenUpdating = True
End Sub
<使い方>
マクロを実行すると、ダイアログボックスが開かれますのでメッセージにしたがって、横軸の最小値、最大値、メジャーユニット、マイナーユニットを入力します。数値以外が入力された場合はエラーメッセージを出力してマクロを終了します。
最後に、グラフシートの名前を正規表現で指定するダイアログボックスが開かれます。正規表現を指定すると、それにマッチする名前をもつグラフシートについて横軸が変更されます。
デフォルトでは「^.*$」が指定されています。これは、すべてのグラフシートについて横軸を変更することを意味します。
正規表現については、「VBA RegExp 正規表現」などのキーワードを使用して、Googleなどで検索すると情報が得られます。
このマクロは散布図のように、横軸に数値軸をもつグラフを対象にしています。
まとめ
VBAによりExcel上に作成したグラフの横軸を一括変更する方法を示しました。
同じフォーマットを使用して横軸の範囲が異なる大量のデータセットのグラフをExcelで作成するように指示を受けた場合に便利な場合があります。
参考になりましたら幸いです。