- ベストアンサー
大量のテキストファイルを処理して、日毎の移動距離を計算する方法
- 大量のテキストファイルを処理し、一日ごとの移動距離を計算する方法をご教授ください。
- テキストファイルにはスペースで分かれた4つの項目があり、一番左の項目には意味がありません。毎秒集計されたデータを1ヶ月分のファイルに収録しています。
- 同じ日付で記録された時速を合計し、その合計値を3600で割った数値を別ファイルで出力したいです。この処理を一気に行う方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その日の最初に記録された時刻における位置から、その日の最後に記録された時刻における位置までの距離を求めれば宜しいのでしょうか? Excelが使用可能なら次の様な方法は如何でしょうか。 まず、E1セルに次の数式を入力して下さい。 =IF(ISNUMBER(1/(MID(INDEX($A:$A,ROW()),FIND(" ",INDEX($A:$A,ROW()),FIND(":",INDEX($A:$A,ROW()))+2)+1,14)+0>19010101000000)),SUBSTITUTE(TEXT(MID(INDEX($A:$A,ROW()),FIND(" ",INDEX($A:$A,ROW()),FIND(":",INDEX($A:$A,ROW()))+2)+1,14),"????-??-?? ??A??A??"),"A",":")+0,"") 次に、F1セルに次の数式を入力して下さい。 =IF(AND(RIGHT(INDEX($A:$A,ROW()),10)<>"",ISNUMBER(SUBSTITUTE(RIGHT(INDEX($A:$A,ROW()),10)," ",)+0)),REPLACE(INDEX($A:$A,ROW()),1,FIND("゛",SUBSTITUTE(INDEX($A:$A,ROW())," ","゛",LEN(INDEX($A:$A,ROW()))-LEN(SUBSTITUTE(INDEX($A:$A,ROW())," ",)))),)+0,"") 次に、G1セルに次の数式を入力して下さい。 =IF(COUNTIF($E$1:$E1,">="&INT((0&$E1)+0))>1,IF(COUNT(INDEX($E:$E,ROW()-1),$E1,$F1)=3,$F1*($E1-INDEX($E:$E,ROW()-1))*24/3600,""),"") 次に、H1セルに次の数式を入力して下さい。 =IF(OR($E1="",INT((0&$E1)+0)=INT((0&$E2)+0)),"",SUMIF($E:$E,"<"&INT($E1)+1,$G:$G)-SUMIF($E:$E,"<"&INT($E1),$G:$G)) 次に、C1セルに次の数式を入力して下さい。 =IF(ROWS($1:1)>COUNT($H:$H),"",LARGE($H:$H,ROWS($1:1))) 次に、C1~H1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 後は、元のテキストファイルの文字列をまとめてコピーして、A列に貼り付けて下さい。 すると、C列に1日の移動量が、日付に関わらず、移動量が多い順に表示されます。
その他の回答 (3)
- basic_gg
- ベストアンサー率50% (14/28)
1秒に1回計測されたデータを1行にするとすれば、 1×3600×24=86400行(1日で) 1ヶ月なら86400×30=1092000行 私のエクセル2000では、読み込みません。 計算させるには、マクロで必要部分だけ読み込みます。 残念ながら、私の興味は引きません。 行末には、1秒間経過した時の時速が記録されている。 これが1時間経過した時の時速と考えれば、 動いた距離は簡単にでてきます。 単位が秒と時速の違いだけです。 1秒に1回計測されたデータをファイルに記録します。 1行分記録するのに、何秒かかるでしょう。 OSやソフトにより扱えるファイルサイズに限界があります。 1ヶ月なら何バイトになるでしょう。 で、あなたは何をしましたか? Excel2010を使うことができるのならば、 このテキストファイルが読み込みましたか? それさえもやっていませんね。
補足
私の言葉が足りなかった事をお詫びします。 私がご説明した作業自体は、エクセル2010を用いて行うことが可能でした。 ただ、本文に書きましたように、同じ作業を200人×半年分行う必要があるため、簡単にできる方法がないかと思ったのです。
- kagakusuki
- ベストアンサー率51% (2610/5101)
確認したいのですが、右端の項目は、移動距離ではなく、その時刻の瞬間における、時速で表した速度なのですね。 すると、添付画像のデータの場合、 「2011年09月01日の05時05分02秒~2011年09月01日の05時05分2.1秒の間は静止(時速0km)していて、 2011年09月01日の05時05分2.1秒~2011年09月01日の05時05分3.9秒の間は時速2kmで移動している」 という場合もあれば、 「2011年09月01日の05時05分02秒~2011年09月01日の05時05分2.9秒の間は静止(時速0km)していて、 2011年09月01日の05時05分2.1秒~2011年09月01日の05時05分3秒の間は時速2kmで移動している」 という場合もあれば、 「2011年09月01日の05時05分02秒の一瞬のみは静止(時速0km)していて、 2011年09月01日の05時05分3秒の一瞬のみは移動速度が時速2kmであるが、 それ以外の時刻は、平均時速100kmで移動している」 という事も考えられますから、瞬間速度のみの、途切れ途切れのデータでは、移動距離を正確に求める事は出来ないと思います。
補足
「05時05分02秒の時点で時速0kmで移動していた」という書き方が正確ではありませんでした。 一番右のデータは、1秒間の平均時速を表していますから、おっしゃるような心配はありません。「05時05分02秒の時点で」というのは、「05時05分01秒~05時05分02秒にかけての1秒間で」ということです。 誤解を招いてしまって申し訳ありません。
- -9L9-
- ベストアンサー率44% (1088/2422)
>今回ほしいのは「te001さんが1日にどれだけ移動したか?」というデータです。 >どの日付で何km移動したか、というデータは特に必要ありません。 これらを読み合わせると意味が分からなくなります。質問の図を見る限りはEXCELのコマンドとその結果に対する操作で簡単に抽出できると思いますが、そういうことを求めているのではないようで。 日付別に集計するのはEXCELやACCESSの集計コマンドやピボットテーブルコマンドで簡単にできますが、「日付別は必要ない」といわれると、何を求めているのかわからなくなります。質問において求める「一日に」の意味を詳しく説明願いたいです(平均?特定値の存否の確認?)。
補足
説明が足りず申し訳ありません。 まず、私が今回欲しいデータは、1日の移動量にどれだけバラつきがあるかということです。 最大値や最小値、平均値などを求める必要はありますが、「もっとも移動量が多かったのは9月10日です」といった事を調べる必要がないため、日付は必要ないと書かせていただきました。 また、エクセルを用いてこれらの作業をすることはできますが、約200人について半年分のデータを集計する必要があり、手作業ではとても無理だと考えました。そこで、プログラムを組むなどして自動的にこれらの処理を行えないかということです。 そのような方法は存在しないでしょうか。
お礼
大変な力作をありがとうございます。 E列ではA列から日付を、F列では時速を読み取っていて、G列では移動距離を算出し、H列ではその日の合計値を出力しているという理解で良いでしょうか。 実際に読み込ませたところ、私の求めていた結果が出力されました。 しかし、移動量の多い人のデータを読み込ませたところ、Excelがハングアップしてしまいました。そこで、元データのスリム化、求めるデータの単純化を図り、再度質問を投稿させていただきました。 解決した問題と同じような質問を繰り返す非礼をお詫びするとともに、今回、回答をくださったことを、心より感謝いたします。