• 締切済み

VBAでグラフ幅の自動調整

WEBクエリで、エクセルに情報を落として、グラフを自動で更新できようになりました。 そこで、グラフ幅を自動調整する命令をしたいのですが、コードが浮かびません・・・ データは自動更新されているので、どんどん積もっていきます。 で、その次のコードとして『指定したセルに数字が入った場合』には古いデータを消すというステップで困っています。 IF文になるのでしょうか? 教えて下さい。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >教えて頂いたコードで、出来るような雰囲気なのですが まず、基本的な私の書き込みスタイルは、質問者のリクエストがない限りは、データを削除したり、壊したり、上書きしたりしないようにしています。もちろん、今のままでも使えますが、 >・新しいデータ(301番目)が入ってきたら、1番目のデータから消していきたいです。 こちらの条件には合いません。つまり、不必要な行を削除するようにするのだと思います。ただ、グラフのデータの範囲自体などは示されていませんので、系列は5個で、「回答に対する補足」部分から、データの範囲は、「C18:G317」までの範囲だと解釈させていただきます。もしも、データが300以下の場合は、グラフのみの、設定のしなおしをします。 '<標準モジュール> Sub TestChart2()  Dim LastRow As Long, FirstRow As Long  Dim myAddress As String, i As Long  With ActiveSheet   'ここにWebデータの貼り付けのコードを入れる   LastRow = .Range("C65536").End(xlUp).Row   '本来の最初の行   FirstRow = Application.Max(LastRow - 299, 1)   If LastRow > 317 Then    '不要の部分を削除してB18まで戻す    Range("B18", "G" & FirstRow - 1).Delete xlShiftUp    LastRow = .Range("C65536").End(xlUp).Row   End If   For i = 1 To 5    'グラフ系列用のアドレスの取得    myAddress = Range(.Cells(18, i + 2), _    .Cells(LastRow, i + 2)).Address    .ChartObjects(1).Chart.SeriesCollection(i).Formula = _    "=SERIES(,," & .Name & "!" & myAddress & ",1)"   Next i  End With End Sub

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

基本的なことですが、Web クエリで出したものを、同じシートで加工するのですか? それから、「縦の数値を横に変えて貼り付け」のマクロだけですが、他のことは何も分からないので、こちらの想像で作ってみました。 '最初の行は、最後から300行さかのぼったところ。ただし、300行に達しない場合は、それ以下にする。 Sub TestChart() Dim LastRow As Long, FirstRow As Long Dim myAddress As String, i As Long With ActiveSheet LastRow = .Range("C65536").End(xlUp).Row FirstRow = Application.Max(LastRow - 300, 1) For i = 1 To 5   myAddress = Range(.Cells(FirstRow, i + 2), _        .Cells(LastRow, i + 2)).Address   .ChartObjects(1).Chart.SeriesCollection(i).Formula = _    "=SERIES(,," & .Name & "!" & myAddress & ",1)" Next i End With End Sub

dmura
質問者

補足

回答ありがとうございます。 >基本的なことですが、Web クエリで出したものを、同じシートで加工するのですか? 同じシートで加工しています。 >それから、「縦の数値を横に変えて貼り付け」のマクロだけですが、他のことは何も分からないので、こちらの想像で作ってみました。 補足 グラフは、元データ自体の幅を縦300行に設定してあるので、Webクエリから最後の行にデータが追加されたらグラフが動いていく状況です。 私の 教えて の内容は ・300のデータ数のグラフを作成したい。 ・新しいデータ(301番目)が入ってきたら、1番目のデータから消していきたい です。 イメージが掴めたでしょうか? 教えて頂いたコードで、出来るような雰囲気なのですが 上に記述したイメージのコードに適しているでしょうか?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

グラフ幅という意味が良く分かりませんが、データの増加で、そのデータを取捨していくなら、 例えば、 ActiveChart.SeriesCollection(1).XValues ActiveChart.SeriesCollection(1).Values で、データ範囲のアドレスを、R1C1型に取って入れればよいのではありませんか? 例えば、 LastRow = Range("B65536").End(xlUp).Row FirstRow = Application.Max(LastRow - 20, 1) myAddress = Range(Cells(FirstRow, 2), Cells(LastRow, 2)).Address(, , xlR1C1) もし、私の話で見えてこないようでしたら、一度、お使いのコードを表示して、具体的に説明してください。

dmura
質問者

補足

こんにちわ ’縦の数値を横に変えて貼り付け Range("B18:B22").Select Selection.Copy Range("c65536").End(xlUp).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True このようなコードです。 5つのデータをグラフ化して推移させている状態です。 グラフのデータは300くらいまでを見ています。 300以上のデータは、古い順から切り捨てていきたいと考えています。

関連するQ&A