[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『グラフの書き出し位置指定について』(コヨーテひな)
グラフを作成しようとして、以下のコードを自動記録させたり、過去ログから拾ってきてつなぎ合わせましたが、毎回同じ場所にグラフができてしまって、複数グラフが重なってしまいます。グラフを指定セルに書き出すには、どのように修正したらいいのでしょうか。グラフは初めてで命令がよく理解できません。
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.