Excel Tips by pPoy

トップへ←Top    VBAへVBA  VBA基礎へVBA 基礎  一般へ一般  

Macro 散布図にデータラベルをセットするマクロ
《XYグラフ》 (Excel2000,Excel2002,Excel2003)
Excel で散布図を作成した場合、指定した列(行) の値をデータラベルとしてセットすることは、標準の機能では出来ません。
1つずつ既存のラベルに値を入れていけば、一応できるのですが、要素数が多いと大変です。
以下は、マクロでラベルをセットする方法です。
≪準備≫
散布図

←このような散布図があります。

「参加家族」 列 (X軸) の隣の 「住所」 列の値を、
それぞれのマーカのラベルにセットしたいと思います。


以下のコードを標準モジュールに貼り付けてください。
この頁のTOPへTop
Sub setLabels()
On Error GoTo err_setLabels
'散布図にデータラベルをセットするマクロ
'X軸のデータ数とラベルの数は等しいこと
'Y軸のデータ系列は1つのみ 2010/08/28 pPoy
    Dim stRngX As String                'X軸のデータ範囲
    Dim mySRS As Object                 'グラフのデータ系列
    Dim rngL As Range                   'ラベルのデータ範囲
    Dim cntX As Long, cntL As Long
    Dim stMES As String
    Dim i As Long
    
    'X軸のデータ範囲文字列取得
    If ActiveChart Is Nothing Then
        MsgBox "グラフを1つ選択してください!", vbOKOnly
        Exit Sub
    Else
        Set mySRS = ActiveChart.SeriesCollection(1)
        stRngX = Split(mySRS.Formula, ",")(1)
        cntX = Range(stRngX).Cells.Count
    End If
    
    'ラベルのデータ範囲取得
    stMES = "ラベルのデータ範囲を選択してください。(見出し行は除外)"
    Set rngL = Application.InputBox(Prompt:=stMES, Type:=8)
    cntL = rngL.Cells.Count
    
    'チェック
    If cntX <> cntL Then
        stMES = "X軸のデータ数とラベルのデータ数が違います!"
        stMES = stMES & vbNewLine
        stMES = stMES & "最初からやり直してください。"
        MsgBox stMES, vbOKOnly
        Exit Sub
    End If
    
    'ラベルセット処理開始
    For i = 1 To cntX
        With mySRS.Points(i)
            'データが無い場合はスキップ
            On Error Resume Next
            .HasDataLabel = True
            .DataLabel.Text = rngL.Cells(i).Value
        End With
    Next i
    MsgBox "処理終了〜", vbOKOnly
    
exit_setLabels:
    Exit Sub
    
err_setLabels:
    Select Case Err.Number
        Case 424
            'InputBoxでキャンセルされた場合
            MsgBox "最初からやり直してください", vbOKOnly
            Err.Clear
        Case Else
            'その他のエラー
            MsgBox Err.Number & " - " & Err.Description
    End Select
    Resume exit_setLabels
End Sub
この頁のTOPへTop
≪使い方≫

マクロを動かす前に、シート若しくは Book のコピーを取ります。 コピーしたグラフでこのマクロを試してください。
使い方

まず、グラフを選択します。

その後で、メニューから 「ツール」−
「マクロ」−「マクロ」−「setLabels」 を実行します。

「ラベルのデータ範囲を選択してください。」
の入力ボックスが表示されます。

データラベルの範囲を選択して、「OK」 を押します。
(この例では、C5 〜 C13 を選択しています)

OK を押すと、一瞬でラベルが作成されます。
≪結果≫
実行結果

← 無事にデータラベルが作成されました。
この頁のTOPへTop
≪注意≫
  • ここで実行した結果は、元に戻せません。
    シート若しくは Book のコピーを取った後、コピーしたグラフでこのマクロを試してください。

  • このマクロは、XY グラフをひとつ選択してから実行してください。
    シート上に複数のグラフが存在する場合、選択されているグラフに対してのみ マクロが実行されます。
    グラフが選択されてない場合は処理が中止されます。

  • このマクロでは、Y軸の系列は1つのみの前提です。 複数の系列がある場合は、コードの修正が必要です。

  • このマクロでは、X軸のデータ範囲の数と、データラベルの範囲の数が等しいことが前提です。
    数が異なっている場合は、処理が中止されます。

  • データラベルの範囲を取得するために、「InputBox メソッド」 を使用しています。
    これは、「InputBox 関数」 とは異なり、セル範囲を取得することができます。

  • 一応エラー処理セクションを作ってありますが、それ以外のエラーがありそうな場合は追加してください。


この頁のTOPへTop
【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。
又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

Copyright(C) pPoy 2010