[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『グラフの書き出し位置指定について』(コヨーテひな)
グラフを作成しようとして、以下のコードを自動記録させたり、過去ログから拾ってきてつなぎ合わせましたが、毎回同じ場所にグラフができてしまって、複数グラフが重なってしまいます。グラフを指定セルに書き出すには、どのように修正したらいいのでしょうか。グラフは初めてで命令がよく理解できません。
Sub バブルチャート売上高()
Range("W2:X7").Select
ActiveSheet.Shapes.AddChart2(269, xlBubble3DEffect).Select
ActiveChart.SetSourceData Source:=Range("結果!$W$2:$X$7")
ActiveChart.FullSeriesCollection(1).Name = "=結果!$X$1"
ActiveChart.FullSeriesCollection(1).XValues = "=結果!$W$2:$W$7"
ActiveChart.FullSeriesCollection(1).Values = "=結果!$X$2:$X$7"
ActiveChart.ApplyDataLabels
ActiveChart.FullSeriesCollection(1).DataLabels.Select
Selection.ShowValue = False
ActiveChart.FullSeriesCollection(1).DataLabels.Select
ActiveChart.SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange. _
InsertChartField msoChartFieldRange, "=結果!$V$2:$V$7", 0
Dim Counter As Integer, ChartName As String, xVals As String
Dim ranges() As String
Application.ScreenUpdating = False
'グラフの元データ範囲を取得
xVals = ActiveChart.SeriesCollection(1).Formula
xVals = Replace(xVals, "=SERIES(", "")
xVals = Replace(xVals, ")", "")
ranges() = Split(xVals, ",")
xVals = ranges(1)
xVals = Mid(xVals, InStr(xVals, "!") + 1)
'各バブルの系列名
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
以上 よろしくお願いいたします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
返信ありがとうございます。
見当が全くつきませんでしたが、ピンポイントのご指摘ありがとうございます。
じっくりと勉強していきます。
(コヨーテひな) 2017/10/13(金) 15:12
グラフのデータ範囲は、固定なのに、
後半は無駄なことしていませんか?
Option Explicit
Sub バブルチャート売上高2()
Dim r As Range
Dim rN As Range, rX As Range, rY As Range
Dim adrL As String
Set r = Sheets("結果").Range("W2:X7")
Application.Goto r
Set rN = r.Cells(0, 2) '結果!$X$1
Set rX = r.Columns(1) '結果!$W$2:$W$7
Set rY = r.Columns(2) '結果!$W$2:$X$7
adrL = r.Columns(0).Address(, , , True) '結果!$V$2:$V$7
With ActiveSheet.Shapes.AddChart2(269, xlBubble3DEffect).Chart
.ApplyDataLabels
With .FullSeriesCollection(1)
.Name = rN
.XValues = rX
.Values = rY
.BubbleSizes = rY
.DataLabels.Format.TextFrame2.TextRange. _
InsertChartField msoChartFieldRange, "=" & adrL, 0
.DataLabels.ShowRange = True
.DataLabels.ShowValue = False
End With
End With
End Sub
(マナ) 2017/10/13(金) 23:51
すっきりとしたコードありがとうございます。
掲示したコードは、自動記録で作成したコードで、はっきり言って私には理解できませんでした。
急を要していたために自動記録で作成してしまいました。
教えていただいたコードを理解できるように勉強してみます。
(コヨーテひな) 2017/10/16(月) 11:15
わたしも、マクロの記録を使いますよ。
問題はそこではありません。
Selection.ShowRange = True
を間違って削除してしまったのではありませんか?
>Selection.ShowValue = False
は、残してますよね。
もし削除しなければ、そもそも後半部分は不要だったのです。
わずか1行でできたのです。
面倒かもしれませんが、
記録されたマクロは、不要な行を削除だけして使うのではなく
変数やWith句を使用してSelectしないマクロに
書き換える習慣をつけるとよいです。
そうすると、どれが本当に不要で、どれが必要なのか
理解しやすいと思います。
(マナ) 2017/10/16(月) 21:45
ご指摘ありがとうございます。
急いでいたために削除してしまったのかもしれません。
>面倒かもしれませんが、
>記録されたマクロは、不要な行を削除だけして使うのではなく
>変数やWith句を使用してSelectしないマクロに
>書き換える習慣をつけるとよいです。
>そうすると、どれが本当に不要で、どれが必要なのか
>理解しやすいと思います。
上記の部分、十分注意して勉強していきたいと思います。
(コヨーテひな) 2017/10/17(火) 16:27
セルの指定は、Application.Inputboxを使うこともできます。
http://www.relief.jp/docs/excel-vba-application-inputbox-range.html
ただ疑問なのですが、データは、V2:X7と固定なのに
グラフの出力先のみ変えたいのですか?
(マナ) 2017/10/17(火) 19:59
グラフはほぼいじったことないうえにバブルチャートの3Dの作り方も手動で上手くできなかったですが、
コヨーテひなさんのコードから、
>ActiveSheet.Shapes.AddChart2(269, xlBubble3DEffect).Select
グラフも図形の仲間だとするなら、
例えば
’最後の図形を最後から1個前の図形の下右の下のセルの2個下のセルにずらす
Sub さんぷる()
Dim shp As Shape
With activesheet.Shapes
.Item(.Count).Top = Cells(.Item(.Count - 1).BottomRightCell.Row + 2, "A").Top
End With
End Sub
みたいなことをすればいいと思います。
グラフに限定する必要があれば、どのように指定するかは別途調べてください。
(まっつわん) 2017/10/18(水) 09:33
実は数値は、X,Y,Zと入っていて、一つ目は(V2;X7),2つ目は(V2;Y7),3つ目が(V2;Z7)と範囲を変更して、それぞれ最終の列の数値をY軸とバブルサイズに指定しています。こんなやり方自体がそもそも間違っているのかもしれません。それでしたら、大変失礼な質問をしてしまいました。
まっつわんさん
指定されたコードをじっくり研究したいと思います。
どうもありがとうございました。
(コヨーテひな) 2017/10/18(水) 13:20
納得しました。
でしたら、???さんのアドバイス通りです。
(マナ) 2017/10/18(水) 19:39
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.