1/30秒ごとに取った時系列のデータを使って
グラフを書こうとしています。しかし、データが大きすぎて
手持ちのグラフソフトで上手く扱えません。

このため、エクセルを使ってデータを小さくしようと頑張っています。
(エクセルでも警告が出ますが)
まずは、データを3行置き(例えば)に使って1/10毎のデータに
したいのです。今までのところ、なかなか上手く行っていません。
指定範囲をドラッグしても上手く2,5,8,11,...とならなかったりして
何か関数を使えばいいのかとも思うんですが、いろいろな仕事が重なり
疲れてしまって頭が働きません。手持ちのマニュアルも英語のものしかなく
日本語で質問できるここに来ました。

3万行前後の時系列のデータが2つ、という状況です。
コンピュータはG3マック、ソフトはOffice 2001 エクセルです。
他のソフトとして、GraphPad Prism3, kaleidaGraph, StatViewが
使えます(使い方は別として)。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

もっとスマートな方法があると思いますが、とりあえず思いつく範囲で。

(私の使っているのはExcel2000英語版なのでコマンドは英語のままで書きますが、わかりますよね?)

データが
A1 1
A2 2


A10 10

になっているとして、
B1のセルで 関数"=IF(MOD(ROW(),3)=0,A1)"を使い、B2からB10までコピペ。すると3で割り切れるRow No.の数値は残り、それ以外のセルは"FALSE"の表示になります。このままでは"FALSE"が消せないので、コピー→特殊ペーストでvalueのみのペーストにして隣のcolumn "C"へ移す。C column全体を選択しておいて"Find"→"Replace All"でFALSEを空白に変換(Replace withの欄を空白にしたままで実行)すると消えてくれます。これと時間データの間でグラフを書けば間の二つのデータをスキップしたグラフを書いてくれます。
    • good
    • 0
この回答へのお礼

SNAPPER さん、お答え大変ありがとうございました。
エクセル上でグラフを書くところまで、この方法でできました。
ただ、このグラフのMarkerを消して、データを線で結ぶ設定をすると
グラフが消えてしまいました。
空欄を含めて行数が1/3になってもいないので、手持ちのグラフソフトも
使えませんでした。

しかしながら、お答え本当にありがとうございました。
この方法は別のところでぜひ応用させていただきたいです!

m(__)m

お礼日時:2002/02/08 09:04

例えば、1行目が表題として、データの横の列に1からの連番を振ります。

これをC列としてD列に =MOD(C2,3) として、データ数分コピーします。
後はオートフィルタでD列で『2』を指定して、抽出結果を他シートにコピーしてグラフを書いてみてはどうでしょうか。


元のデータはCSVファイル?テキストファイル?のような気がしますが、もしそうなら、データ数が多いと全部読み込めないことがあります。
私は、Excelに読み込んでデータの間引きを行うのではなく、データを間引きしてExcelに読み込むようにしています。

下記は処理例です。ただ、windowsのExcelVBAです。macで動くかは不明です。

ご参考に。

Sub mabikiTest()
  Dim srcFileName As String '元ファイル名
  Dim desFileName As String '間引き後ファイル名
  Dim dt As String 'レコードデータ
  Dim cot As Long 'カウンタ

  srcFileName = "C:\My Documents\・・・\・・・.txt" '元ファイル名を指定
  desFileName = "C:\My Documents\・・・\・・・.txt" '作成する間引き後ファイル名を指定

  Open srcFileName For Input As #1 '読み込み用の元ファイルを開く
  Open desFileName For Output As #2 '間引きファイルを書き出し用に開く

  '読み込み用ファイルのデータが終わるまで読み込む
  While Not EOF(1)
    'カンマがあるかもしれないので1レコード単位で読み込む
    Line Input #1, dt
      'レコード数をカウント
      cot = cot + 1
      '2から3飛びで書き出し用ファイルに書く。カウンタを3で割った余りで判断
      If cot Mod 3 = 2 Then
        Print #2, dt
      End If
  Wend
  Close
End Sub
    • good
    • 0
この回答へのお礼

nishi6 さん、お答えありがとうございます。
実は、ちょっとの差で解決してしまったところです。
但し、教えていただいた方法は明日にでも試してみたいと思います。
が、理解できるかどうか…。
簡単な表計算しかできないと思いこんでいるので壁は厚そうです。
私の解決方法は何だかあまりに芸がなかったというか…。

お礼日時:2002/02/08 10:27

そうですか、残念。



空白行をつめるやり方はわかりません。どなたかマクロの出来る方の回答を待ちましょう。ちなみに私のコンピュータ(Win98、メモリ128 MB)で試しにやってみたところ、データ縮小などしなくとも3万行の時系列データ2本のグラフがExcel2000で難なく描けました(どんな書式でも)。

メモリがいくらか知りませんが、G3だったら同じ事ができないことはないと思うのですが。ダメモトで
1)Excelの割り当てメモリを増やす
2)データのみでなく横軸の時間値の方も2行飛ばし(残す場所をデータの方と一致させて)にする
3)支障がなければ縮小度を上げる(5行に1行とか)

をやってみてください。あと周囲にWindows機(高スペックのもの)を持っている人がいればちょっと借りてやらしてもらっては?Excelのデータは互換性があるし、多分これなら出来ると思いますよ。
    • good
    • 0
この回答へのお礼

SNAPPER さん、再度ご返答ありがとうございます。
実は、何とか答えを見いだしましたので報告させていただきます。

列Aが時間だとして、どこか(例えば列B)に
「 A2, A5, A8,...」という別の列を作ります。
(A2, A5と入力・ドラッグするなどして)

そうすると、「=indirect(B2), =indirect(B5),...」という列が、
求めていた新しい時間になっていました。
(1つ入力後、残りはコピー)

本当に、ありがとうございました。エクセルで3万行は扱えますよね。
グラフも使っているのですが、慣れの問題もあって、解析の用途にだけ
です。ポスター用に他のソフト(Prism)などを使いたかったのですが、
3万行が扱えず、エクセルで量を減らせないか模索していたわけです。

お礼日時:2002/02/08 10:21

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1という

エクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1,3,1というような順番で数字が並んでいます。

その数字の中で、1→3と3→1になるものがいくつあるか求めたいのですが、出す関数・マクロがわかりません。
教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

こんばんは!

>A列の中に
とは行方向に数値が入っている!というコトでしょうか?

そうであれば
表示したいセルに
=COUNTIFS(A1:A1000,1,A2:A1001,3)+COUNTIFS(A1:A1000,3,A2:A1001,1)
としてみてください。

「1」の次の行が「3」の場合と
「3」の次の行が「1」の場合をプラスしています。m(_ _)m

Qエクセル グラフ データ系列入力で数式設定

エクセルのグラフ散布図作成で、データの選択を通常は数値入力、もしくはセル指定をしますが、数値とセル指定の混合、MAX関数などの数式を入れると入力エラーになってしまいます。入力の仕方に問題があるのでしょうか?もしくはこのような入力は出来ないのでしょうか?

例えば、データの選択で(1)と(2)のようにすると入力エラーになってしまいます。
(1)ある範囲のMAX値のデータをプロットさせたい
系列Xの値
1,9
系列Yの値
1,max(Sheet1!$C$16:$C$25)

(2)一つの値だけセル指定
系列Xの値
1,9
系列Yの値
1,Sheet1!$C$18

すみませんが、どなたかよろしくお願いします。

Aベストアンサー

(1)はYで数式を使うことがNG
(2)はYで値とセル参照を一緒にすることがNG
あくまでも値なので、セルへの入力のように計算させたり複雑に配列を組まない。

グラフのXY値に数式などを直接入れずにセルにMAX関数など入れる。
グラフはそのセル(の値)を参照させる。
これが普通かと思います。

参照する場合は
=Sheet2!$C$2:$C$100
と範囲にするか
=Sheet2!$C$2,Seet2!$C$10,Seet2!$C$24
と配列にする。

Qエクセルのグラフのデータ系列の順序をVBAで変更する

下記の変更をVBAで行いたいのですがわかりません。
系列は2つです。

データ系列の中のどれかひとつをダブルクリックします。
あるいは、右クリック-[データ系列の書式設定(O)...]や、データ系列を選択して[書式(O)]-[選択したデータ系列(E)...]や、データ系列を選択して[Ctrl] + [1]キー でも構いません。[データ系列の書式設定]ダイアログボックスを表示させます。

[系列の順序]タブを選択します。

順序を変更したいデータ系列を、[系列の順序(S)]から選択、[上へ移動(U)]や[下へ移動(D)]ボタンで順序を変更してください。

以上、よろしくお願いします。

Aベストアンサー

こんにちは

たぶん、対話型で、以下のようなものになるように思います。
ただし、散布図はこの範疇ではありません。

'//
Sub ChartSeriesMoving()
 Dim objChrt As ChartObject
 Dim chSries As FullSeriesCollection
 Dim nums As Integer
 Dim i, j, nm As String
 
 Set objChrt = ActiveSheet.ChartObjects(1)
 Set chSries = objChrt.Chart.FullSeriesCollection
 nums = chSries.Count
START:
 i = Application.InputBox("系列の順番の数字を入れてください。(左/上から" & nums & "までです.)")
 If VarType(i) = vbBoolean Then Exit Sub
  If Val(nums) < i Then MsgBox "数字が系列の数より多いです。", vbExclamation: Exit Sub
  nm = chSries(i).Name
  chSries(i).Select
  j = Application.InputBox(nm & "を何番目に写しますか?左/上から(左/上から" & nums & "までです.)")
  If VarType(j) = vbBoolean Then Exit Sub
  chSries(i).PlotOrder = j
  Application.ScreenUpdating = True
  Application.Wait Now + TimeSerial(0, 0, 3)
  If MsgBox("続けますか(Y), 終了しますか(N)", vbYesNo) = vbYes Then
  GoTo START
  End If
End Sub

なお、私は、リクエストされたご要望の回答者層には含まれていません。

こんにちは

たぶん、対話型で、以下のようなものになるように思います。
ただし、散布図はこの範疇ではありません。

'//
Sub ChartSeriesMoving()
 Dim objChrt As ChartObject
 Dim chSries As FullSeriesCollection
 Dim nums As Integer
 Dim i, j, nm As String
 
 Set objChrt = ActiveSheet.ChartObjects(1)
 Set chSries = objChrt.Chart.FullSeriesCollection
 nums = chSries.Count
START:
 i = Application.InputBox("系列の順番の数字を入れてください。(左/上から" & nums & "までです.)")...続きを読む

QExcel グラフのデータ系列の変換

よろしくお願いいたします。Excel2003です。(操作は2007ですが、保存は2003ですので、それでお願い致します)

1つのブックに50程度のグラフが作成された雛形があります。
このグラフは、下記のようなデータ系列で、Bの部分がC・D・E・・・と変わっているだけで、データ数等は同じ数です。

=SERIES(,Sheet1!$A$1:$A$3000,Sheet1!$B$1:$B$3000,1)

そのブックにデータを貼り付けてグラフを完成させるのですが、何度も使用する上に毎回データ数が変わります。
現在は、手入力で毎回変換しているのですが、かなりの時間がかかります。
上記の式のうち、$A$3000と$B$3000の3000の部分を全てのグラフ同じ数値に簡単に変換する方法は無いでしょうか?

補足が必要であれば要求お願いいたします。
よろしくお願いいたします。

Aベストアンサー

>1つのブックに50程度のグラフが作成された雛形があります。
そのグラフはグラフシートでしょうか、シート上のグラフオブジェクトでしょうか?

グラフオブジェクトの場合、

Sub try()
  Const FND As String = "R3000C" 'R + 置換前の行数 +C
  Const REP As String = "R2500C" 'R + 置換後の行数 +C
  Dim ws  As Worksheet
  Dim ch  As ChartObject
  Dim sr  As Series

  For Each ws In ActiveWorkbook.Worksheets
    For Each ch In ws.ChartObjects
      For Each sr In ch.Chart.SeriesCollection
        sr.FormulaR1C1 = Replace(sr.FormulaR1C1, FND, REP)
      Next
    Next
  Next
End Sub

...こんな感じのVBAで処理できるかと思います。

>(操作は2007ですが、保存は2003ですので、それでお願い致します)
との事なので、2007で動作しないとダメですよね?
それはまだ確認してません。

他の案として、

[可変範囲のグラフ]
http://www2.odn.ne.jp/excel/waza/graph.html#SEC13

▲こちらを参考にして、範囲が変動しても対応できるグラフを作成しておいてはいかがでしょう。
[名前の定義]を使います。
最初、50個の[名前定義]とグラフ修正するのはたいへんかもしれませんが、一度作成してしまえば
修正が必要なくなりますので、おすすめです。

>1つのブックに50程度のグラフが作成された雛形があります。
そのグラフはグラフシートでしょうか、シート上のグラフオブジェクトでしょうか?

グラフオブジェクトの場合、

Sub try()
  Const FND As String = "R3000C" 'R + 置換前の行数 +C
  Const REP As String = "R2500C" 'R + 置換後の行数 +C
  Dim ws  As Worksheet
  Dim ch  As ChartObject
  Dim sr  As Series

  For Each ws In ActiveWorkbook.Worksheets
    For Each ch In ws.ChartObjects
      F...続きを読む

QExcel:とびとびの日付のデータを時系列のグラフにするには?

MS Excel2000でのグラフの問題です。
日付と数値のデータがあります。
日付がとびとびになっているときにちゃんとした時系列のグラフにすることはできないでしょうか。

日付:個数
1/1:2
1/3:1
1/4:1
1/8:3




すべての日付を入力しておく、というのはナシでお願いします。

Aベストアンサー

こんばんは!

グラフの種類がわからないので不確かですが!
以下の方法では?

作成済みであれば、
 ・グラフの余白部分を右クリック
 ・グラフオプション 軸タブ X/項目軸 時系列 をチェック

作成前であれば ウィザードの
 [1/4グラフの種類]選択 次へ
 [2/4元データ]次へ
 [3/4グラフオプション]の軸タブ  X/項目軸 時系列 をチェック

です。 確認してみて下さい!


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報