4年に一度のスポーツの祭典 全競技速報中

縦にずらっと並んだ1項目しかない棒グラフ(棒が1本だけ立っている)
を複製しては参照先を一つづつずらすという作業をしていたのですがあまりに不毛すぎて苦労しています
(そもそも棒グラフの範囲を横に増やせば簡単に棒を増やせるのですが
棒一本一本を動かして自由に配置したいとのことでこういうやり方になっています
完成は16*8*5シートの全てのセルに対して1つの棒グラフがついた形ということになります)

縦16*5シートは作ってあるのですがこれをそれぞれのシートで*8しなくてはなりません
覚えたてのVBAで楽にできないかと色々とこねくりまわしてみたのですが
「複数選択したグラフ一つ一つについて参照先を取得→変更する」というのをどう実現すればよいのかわかりません。

今後もシートは増えるということなので、省力化できればとても楽になります
Excelのバージョンは2007ですが2003を使用することもできます
宜しくお願いします。

gooドクター

A 回答 (1件)

ブック内全てのシートにグラフを複製するのですか?


言い換えれば、ブック内にはそれ以外のシートは存在していませんか?
グラフを複製するシートの名前は特定できますか?

取りあえず同一シート内でグラフ増殖の例です。
元のグラフが16個作成済みで同じ列に縦に並んでいると仮定しています。

Dim cht As ChartObject
Dim i As Long

For Each cht In ActiveSheet.ChartObjects
For i = 1 To 7
With cht.Duplicate
'--グラフが同一列縦に並んでいる場合
.Left = Range(cht.TopLeftCell.Address).offset(, i).Left
.Top = cht.Top
'--グラフが同一行横に並んでいる場合
'.Left = cht.Left
'.Top = Range(cht.TopLeftCell.Address).offset(i).Top
With .Chart.SeriesCollection(1)
If Range(Split(.Formula, ",")(1)).Row = Range(Split(.Formula, ",")(2)).Row Then
.XValues = Range(Split(.Formula, ",")(1)).offset(i)
.values = Range(Split(.Formula, ",")(2)).offset(i)
Else
.XValues = Range(Split(.Formula, ",")(1)).offset(, i)
.values = Range(Split(.Formula, ",")(2)).offset(, i)
End If
End With
End With
Next i
Next
    • good
    • 0
この回答へのお礼

有難うございます、なかなかお礼をする余裕が作れませんでした、すみません

今回の作業についてはブック内のものを全て複製していくのでこのマクロで良さそうです
複数選択したグラフのうちの1つ1つをどうやって対象にとるのかばかり考えていましたが
全部やってしまうという手もあったわけですね。

ちょっとしたデザイン変更の度に全て作り直す/全ての設定を変えるのが非常にめんどうだったので大変に助かります
次の変更があった時から試してみようと思います。

お礼日時:2012/03/23 09:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

人気Q&Aランキング