dポイントプレゼントキャンペーン実施中!

WEBクエリで、エクセルに情報を落として、グラフを自動で更新できようになりました。
そこで、グラフ幅を自動調整する命令をしたいのですが、コードが浮かびません・・・

データは自動更新されているので、どんどん積もっていきます。
で、その次のコードとして『指定したセルに数字が入った場合』には古いデータを消すというステップで困っています。
IF文になるのでしょうか?

教えて下さい。

A 回答 (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
    • good
    • 0

基本的なことですが、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

この回答への補足

回答ありがとうございます。

>基本的なことですが、Web クエリで出したものを、同じシートで加工するのですか?

同じシートで加工しています。

>それから、「縦の数値を横に変えて貼り付け」のマクロだけですが、他のことは何も分からないので、こちらの想像で作ってみました。

補足
グラフは、元データ自体の幅を縦300行に設定してあるので、Webクエリから最後の行にデータが追加されたらグラフが動いていく状況です。

私の 教えて の内容は
・300のデータ数のグラフを作成したい。
・新しいデータ(301番目)が入ってきたら、1番目のデータから消していきたい
です。

イメージが掴めたでしょうか?

教えて頂いたコードで、出来るような雰囲気なのですが
上に記述したイメージのコードに適しているでしょうか?

補足日時:2005/06/30 19:05
    • good
    • 0

グラフ幅という意味が良く分かりませんが、データの増加で、そのデータを取捨していくなら、



例えば、

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以上のデータは、古い順から切り捨てていきたいと考えています。

補足日時:2005/06/29 15:33
    • good
    • 0

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