最新閲覧日:

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

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

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

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

A 回答 (3件)

例えば、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

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

(私の使っているのは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

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

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

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

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


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

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

おすすめ情報

カテゴリ