Excel散布図のX軸とY軸を入れ替えるVBA

このQ&Aのポイント
  • Excelの散布図でX軸とY軸を入れ替える方法を考えています。VBAを使用してグラフの軸を入れ替えることができますが、エラーが発生してうまくいきません。修正方法を教えてください。
  • Excelの散布図でX軸とY軸を入れ替える方法を教えてください。VBAを使用してグラフの軸を入れ替えることができると思いますが、エラーが出てうまくいきません。
  • Excelの散布図でX軸とY軸を入れ替える方法を教えてください。VBAを使用してグラフの軸の値を入れ替えることができると思いますが、コードを組んだらエラーが出ました。修正方法を教えてください。
回答を見る
  • ベストアンサー

excel散布図のX軸とY軸を入れ替えるVBA

散布図の軸を入れ替える方法を考えています。(excel2003です。) 散布図は数百枚あり、系列ごとに元データが散在しているので、 元データは触らずに、グラフの軸だけを入れ替えて表示したいのです。 例えば横軸が身長、縦軸が体重の散布図を縦軸を体重、横軸を身長にするイメージです。 xvaluesとvaluesを入れ替えるのだと思い、以下を組んでみたのですが、うまくいきません。 どのように修正すればよいか教えてください。 Sub 軸入替() Dim cht As Chart Dim i As Long, N As Long   Dim sxvalues As Object,svalues As Object With ActiveSheet.ChartObjects For N = 1 To .Count Set cht = .Item(N).Chart With cht.SeriesCollection For i = 1 To .Count          sxvalues = .Item(i).XValues ←ここでエラーが出ます。          svalues = .Item(i).Values          .Item(i).Values = sxvalues          .Item(i).XValues = svalues Next End With Next End With End Sub 以上です。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

元データとの連動を解除しても構わないなら >Dim sxvalues As Object,svalues As Object Dim sxvalues, svalues ...と、データ型を Variantで受ければいいです。 連動を保持したい場合、Formulaプロパティなどを使うと良いと思います。 Dim cht As Chart Dim i  As Long Dim N  As Long Dim v, tmp With ActiveSheet.ChartObjects   For N = 1 To .Count     Set cht = .Item(N).Chart     With cht.SeriesCollection       For i = 1 To .Count         With .Item(i)           v = Split(.Formula, ",")           tmp = v(1)           v(1) = v(2)           v(2) = tmp           .Formula = Join(v, ",")         End With       Next     End With   Next End With

bonosalute
質問者

お礼

どうもありがとうございます! きれいにできました。 変数の型が全然理解できていないのですが、 ひとつひとつ勉強していこうと思います。 助かりました。

関連するQ&A

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

  • [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列したいのですが、そのためにはどうすれば良いでしょうか。ご教授ください。

  • Excel2007の散布図についてですが...

    Excel2007の散布図についてですが... 何分2007に慣れておりません。1行目に数字がAからIまで並び、5行目にそれに対応する結果が同じくAからIまで並んでいた場合ですが、[挿入]を選択するとグラフの部分の選択が出てきて散布図を選ぶと散布図がかけます。ところでこれが1行目が横軸、5行目が縦軸の散布図となります。1行目を縦軸に、5行目を横軸にするグラフに入れ替えたいのですができません。こんな簡単なはずの操作で困っております。ご教授下さい。

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

    エクセル2007で作る散布図について、縦軸、横軸に名前をつけたり、グラフタイトルをつけたりしたいのですが、どうすればいいでしょうか?

  • エクセルの散布図の作成で…

    エクセルの散布図の作成で… こんにちは。エクセルの散布図の作成で、 横軸が同じ二つのデータを、二種類の縦軸をつかって一つの 散布図に表したいです。 図の縦軸Aを左側に、縦軸Bを右側に表して、一つの図にまとめ たいのです。 ソフトはマイクロソフトオフィス2007です。 作成方法、あるいはそれが乗っているサイトなどご紹介いただける とたすかります。よろしくお願いいたします。

  • excelの散布図

    散布図を使ってグラフを作成するにいたって、初歩的なことかもしれませんがどうしてもわからないことがあります。 横軸に時間、縦軸に移動距離をとるとします。 例えば横軸に20分、40分...100分と 20分毎のデータをプロットします。 その時、横軸の最小値を0分ではなく、例えば15分にする必要があるとします。 そこで、 (A) 横軸の最小値を15分にしてしまうと、軸目盛りの表示が15分、35分...115分のように表示されてしまい、20分、40分...100分という表示ではなくなります。 また、 (B) 縦軸との交点を15分にすることで、横軸目盛りの20分、40分...100分という表示は維持できますが、その場合0分から15分の部分が縦軸に対して左側にあり、不恰好です。 これを解決したいのですが、どうかよろしくお願いします。 ペイントで作成した理想的な画像を添付しておきます。

  • EXCEL VBAで散布図の作成

    EXCELのVBAを使って散布図を作成したいと考えているのですがどのようにVBAを組めばいいか悩んでいます。 時間   温度A 温度B ・・・・ 11:00 15 14  ・・・・ 12:00 16 18  ・・・・ 13:00 18 19  ・・・・ というデータがあります。 これをフォームなどで選択した項目だけを 散布図(横軸:時間 縦軸:温度)にしたいのですが きっかけや考え方だけでも教えてください。 お願いします。

  • 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 散布図 系列名 設定あるいは削除

    以下のように複数データ範囲を選択して、散布図を作成しており、 セル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

  • 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))

専門家に質問してみよう