- ベストアンサー
エクセル(EXCEL)で、データを3行置きに使ってグラフを書きたい
1/30秒ごとに取った時系列のデータを使って グラフを書こうとしています。しかし、データが大きすぎて 手持ちのグラフソフトで上手く扱えません。 このため、エクセルを使ってデータを小さくしようと頑張っています。 (エクセルでも警告が出ますが) まずは、データを3行置き(例えば)に使って1/10毎のデータに したいのです。今までのところ、なかなか上手く行っていません。 指定範囲をドラッグしても上手く2,5,8,11,...とならなかったりして 何か関数を使えばいいのかとも思うんですが、いろいろな仕事が重なり 疲れてしまって頭が働きません。手持ちのマニュアルも英語のものしかなく 日本語で質問できるここに来ました。 3万行前後の時系列のデータが2つ、という状況です。 コンピュータはG3マック、ソフトはOffice 2001 エクセルです。 他のソフトとして、GraphPad Prism3, kaleidaGraph, StatViewが 使えます(使い方は別として)。
- みんなの回答 (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の欄を空白にしたままで実行)すると消えてくれます。これと時間データの間でグラフを書けば間の二つのデータをスキップしたグラフを書いてくれます。
その他の回答 (2)
- nishi6
- ベストアンサー率67% (869/1280)
例えば、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
お礼
nishi6 さん、お答えありがとうございます。 実は、ちょっとの差で解決してしまったところです。 但し、教えていただいた方法は明日にでも試してみたいと思います。 が、理解できるかどうか…。 簡単な表計算しかできないと思いこんでいるので壁は厚そうです。 私の解決方法は何だかあまりに芸がなかったというか…。
- SNAPPER
- ベストアンサー率44% (151/337)
そうですか、残念。 空白行をつめるやり方はわかりません。どなたかマクロの出来る方の回答を待ちましょう。ちなみに私のコンピュータ(Win98、メモリ128 MB)で試しにやってみたところ、データ縮小などしなくとも3万行の時系列データ2本のグラフがExcel2000で難なく描けました(どんな書式でも)。 メモリがいくらか知りませんが、G3だったら同じ事ができないことはないと思うのですが。ダメモトで 1)Excelの割り当てメモリを増やす 2)データのみでなく横軸の時間値の方も2行飛ばし(残す場所をデータの方と一致させて)にする 3)支障がなければ縮小度を上げる(5行に1行とか) をやってみてください。あと周囲にWindows機(高スペックのもの)を持っている人がいればちょっと借りてやらしてもらっては?Excelのデータは互換性があるし、多分これなら出来ると思いますよ。
お礼
SNAPPER さん、再度ご返答ありがとうございます。 実は、何とか答えを見いだしましたので報告させていただきます。 列Aが時間だとして、どこか(例えば列B)に 「 A2, A5, A8,...」という別の列を作ります。 (A2, A5と入力・ドラッグするなどして) そうすると、「=indirect(B2), =indirect(B5),...」という列が、 求めていた新しい時間になっていました。 (1つ入力後、残りはコピー) 本当に、ありがとうございました。エクセルで3万行は扱えますよね。 グラフも使っているのですが、慣れの問題もあって、解析の用途にだけ です。ポスター用に他のソフト(Prism)などを使いたかったのですが、 3万行が扱えず、エクセルで量を減らせないか模索していたわけです。
お礼
SNAPPER さん、お答え大変ありがとうございました。 エクセル上でグラフを書くところまで、この方法でできました。 ただ、このグラフのMarkerを消して、データを線で結ぶ設定をすると グラフが消えてしまいました。 空欄を含めて行数が1/3になってもいないので、手持ちのグラフソフトも 使えませんでした。 しかしながら、お答え本当にありがとうございました。 この方法は別のところでぜひ応用させていただきたいです! m(__)m