- 締切済み
VBAでグラフ幅の自動調整
WEBクエリで、エクセルに情報を落として、グラフを自動で更新できようになりました。 そこで、グラフ幅を自動調整する命令をしたいのですが、コードが浮かびません・・・ データは自動更新されているので、どんどん積もっていきます。 で、その次のコードとして『指定したセルに数字が入った場合』には古いデータを消すというステップで困っています。 IF文になるのでしょうか? 教えて下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >教えて頂いたコードで、出来るような雰囲気なのですが まず、基本的な私の書き込みスタイルは、質問者のリクエストがない限りは、データを削除したり、壊したり、上書きしたりしないようにしています。もちろん、今のままでも使えますが、 >・新しいデータ(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)
基本的なことですが、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
- Wendy02
- ベストアンサー率57% (3570/6232)
グラフ幅という意味が良く分かりませんが、データの増加で、そのデータを取捨していくなら、 例えば、 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) もし、私の話で見えてこないようでしたら、一度、お使いのコードを表示して、具体的に説明してください。
補足
こんにちわ ’縦の数値を横に変えて貼り付け 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以上のデータは、古い順から切り捨てていきたいと考えています。
補足
回答ありがとうございます。 >基本的なことですが、Web クエリで出したものを、同じシートで加工するのですか? 同じシートで加工しています。 >それから、「縦の数値を横に変えて貼り付け」のマクロだけですが、他のことは何も分からないので、こちらの想像で作ってみました。 補足 グラフは、元データ自体の幅を縦300行に設定してあるので、Webクエリから最後の行にデータが追加されたらグラフが動いていく状況です。 私の 教えて の内容は ・300のデータ数のグラフを作成したい。 ・新しいデータ(301番目)が入ってきたら、1番目のデータから消していきたい です。 イメージが掴めたでしょうか? 教えて頂いたコードで、出来るような雰囲気なのですが 上に記述したイメージのコードに適しているでしょうか?