• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル・1秒ごとのデータを合計したい)

Excelで1秒ごとのデータを合計する方法

このQ&Aのポイント
  • Excelで1秒ごとのデータを合計する方法をご教授ください。
  • Excelファイルから1日に得ることのできた値の合計を出力したいです。
  • Excel2010を使用しているので、対応する数式を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.6

No5の回答ですが、区切り位置で対処する場合の添付画像を忘れていました。 ちなみに、配列数式で対応する場合は以下のような数式になります。 (A1セルが開始日で1万行までのデータの場合)。 =SUM((LEFT(A1:A10000,8)=TEXT(TEXT(LEFT($A$1,8),"0000!/00!/00")-1+ROW(A1),"yyyymmdd"))*(IF(A1:A10000<>"",RIGHT(A1:A10000,1)))*1) 配列数式ですので、入力後Ctrl+Shift+Enterで確定して下方向にオートフィルしてください。 再計算に時間がかかる場合は、「ファイル」「オプション」「数式」からブックの再計算を「手動」にしておいて、コピー貼り付け後にF9キーで再計算させると良いと思います。

tarte777
質問者

お礼

回答をくださってありがとうございます。 最小限の手間で、Excelに負担をかけずに目的の処理を行うことができました。 すばらしい回答をくださった方が多いのですが、こちらの方法で作業を進めていくことにしましたので、ベストアンサーとさせていただきます。

その他の回答 (5)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

ご希望の操作は配列数式を利用した関数でも表示できますが、今回のように、データが数万行に及ぶようなデータで、最終的に結果を表示するセル数が多くなると、再計算に時間がかかるなどの問題があります。 また今回のようなケースで補助列を使用して多数のセルに関数(特にセルごとに範囲を変更させたり、COUNTIFやMATCHなどの検索関数など)を入力すると、多量のメモリーを消費するためエクセルがハングアップするなどの問題が発生しますので関数だけで対応することはあまりお勧めできません(表示データ数が少ない場合は、配列数式を用いて計算したい時に再計算することで対応したほうが簡単な場合もあります)。 今回のケースでは、区切り位置の機能を利用してデータ処理し、それを簡単な関数で集計されることをお勧めします。 集計用シートのE1セルに以下の式を入力して下方向にオートフィルしておきます。 =TEXT(TEXT($A$1,"0000!/00!/00")-1+ROW(A1),"yyyymmdd")*1 同様にF1セルに以下の式を入力して下方向にオートフィルします。 =SUMIF(A:A,E1,C:C) このように準備しておいたシートのA列に元データをコピー貼り付けし、「データ」「区切り位置」で「スペースによって右または左・・・・・」にチェックを入れ「次へ」をクリックし、日付と時刻の間と時刻と数字の間に区切りを入れ「完了」します。 この操作を自動的に行いたいなら、マクロの記録で、A列を選択して上記の区切り位置の操作を行い、これをボタンに登録させるなどするのが良いかもしれません。

回答No.4

数式入力をマクロ化してみた Sub 数式で集計する()     '変数定義と最終行のセット     Dim n As Long     Dim i As Long     n = Cells(1, 1).End(xlDown).Row         '日付を取出し、数値化     With Range("B1:B" & n)         .Formula = "=TEXT(LEFT(A1,8),""0000-00-00"")*1"         .Value = .Value     End With         '目的の値を取出し、数値化     With Range("C1:C" & n)         .Formula = "=RIGHT(A1,LEN(A1)-FIND("" "",A1))*1"         .Value = .Value     End With         '連番を割り振り、数値化     Range("D1") = 1     With Range("D2:D" & n)         .Formula = "=(B2<>B1)+D1"         .Value = .Value     End With         '一個ずつ集計     For i = 1 To Range("D" & n)         Range("F" & i) = i         With Range("G" & i)             .FormulaR1C1 = "=SUMIF(C4,RC[-1],C3)"             .Value = .Value         End With     Next i     '不要列の削除     Columns("F:F").Delete     Columns("B:D").Delete End Sub 添付図は、不要列を削除してない

tarte777
質問者

お礼

回答をくださってありがとうございます。 マクロで処理する方法について、大変勉強になりました。感謝いたします。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

データの量が多くなれば計算も重くなりますのでできるだけ簡単な式を使って、作業列を使って対応することでしょう。次のようにしてはどうでしょう。 データは2行目から下方にあるとします。 E列からH列を作業列とします。 E2セルには次の式を入力します。 =MID(A2,8,1)*1 F2セルには次の式を入力します。 =RIGHT(A2,1)*1 G2セルには次の式を入力します。 =IF(E2<>E3,MAX(G$1:G1)+1,"") H2セルには次の式を入力します。 =IF(E2="","",IF(E2<>E1,F2,H1+F2)) お望みのデータをC列に表示させるとしてC2セルには次の式を入力します。 =IF(ROW(A1)>MAX(G:G),"",INDEX(H:H,MATCH(ROW(A1),G:G,0))) 最後のC2セルからH2セルまでを選択してから右クリックして「コピー」し、その後に名前ボックスがC2となっていますがそこを例えば50000行までのデータとしたらC2:C50000のように書き変えます。その後に「コピー」して貼り付けをすればよいでしょう。

tarte777
質問者

お礼

回答してくださってありがとうございます。 数式をシンプルにする工夫に、目から鱗が落ちる思いです。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

>移動量の多い人のデータを読み込ませたところ、Excelがハングアップしてしまいました。  ハングアップと言いますか、1秒間隔で1ヶ月分という事は、処理すべき元データが多過ぎて、処理にとんでもなく時間が掛かっているストールの状態の様な気もします。  ですから、 >元データのスリム化、求めるデータの単純化を図り、再度質問を投稿させていただきました。 とは言っても、元データの数自体は変わりありませんから、ストールに陥らないとは言い切れませんが、取り敢えず、スリム化したデータに合わせて、前回の質問(QNo.7078597)のANo.4で述べた方法を、修正した方法を回答させて頂きますので、御試し下さい。  まず、E1セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER(1/(LEFT(INDEX($A:$A,ROW()),14)+0>19010101000000)),ISNUMBER(REPLACE(INDEX($A:$A,ROW()),1,FIND(" ",INDEX($A:$A,ROW())),)+0)),SUBSTITUTE(TEXT(LEFT(INDEX($A:$A,ROW()),14),"????-??-?? ??A??A??"),"A",":")+0,"")  次に、F1セルに次の数式を入力して下さい。 =IF(ISNUMBER($E1),REPLACE(INDEX($A:$A,ROW()),1,FIND(" ",INDEX($A:$A,ROW())),)+0,"")  以降は、QNo.7078597のANo.4と同一になります。  次に、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日の移動量が、日付に関わらず、移動量が多い順に表示されます。

tarte777
質問者

お礼

2度も回答してくださってありがとうございます。 回答をくださったことに感謝します。

  • -9L9-
  • ベストアンサー率44% (1088/2422)
回答No.1

前回の質問(QNo.7078597)にも書きましたが、集計やピボットテーブルじゃダメなんですか? EXCEL2010なら約104万行までのデータが扱えるはずだし、データ量がそれを超えるのなら、ACCESSなどのデータベースソフトを使って、同じように集計機能やピボット機能を使えば簡単に集計はできるはずですが?

tarte777
質問者

補足

ご回答をくださってありがとうございます。 集計機能・ピボット機能を使うことは考えたのですが、例えば「20110401155957」といった文字列から4月1日をうまく指定する方法がわかりませんでした。 また、作業量が膨大であることから、事前に数式のみを入力したシートを用意しておいて、A列にテキストファイルからデータをコピーすれば結果が出力されるような状態にしたかったのです。 非常に勝手なお願いであることは承知していますが、Excelのスキルが乏しいためご容赦ください。