アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるシステムからデータをエクセルに落とすため、毎回、行や列の数が変わります。
テキスト本を見て下のようなマクロを作成しましたが、うまくいきません。どなたか教えていただけないでしょうか。

Sub グラフシート作成()
Dim WS As Worksheet
Dim Crt As Chart
Range("A65536").End(xlUp).End(xlToRight).Activate
Range("A1:" & Selection.Address).Select

Set WS = Worksheets("Sheet1")
Set Crt = Charts.Add

With Crt
.ChartType = xl3DBarStacked
.SetSourceData Source:=WS.Range(ここに何を書けばいいのでしょうか?), PlotBy:=xlColumns
.Name = "野菜栄養価表"

End With

Set WS = Nothing
Set Crt = Nothing
End Sub

A 回答 (4件)

Sub グラフシート作成()


Dim WS As Worksheet
Dim Crt As Chart
Set WS = Worksheets("Sheet1")
d = WS.Range("A65536").End(xlUp).Row
r = WS.Range("IV2").End(xlToLeft).Column
MsgBox d
MsgBox r
Set Crt = Charts.Add
With Crt
.ChartType = xl3DBarStacked
.SetSourceData Source:=WS.Range(WS.Range("A2"), WS.Cells(d, r)), _
PlotBy:=xlColumns
.Name = "野菜栄養価表"

End With
Set WS = Nothing
Set Crt = Nothing
End Sub
>範囲が毎回異なる
A.データの行数・列数が異なる
B.グラフに出したいデータ範囲が異なる
の2つの場合があり、前者として考えた。
    • good
    • 0
この回答へのお礼

この方法でうまくグラフが書けました。
本当に助かりました。
ありがとうございます。

お礼が遅くなりすみませんでした。

お礼日時:2008/11/01 19:54

範囲が毎回異なるのであれば、


何処から何処までデータが入っているか?

の情報もセルに格納してみては?
    • good
    • 0

セル範囲を選択しているので、SetSourceDataしなくてもグラフはプロットされるようです。


従って、コメントの(1)-a~(1)-d の部分は無くても大丈夫です。
お分かりとは思いますが、マクロ実行前にSheet1を開いてアクティブにしておく必要があります。
コメント(2)のようにしてシートを選択すれば、どのシートからでもマクロを実行できます。

Sub グラフシート作成test1()
  'Dim WS As Worksheet  '(1)-a
  Dim Crt As Chart
  
  Sheets("Sheet1").Select '(2)
  Range("A65536").End(xlUp).End(xlToRight).Activate
  Range("A1:" & Selection.Address).Select

  'Set WS = Worksheets("Sheet1") '(1)-b
  Set Crt = Charts.Add

  With Crt
    .ChartType = xl3DBarStacked
    '.SetSourceData Source:=WS.Range, PlotBy:=xlColumns '(1)-c
    .Name = "野菜栄養価表"
  End With

  'Set WS = Nothing '(1)-d
  Set Crt = Nothing
End Sub

折角オブジェクト変数を使っているのですから、
下記のように、(3)-a~(3)-dを入れればSelectする必要はありません。

Sub グラフシート作成test2()
  Dim WS As Worksheet
  Dim Crt As Chart
  Dim Drng As Range '(3)-a
  
  Set WS = Worksheets("Sheet1")
  Set Drng = WS.Range("A1", WS.Range("A65536").End(xlUp).End(xlToRight)) '(3)-b
  Set Crt = Charts.Add

  With Crt
    .ChartType = xl3DBarStacked
    .SetSourceData Source:=Drng, PlotBy:=xlColumns '(3)-c
    .Name = "野菜栄養価表"
  End With

  Set WS = Nothing
  Set Crt = Nothing
  Set Drng = Nothing '(3)-d
End Sub

ただし、いくつか問題があります。
1)、A列のデータが数字の場合、A列データもプロットされます。文字列ならプロットされないので問題はないように思われます。
2)、マクロを実行する度にグラフシートが挿入され同じ名前をつけようとするのでエラーになります。
ここら辺はどうしようとお考えでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2008/11/01 19:56

すみません。

全く試していませんがデータ単位を
>Range("A1:" & Selection.Address).Select
で選択しているなら

SetSourceData Source:=Selection, PlotBy:=xlColumns

で良いかもしれません。あるいは
SetSourceData Source:=Range("A1:" & Selection.Address), PlotBy:=xlColumns
ですね。
    • good
    • 0

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