エクセル:散布図のデータラベルをまとめて付けるマクロ

散布図のプロットに名前を付けたいことがよくある。
例えば、経済力が強い地域ほど人口増加率が高くて高齢化率が低いんじゃないか、と思ったとする。
なんとなれば、経済力が強いなら就職しやすいだろうから若い人が集まってくるだろう。だから人口も増えるし、高齢化率も低くなる。すると、東京など大都会は高齢化率が低くて人口増加率が高く、地方に行くほど高齢化率が高くて人口増加率は低くなるんじゃないか。
まあ、仮にこんな風に思ったとして、それで高齢化率と人口増加率の都道府県別の統計を利用してグラフを描いてみようとしたとする。で、エクセルに入れると、すぐに散布図が描ける。
47個のプロットがグラフに並んで、なんとなくもっともらしい絵ができるが、どの点が何県かが分からない。
それで、ラベルを付けようとすると、エクセルのオプションからは簡単にできないことになっている。数値は表示できるのだが、任意のテキストを入れようとすると、いちいち手で修正しないといけないのだ。
 
いくらなんでもばかばかしいので、他の人が作ってくれていたマクロを少し改造して使っているのだけれど、それをメモ代わりに書いておく。誰かの役に立てば光栄だけど、本当はとっくにエクセルに装備されていて知らないだけだったら恥ずかしいな。

Sub 散布図ラベル名変更by系列単位()
'データ系列にデータラベルを追加する(内容を書き換える)。
'データ系列を一つだけ選択した状態で実行する。
' ラベルの書式などは、後で整えてください。
' 骨組コードを参照したページ:「Excelファンクラブ」の Q&A
' ハンドルネーム f さんの回答
' http://cgi.fuji.ne.jp/~fj2094/cgi-bin3/wwwlng.cgi?print+200112/01120019.txt
' を改造して、データの個数を可変にするなどした。

    If MsgBox("ラベルを追加するデータ系列をアクティブにしていますか。", vbYesNo) = vbNo Then
        MsgBox ("先にデータ系列を選択してから実行してください。")
        Exit Sub
    End If
    
    If TypeName(Selection) <> "Series" Then
        MsgBox "データ系列が選択されていません。先にデータ系列を選択してから実行してください。", vbCritical
        Exit Sub
    End If
    
    Dim cnt As Long
    Dim lab As Range
    Dim answer As Long
    Dim j As Long
    
    Set lab = Application.InputBox(prompt:="データラベルの範囲を選択:", _
        Title:="出力先", Type:=8)
    
    ' データの個数を数えます。
    cnt = Selection.Points.Count
    If lab.Count <> cnt Then
        MsgBox "データの個数が合いません。"
        Exit Sub
    End If
    
    With Selection                                          '選択している系列に
       For j = 1 To cnt                                     'ラベルの個数はデータの数だけ
            With .Points(j)
                If lab.Cells(j).Value <> "" Then            'ラベル名データがないポイントにはラベルを付けない
                    .HasDataLabel = True                    'ラベル名データがあるポイントにはラベルを付けて
                    .DataLabel.Text = lab.Cells(j).Value    'ラベルにラベル名データをセットする
                Else
                    .HasDataLabel = False
                End If
            End With
       Next j
    End With

End Sub

追記:簡単な使い方を記しておく。サンプルはバージョン2007から。

  1. Excelを起動して、Visual Basic Editor を立ち上げる(ショートカットキー:Alt+F11)。
●まず、マクロを使う準備をする。
  1. 編集中のブックに「標準モジュール」を追加する(マクロを編集実行するために必要)
    1. プロジェクトウィンドウにある Microsoft Excel Objects の Sheet1(Sheet1)を右クリック
    2. 「挿入」→「標準モジュール」をクリック
    3. 「標準モジュール」が追加される

  1. サンプルマクロをコピーする。
    1. 「標準モジュール」の「Module1」に上記のサンプルを丸ごとコピー・ペーストする。


これでマクロを使う準備ができた。

●次に、散布図グラフを作る。

下図のようなグラフと表を作る。データの出所は下記の通り。

なお、図の期間は、人口増減率:2010年10月〜11年9月、高齢化率(65歳以上人口比率):2011年となっている。
※ちなみに、転居に伴う人口増減が高齢化率と関係が深いだろうという予想から、社会増減率を使った。
※震災の影響で福島県の値が特異になっているのでグラフから除き、縦軸横軸の範囲を調整している。

●サンプルマクロを使ってラベルを付ける。
  1. グラフ上で、ラベルを付けたいデータ系列を選択する(プロットをクリックする)。
  2. Visual Basic Editor からマクロを実行する(VBE上の実行ボタンをクリックするかF5を押す)。
  3. 「データラベルの範囲を選択」で、図の通り、「全国」から「沖縄県」までを選択する。

  1. 「データラベルの範囲を選択」で「OK」をクリックすると、各プロットにラベルが追加される。