TECHNOLOGY

VBAでExcel上の複数のグラフの横軸をまとめて変更する方法

VBA(Microsoft Visual Basic for Applications)を使用して、Excelのグラフの横軸を一括して変更する方法をまとめました。

目次

  1. Excelのメニューに「開発」を表示する方法(VBAを初めて使用する方へ)
  2. 選択中のワークシート上にある複数のグラフの横軸をまとめて変更する
  3. 選択中のワークシート上にある全てのグラフの横軸をまとめて変更する
  4. 全てのワークシート内にある全てのグラフの横軸をまとめて変更する
  5. 全てのグラフシートの横軸をまとめて変更する
  6. まとめ

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で作成するように指示を受けた場合に便利な場合があります。

参考になりましたら幸いです。

-TECHNOLOGY
-,