• ベストアンサー

エクセルの散布図にラベル(系列が2つ)

Wendy02の回答

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

訂正します。 2系列の意味を間違えて取っていました。 これでどうでしょう。 ただ、現状では、同じ値のところは、ラベルがダブリます。 それを修正するためには、一旦、データを確保しなければならないように考えていますが、手間が多そうな気がします。 '------------------------------------------- Sub AttachLabelsToPoints_J1()   '2系列以上にデータラベルを入れる   '変数の定義   Dim i As Long 'Longに替える   Dim j As Long   Dim ChartName As String   Dim xVals As String   Dim buf As String   Dim myChart As ChartObject      'プロシージャの実行中の画面を停止させる   'Application.ScreenUpdating = False      'オブジェクトがない場合は、マクロ中止   If ActiveSheet.ChartObjects.Count = 0 Then Exit Sub   Set myChart = ActiveSheet.ChartObjects(1)      With myChart     For j = 1 To .Chart.SeriesCollection.Count     'xVal に最初の数式をストックする     xVals = .Chart.SeriesCollection(j).Formula          'xVal から、範囲からデータを抜き出す     buf = Mid$(xVals, InStr(1, xVals, ",") + 1)     xVals = Left(buf, InStr(1, buf, ",") - 1)          'グラフに、それぞれのデータポイントにラベルをつける       For i = 1 To Range(xVals).Cells.Count         .Chart.SeriesCollection(j).Points(i).HasDataLabel = _         True         .Chart.SeriesCollection(j).Points(i).DataLabel.Text = _         Range(xVals).Offset(, -1).Cells(i, 1).Value                Next i       'フォントサイズ変更       .Chart.SeriesCollection(j).DataLabels.AutoScaleFont = False       .Chart.SeriesCollection(j).DataLabels.Font.Size = 9     Next j   End With End Sub

apfelringo
質問者

お礼

どうもありがとうございました。 無事ラベルを表示することができ、今までラベルがなく とても使いにくかった散布図がとても見やすく、便利になりました。 今回は比較的急ぎで必要だったのですが、 今後もっと勉強をして、皆さんのお手を煩わせないように 努力したいです。 2度にもわたるご回答、どうもありがとうございました。

関連するQ&A

  • エクセル2003(VBA)で散布図グラフの元データの範囲を可変にしたい

    エクセル2003の散布図グラフで複数の系列を表示しています。ところが データの量(行数)がすぐに変わりますので元データの範囲を可変したいのですが うまくいきません。 また、グラフ作成後、下記コードにてラベルの一括貼付けをしております。 下記に具体的なデータを記載しますので、どうかお知恵をお貸し下さい。 よろしくお願い致します。 ■現在 元データのプロパティ より Xの値:=Sheet1!$E$3:$E$324 Yの値:=Sheet1!$F$3:$F$324  ※本当はここで"Sheet1!$E$3:$E$65536"とSheet1!$F$3:$F$65536にすれば    データは取得できますが、下記マクロを実行すると当然オーバーフローします    要はここで存在するデータ範囲に都度変わっていくような事ができれば    それでも解決するかも? □使用しているマクロ Sub 全系列の一括ラベル表示() Dim Counter As Integer, ChartName As String, xVals As String Application.ScreenUpdating = False For i = 1 To ActiveChart.SeriesCollection.Count 'Store the formula for the first series in "xVals". xVals = ActiveChart.SeriesCollection(i).Formula '''''' 'ここでxvalsにデータ元が入ったままなのでそれを存在するデータ範囲に変わるようにしたいーーーー xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, Mid(Left(xVals, InStr(xVals, "!") - 1), 9))) xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1) Do While Left(xVals, 1) = "," xVals = Mid(xVals, 2) Loop For Counter = 1 To Range(xVals).Cells.Count If Range(xVals).Cells(Counter, 1).Offset(0, -1).Value = "" Then With ActiveChart.SeriesCollection(i).Points(Counter) .HasDataLabel = True .DataLabel.Text = "" End With Else With ActiveChart.SeriesCollection(i).Points(Counter) .HasDataLabel = True .DataLabel.Text = Range(xVals).Cells(Counter, 1).Offset(0, -1).Value End With End If Next Counter Next i End Sub

  • EXCEL2007 <VBAで散布図の系列の追加>

    EXCEL2007 <VBAで散布図の系列の追加> 標記の通り、VBAで散布図に新たに系列を追加したいのです。 たとえば現在、系列1があるとします。 そこで、横軸がA1:A10、縦軸がB1:B10のデータを追加するとします。     ActiveChart.SeriesCollection.Add Range("A1:B10") しかし、このマクロだと縦軸がA1:A10の系列2と縦軸がB1:B10の系列3ができてしまします。 そこで、ためしに     ActiveChart.SeriesCollection.Add Range("A1")   '仮に作る     With ActiveChart.SeriesCollection(2)       .XValues = Range("A1:A10")       .Values = Range("B1:B10")     End With とすると、「実行時エラー'1004'; アプリケーション定義またはオブジェクト定義のエラーです。」となります。 いろいろ検索したのですが、これと言ったのがみつかりません。 意図するマクロはどのようなものになるのでしょうか。 ご教示お願いします。

  • Excel VBAの散布図について

    Excel VBAで散布図を作ろうと考えています。 元のデータは添付した画像のものです。 左端にXの値があって、それ以降7列ごとに8枚の散布図を作成しようと考えております。 そこで、kを1~8まで動かし8種類の散布図を作成しようと考えているのですが、このマクロではk=1だけプログラムを回しただけで、一枚のグラフにすべての系列が載ってしまいます。 kを動かさずに、Cellの位置を指定して回した際にはうまくいったのですが、kを動かすようにしたところうまくいきません。 散布図を作る際に系列の数(私の場合7種類)を指定するにはどうしたらよいでしょうか。 どなたかご教授ください。 For k = 1 To 8 ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter ActiveChart.SeriesCollection(1).Name = Sheets("Voltammogram").Cells(10, -5 + 7 * k) ActiveChart.SeriesCollection(1).XValues = "=Voltammogram!$A$12:$A$250" ActiveChart.SeriesCollection(1).Values = Sheets("Voltammogram").Range(Cells(12, -5 + 7 * k), Cells(250, -5 + 7 * k)) ActiveChart.SeriesCollection(2).Name = Sheets("Voltammogram").Cells(10, -4 + 7 * k) ActiveChart.SeriesCollection(2).XValues = "=Voltammogram!$A$12:$A$250" ActiveChart.SeriesCollection(2).Values = Sheets("Voltammogram").Range(Cells(12, -4 + 7 * k), Cells(250, -4 + 7 * k)) 以降7列まで続きます。

  • 【EXCEL】表とグラフの連動、グラフのラベル設定

    EXCEL初心者です。関数やマクロ等全く分かりません…。 使用しているバージョンは2010です。 ・EXCELのSheet1に表( 添付したもの )、Sheet2に表の内容を元に散布図を作成したいです。 ・具体的には、  表の「情報1」=グラフのy軸、   表の「情報2」=グラフのx軸、   表の「番号」=xとyの交点  としたいです。  例えば、4行目のデータは以下のようにさせたいです。  x=300、 y=100、 300と100の交わった所に1と入れたいです。  これを5行目、6行目…と行いたいです。 ・また、表の内容を変えると、自動的にグラフにも変更内容が反映されるようにしたいです。 一応、自分で調べて行ったところ、グラフのラベル設定を↓こちらのサイトで http://www4.synapse.ne.jp/yone/excel2010/excel2010_graph_sanpu.html 行ってみたのですが、VBAにそのままサンプルコードを貼り付けたところ、 ラベルが、今回設定したい「番号」ではなく「名前」になってしまいます・・・。 ちなみに、貼り付けたサンプルコードは↓こちらです。 Sub AttachLabelsToPoints() 'Dimension variables. Dim Counter As Integer, ChartName As String, xVals As String ' Disable screen updating while the subroutine is run. Application.ScreenUpdating = False 'Store the formula for the first series in "xVals". xVals = ActiveChart.SeriesCollection(1).Formula 'Extract the range for the data from xVals. xVals = Mid(xVals, InStr(InStr(xVals, ","), xVals, _ Mid(Left(xVals, InStr(xVals, "!") - 1), 9))) xVals = Left(xVals, InStr(InStr(xVals, "!"), xVals, ",") - 1) Do While Left(xVals, 1) = "," xVals = Mid(xVals, 2) Loop 'Attach a label to each data point in the chart. For Counter = 1 To Range(xVals).Cells.Count ActiveChart.SeriesCollection(1).Points(Counter).HasDataLabel = _ True ActiveChart.SeriesCollection(1).Points(Counter).DataLabel.Text = _ Range(xVals).Cells(Counter, 1).Offset(0, -1).Value Next Counter End Sub これを貼り付けると、ラベルが「番号」ではなく「名前」になってしまいました。 上記サイトに 「  また、以下のようなコードでもラベルを付けることができました。 グラフをアクティブにして  VBA(マクロ)を実行します。 」 とあったのですが、当方マクロやEXCELはど素人で、 「 グラフをアクティブ?? 」状態で全くわかりませんでした…。 また、表の内容を書き換えたときに、グラフに自動的に反映されません…。 どうすれば求めているグラフのラベル設定ができ、また表の内容の書き換えたときグラフが連動 するようになってくれるのでしょうか・・・??

  • [VBA Excel] 2系列の散布図を書いてみるとおかしくなります・・・

    Excel 2007とVBAで数値解析をしています。計算結果のグラフを表示するための準備段階として、次のようなプログラムを組んで、2系列の散布図を書いて見ました。 Option Explicit Sub makechart()   Dim chart1 As ChartObject, wsh As Worksheet   Set wsh = Sheet1   Set chart1 = wsh.ChartObjects.Add( _   10, 20, 250, 200)   With chart1.Chart    .ChartType = xlLineStacked    .SeriesCollection.NewSeries    .SeriesCollection(1).XValues = _     wsh.Range("A1:A5")    .SeriesCollection(1).Values = _     wsh.Range("B1:B5")   End With   With chart1.Chart    .SeriesCollection.NewSeries    .SeriesCollection(2).XValues = _     wsh.Range("A1:A5")    .SeriesCollection(2).Values = _     wsh.Range("C1:C5")   End With End Sub --sheet1--   A B C ----------- 1| 1 2 3 2| 2 3 4 3| 3 4 5 4| 4 5 6 5| 5 6 7 系列1のグラフはB列 対 A列という意図通りのものになったのですが、系列2のグラフは、Y軸の値が、C列の値にB列の値を足したもの (1,2+3)、(2,3+4) ・・・ になってしまいました。系列2のグラフも純粋にC列 対 A列したいのですが、そのためにはどうすれば良いでしょうか。ご教授ください。

  • Excel2000でのVBAによる散布図の値の表示について

    Excel2000の散布図の機能を使って、 時系列データを折れ線で表示させています。 あるデータの値だけをラベルとして表示させたいのですが、うまくいきません。 例えば、tとYのデータ t,Y 1,70 2,40 3,60 4,30 5,100 6,10 7,30 8,80 9,20 10,90 があるとして散布図で時系列表示させてYの値が50以上のポイントだけそのYの値をラベルとして表示させたいのです。 過去の質問を参考にして以下のようなVBAのプログラムを作ったのですがうまくいきません。 Sub Label() Dim i As Integer ActiveSheet.ChartObjects(1).Activate ActiveChart.ApplyDataLabels For i = 1 To Range("B1", Range("B1").End(xlDown)).Cells.Count If ActiveSheet.Cells(i, 2).Value > 50 Then ActiveChart.SeriesCollection(1).Points(i).DataLabel.Text = ActiveSheet.Cells(i, 2).Value End If Next i End Sub 一つ一つのポイントの値をグラフ上で消去したり入力するのは非常に大変なので、うまい方法がないか考えているところです。 今、Excel2000を使っています。 どなたか分かる方がおられましたら教えてください。 よろしくお願い致します。

  • excel2010 マクロでの散布図作成

    excel2010で、ログを整理して複数のグラフを自動作成するマクロを作成しています 散布図の作成手順を記録した後、変数を当てなおしマクロを走らせると記録時と異なる挙動を示し、記録時にはひとつしか作成しなかった系列が25個くらい作成されました 下記マクロでおかしなところがあればご指摘ください ------------------------------ sheetname2 = ActiveSheet.Name ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterLinesNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='" & sheetname2 & "'!$E$1" ActiveChart.SeriesCollection(1).XValues = "='" & sheetname2 & "'!$A$2:$A$" & y3 ActiveChart.SeriesCollection(1).Values = "='" & sheetname2 & "'!$E$2:$E$" & y3 ------------------------------- 作りたいグラフ:散布図 系列 「アクティブシート」のセルE1 x軸  「アクティブシート」のセルA2~A「y3」 y軸  「アクティブシート」のセルE2~E「y3」 なお、シート名を固定すると色々と問題があるため、変数としてあります また、変数y3は別途取得してありますが、省略いたします

  • コピペで1つにまとめた散布図の系列の指定方法を教えてください。(Excel2003)

    コピペで1つにまとめた散布図の系列の指定方法を教えてください。(Excel2003) 気温を横軸、降水量を縦軸とし、1月と2月の散布図を作りました。 A列 1月気温(31データ) B列 1月降水量(31データ) C列 2月気温(28データ) D列 2月降水量(28データ) 2月のグラフ(C,D列)をコピーして1月(A,B列)のグラフに貼りつけ、1枚のグラフに2系列のデータがある状況です。 ここで、2月の降水量の系列を指定する方法を教えてください。 2月のデータの書式を変更したいのですが、 ActiveChart.SeriesCollection(2).Select としても、なぜか1月の系列が選択されてしまい、うまくいきません。 よろしくお願いします。

  • Excelマクロでグラフ作成

    現在、Excelのマクロでグラフを作成しようとしていますが、データ範囲の指定で悩んでいます。 マクロはド素人で右も左もわからない状態から、なんとなく雰囲気だけわかってきたような感じです。 とあるHPをそのまま貼り付け用シートにコピペして、そこからデータ抽出用シートにデータを抽出して蓄積していく形にしています。 品名が複数あるので、オートフィルタを使用してソートするために始点をどう決めるのかがわからないのと、データがどんどん蓄積していくために終点もどう決めたらいいのかわかりません。 「データ抽出用シート」のデータ形式は、 18行目にA:品目 B:最低値 C:平均値 D:最高値 G:日付 19行以降にデータ という形になっています。 とりあえず、通常のマクロを記録する方法でマクロの骨組みだけ作ってから細部をいじろうとしております。 データの範囲を指定する部分だけコピペしますので、ここをどういじったらいいのかご教授願います。 とある品目を指定してオートフィルタをかけた後に、グラフ作成手順のマクロを記録したら、こんな感じになりました。 Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("データ抽出用シート").Range("L17") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(1).Values = "=データ抽出用シート!R19C2:R366C2" ActiveChart.SeriesCollection(1).Name = "=データ抽出用シート!R18C2" ActiveChart.SeriesCollection(2).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(2).Values = "=データ抽出用シート!R19C3:R366C3" ActiveChart.SeriesCollection(2).Name = "=データ抽出用シート!R18C3" ActiveChart.SeriesCollection(3).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(3).Values = "=データ抽出用シート!R19C4:R366C4" ActiveChart.SeriesCollection(3).Name = "=データ抽出用シート!R18C4" ActiveChart.Location Where:=xlLocationAsObject, Name:="データ抽出用シート" 宜しくお願いします。

  • Excel VBA グラフ作成のときのエラー

    VBA初心者です。Excel2003を使っています。 Sheet1に作りたいグラフがあります。 データは下記のとおりです。 ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")のところで、「実行時エラー13 型が一致しません」とエラーがでます。 不思議なのは、昨日は動いていたのです。 なぜ、エラーが出るようになったのかわかりません。 ご教授よろしくお願いします。 A B 1 a 1 2 2 3 3 4 4 5 5 6 b 6 7 7 8 8 9 9 10 10 11 c 11 12 12 13 13 14 14 15 15 Sub test() Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To Wrow If Worksheets("sheet1").Cells(i, "A").Value = "a" Then a_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then b_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then c_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then d_data = Worksheets("sheet1").Cells(i, "A").Row End If Next Sheets("sheet1").Select Range(Cells(a_data, "B"), Cells(b_data, "B")).Select ActiveSheet.ChartObjects.Add(30, 10, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(a_data, "B"), Cells(b_data - 1, "B")), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" Sheets("sheet1").Select ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A") ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(c_data, "A") End Sub