• ベストアンサー

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を使っています。 どなたか分かる方がおられましたら教えてください。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

意味が違うかも知れませんが、、、こんな感じ?(Excel97で試してます) Sub Test() Dim i As Long, ch As Chart, ws As Worksheet Set ws = ActiveSheet Set ch = ws.ChartObjects(1) ch.ApplyDataLabels  For i = 1 To ws.Range("B1").End(xlDown).Row   If ws.Cells(i, 2).Value > 50 Then     ch.SeriesCollection(1).Points(i).DataLabel.Text = ws.Cells(i, 2).Value   Else     ch.SeriesCollection(1).Points(i).DataLabel.Text = ""   End If  Next i End Sub

webster
質問者

お礼

ご回答ありがとうございました。 VBAは初心者なので非常に参考になりました。

その他の回答 (1)

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

こんばんは。 一応、自分自身でやってみましたが、papayukaさんと考え方は同じでした。 それから、マクロでChartを指定するときは、ChartObjectsのChartクラスだと思いますが……。 なお、一番上は、タイトル行として、2行目からにしました。 SeriesCollection(1).Pointsと、セルの行数を共有して使うのは、ちょっとややこしいです。本来は、For Each ~In のほうが分りやすいかもしれません。 Sub Labe3()   Dim i As Integer   With ActiveSheet.ChartObjects(1)    .Chart.ApplyDataLabels    For i = 1 To Range("B2", Range("B2").End(xlDown)).Cells.Count      If ActiveSheet.Cells(i + 1, 2).Value > 50 Then       .Chart.SeriesCollection(1).Points(i).DataLabel.Text = _       ActiveSheet.Cells(i + 1, 2).Value       Else       .Chart.SeriesCollection(1).Points(i).DataLabel.Text = ""      End If    Next i   End With End Sub

webster
質問者

お礼

ご回答ありがとうございました。 VBAは初心者なので非常に参考になりました。

関連するQ&A

  • 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列まで続きます。

  • VBAで散布図を作成したのですが・・・

    VBAで散布図を作成したいのですがうまくいかないで困っています。 この散布図はA行とB行をそれぞれ軸として指定しているのですがうまくX軸、Y軸に指定されず2本のグラフが表示されてしまいます。 また範囲指定をC1を変数としてA1からB○まで取りたいのですが最初の範囲指定はうまくいったのですが最後の行の指定がうまくいかずエラーになってしまいます。 (○は"C1の値+4"にしたいのです。) よろしければ何かヒントでもいいので教えていただけないでしょうか?よろしくお願いします。 (私が書いたVBA↓) Sub chart1() Dim sh1 As Worksheet Set sh1 = Worksheets("Sheet1") Dim i As Integer i = Range("C1").Value + 4 Range(Cells(1, 1), Cells(i, 2)).Select Charts.Add ActiveChart.ChartType = xlXYScatterSmooth ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(Cells(1, 1), Cells(i, 2))

  • 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'; アプリケーション定義またはオブジェクト定義のエラーです。」となります。 いろいろ検索したのですが、これと言ったのがみつかりません。 意図するマクロはどのようなものになるのでしょうか。 ご教示お願いします。

  • Excel2013 ExcelVBAで散布図

    Excel2013 ExcelVBAで散布図を書く方法を教えてください。 Excel2013にてA列とC列で散布図を作成するため excelVBAで以下のコードを書いています。 Sub hogehoge() Dim aa As Range Dim cc As Range Dim aacc As Range Set aa = Range(Cells(1, 1), Cells(6, 1)) Set cc = Range(Cells(1, 3), Cells(6, 3)) Set aacc = Union(aa, cc) aacc.Select ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterLinesNoMarkers End Sub 上記を実行すると左側のグラフになってしまうのですが 右側のグラフを書きたいんですがどうしたらいいのでしょうか? よろしくお願いします。

  • エクセル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

  • VBA 散布図 系列名 設定あるいは削除

    以下のように複数データ範囲を選択して、散布図を作成しており、 セルA2とB2に入力した数値からデータ範囲を設定しています。 しかし、実行すると、系列1~i以降に系列i+1~がだらだらと続いてしまいます。 系列i+1以降をを削除するか、ちゃんと1~iまで系列のみ表示させるにはどのようにしたら良いのでしょうか。 どうぞ宜しくお願い致します。 Dim i As Variant i = Range("A2").Value Dim j As Variant j = Range("B2").Value Dim k As Variant k = i Dim l As Variant l = j Dim ChartObj As ChartObject Dim ChartOne As Chart Set ChartObj = ActiveSheet.ChartObjects.Add(1260, 100, 350, 240) Set ChartOne = ChartObj.Chart With ChartOne .ChartType = xlXYScatterLines .HasTitle = True .ChartTitle.Text = Range("C3").Value .HasLegend = True .Legend.Position = xlLegendPositionRight With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Text = Range("D3").Value End With With .Axes(xlCategory, xlPrimary) .HasTitle = True .AxisTitle.Text = Range("E3").Value End With For k = 1 To i For l = 1 To j ChartOne.SeriesCollection.NewSeries ChartOne.FullSeriesCollection(k).Name = Cells(5, k + 10) ChartOne.FullSeriesCollection(k).XValues = Range(Cells(5, k + 30), Cells(4 + l, k + 30)) ChartOne.FullSeriesCollection(k).Values = Range(Cells(5, k + 50), Cells(4 + l, k + 50)) Next Next End With

  • 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は別途取得してありますが、省略いたします

  • 散布図の元データを、変数で書けません。。。

    既に作ってある複数の散布図について、xの値とyの値を変数で書き直すマクロをどうやって作ったらよいものか、困り果てています。 既存のサンプルの元データは、マクロなど使っておらず、 =Sheet3!A5:A15 といった、ありふれた形式なのですが、このA5、A15を変数で可変にしたいのです。 置き換える変数は、本プログラムの中で行番号として、cells(i%,3)と いうふうに使ってきてました。 ActiveChart.SeriesCollection(1).XValues = Range(Cells(i%, 1), Cells(i%+10, 1)) (この前の行でi% = 5としている) としてみても、「'cells'メソッドは失敗しました」というエラーが返ってきてしまいます。 ちなみに使用エクセルは2003です。 よろしくお願い致します。。

  • エクセルVBA_散布図について

    アクティブになっているセルで散布図を描こうとするとX、Yが別々に記載され、2本の線になってしまいます。 例えば、A1~A3に1~3が、B1~B3に1~3が記入されているとして、A1-B3を下記のように自動で選択し、散布図で記載したいと考えております。 Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select ActiveSheet.Shapes.AddChart.Select With ActiveChart .ChartType = xlXYScatterLines End With どうにか、再度選択せずに、A1~A3をX軸に変更する方法はないでしょうか? なお、上記自動で再選択したいので、セルの範囲は決まっておりません。 何かお知恵をお借りできると助かります。

  • 散布図について

    以前bantamさんが質問していた(No46347)のですが、それでは解決しなかったので質問します。 EXCELを使って,散布図で、ラベルを表示したいのです。 たとえば、   ラベル  X   Y   a    200   250   b    150   120   c    300   278   d    243   200   e    120   100 のようなデータを散布図にすると、「ラベルを表示する」を選択すると、上のラベルではなく、Xの値が表示されます。「値を表示する」を選択するとYの値が表示されます。そうではなく、ラベルを表示したいのです。 やはり、テキストボックスなどで表示するしかないのでしょうか? ほかのソフトがあればそれでもいいのですが。

専門家に質問してみよう