Excelで1秒ごとのデータを合計する方法
- Excelで1秒ごとのデータを合計する方法をご教授ください。
- Excelファイルから1日に得ることのできた値の合計を出力したいです。
- Excel2010を使用しているので、対応する数式を教えてください。
- ベストアンサー
エクセル・1秒ごとのデータを合計したい
画像左のようなExcelファイルがあるとします。(現在C列は空白だと考えてください。) A1セルは、2011年04月01日の15時59分57秒に、「2」という値を得たという意味です。 その1秒後には「5」を、そしてさらに1秒後には「6」を得ていることになります。 今回、このExcelファイルから私が欲しい情報は、「1日に得ることのできた値の合計」です。 つまり、9月1日には「2655」を得て、9月2日には「1781」を得ることができた、といったデータを、C列のように出力して欲しいのです。 しかし、その合計値を表示する順番については気にしません。つまり、日付順や値の大きい順など、どんな順番で並んでいてもかまいません。 このような作業をこなすための数式などをご存知の方、是非ご教授ください。 使用しているのはExcel2010です。
- tarte777
- お礼率27% (21/77)
- その他MS Office製品
- 回答数6
- ありがとう数4
- みんなの回答 (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キーで再計算させると良いと思います。
その他の回答 (5)
- MackyNo1
- ベストアンサー率53% (1521/2850)
ご希望の操作は配列数式を利用した関数でも表示できますが、今回のように、データが数万行に及ぶようなデータで、最終的に結果を表示するセル数が多くなると、再計算に時間がかかるなどの問題があります。 また今回のようなケースで補助列を使用して多数のセルに関数(特にセルごとに範囲を変更させたり、COUNTIFやMATCHなどの検索関数など)を入力すると、多量のメモリーを消費するためエクセルがハングアップするなどの問題が発生しますので関数だけで対応することはあまりお勧めできません(表示データ数が少ない場合は、配列数式を用いて計算したい時に再計算することで対応したほうが簡単な場合もあります)。 今回のケースでは、区切り位置の機能を利用してデータ処理し、それを簡単な関数で集計されることをお勧めします。 集計用シートのE1セルに以下の式を入力して下方向にオートフィルしておきます。 =TEXT(TEXT($A$1,"0000!/00!/00")-1+ROW(A1),"yyyymmdd")*1 同様にF1セルに以下の式を入力して下方向にオートフィルします。 =SUMIF(A:A,E1,C:C) このように準備しておいたシートのA列に元データをコピー貼り付けし、「データ」「区切り位置」で「スペースによって右または左・・・・・」にチェックを入れ「次へ」をクリックし、日付と時刻の間と時刻と数字の間に区切りを入れ「完了」します。 この操作を自動的に行いたいなら、マクロの記録で、A列を選択して上記の区切り位置の操作を行い、これをボタンに登録させるなどするのが良いかもしれません。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
数式入力をマクロ化してみた 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 添付図は、不要列を削除してない
お礼
回答をくださってありがとうございます。 マクロで処理する方法について、大変勉強になりました。感謝いたします。
- KURUMITO
- ベストアンサー率42% (1835/4283)
データの量が多くなれば計算も重くなりますのでできるだけ簡単な式を使って、作業列を使って対応することでしょう。次のようにしてはどうでしょう。 データは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のように書き変えます。その後に「コピー」して貼り付けをすればよいでしょう。
お礼
回答してくださってありがとうございます。 数式をシンプルにする工夫に、目から鱗が落ちる思いです。
- kagakusuki
- ベストアンサー率51% (2610/5101)
>移動量の多い人のデータを読み込ませたところ、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日の移動量が、日付に関わらず、移動量が多い順に表示されます。
お礼
2度も回答してくださってありがとうございます。 回答をくださったことに感謝します。
- -9L9-
- ベストアンサー率44% (1088/2422)
前回の質問(QNo.7078597)にも書きましたが、集計やピボットテーブルじゃダメなんですか? EXCEL2010なら約104万行までのデータが扱えるはずだし、データ量がそれを超えるのなら、ACCESSなどのデータベースソフトを使って、同じように集計機能やピボット機能を使えば簡単に集計はできるはずですが?
補足
ご回答をくださってありがとうございます。 集計機能・ピボット機能を使うことは考えたのですが、例えば「20110401155957」といった文字列から4月1日をうまく指定する方法がわかりませんでした。 また、作業量が膨大であることから、事前に数式のみを入力したシートを用意しておいて、A列にテキストファイルからデータをコピーすれば結果が出力されるような状態にしたかったのです。 非常に勝手なお願いであることは承知していますが、Excelのスキルが乏しいためご容赦ください。
関連するQ&A
- 日付に対応した○と×の合計を求めたい。Excel 2003です。
日付に対応した○と×の合計を求めたい。Excel 2003です。 ○と×の合計はCOUNTIFで求められるのですが、「4/1の」という条件はどのようにしたらよいのでしょうか。よろしくお願いします。 A列 B列 C列 4/1 ○ 4/1 ←空白 4/1 × 4/1 ○ 4/2 ○ 4/2 ○ 4/2 × 4/2 ←空白 4/2 × 4/3 ○ 4/3 × 求めたい結果 4/1 4/2 4/3 3 4 2
- ベストアンサー
- Windows XP
- Excelで表のある日以前の値を合計する sumif?
こんにちは。 ExcelでA列の1行目に2010/1/1から31行目に2010/1/31まで、日付が並んでいます。 B列の1行目に1から31行目に31まで、1ずつ増える数字が並んでいます。 セルC1に2010/1/10と入力した場合に、セルD1に55と返すような数式を書きたいと思っています。 要するに、セルC1から以前の日をA列で見つけて、同じ行のB列の値を合計したいのです。 sumifを使ってみましたが、うまくいきません。 ご指導、お願いいたします。
- ベストアンサー
- その他MS Office製品
- Excelで日付が入っていたら金額を合計したい
Excel2007を使用しています。 支払い報告書をエクセルで作ろうとしています。 D列に金額を入れ E列に実際に支払った日付(10/18と入力します)を入力すると セルB2の支払済合計額に合計金額が入るようにしたいです。 またE列に日付を入力せずにいると セルC2の支払い予定額が入るようにしたいです。 なおE列には日付以外にキャンセルとか支払い不要とか 日付以外も入るので日付が入った場合のみ支払合計額に、 空白の時は支払い予定額に それ以外の場合はどこにも加算されないようにというのが希望です。 SUMIFなどを使って自分なりに関数を作ってみましたが イマイチ出来ませんでした。 よろしくお願いします。
- 締切済み
- その他MS Office製品
- エクセル:日付単位での合計
お世話になります。 A、B列に日付が入っています。 (A列に月、B列に日)C列に数値が入っています。 1日1行とは限らない。 同じ日付の最終行のD列にC列にある数値の合計を出す。(1日ごとの数値の合計) 途中に空白セルはない。 しかし後で行の挿入をする可能性があります。 例) A2~A50までは4→4月という意味 A51~は 5→5月という意味 B2~B5までは 1→1日という意味 B6~B8までは 2→2日という意味 B9~B12までは3→3日という意味 ・・・と続き B48~B50までは30→30日 この場合 4月1日の合計をD5に、4月2日の合計をD8、4月3日の合計をD12に入れる。(D2~D4は空白にする) A51からは5月になるのでD50には4月30日の合計を入れる。 4月1日の次に5月1日のデータが入力される可能性もあるので、日が変わる場合だけでなく月が変われば合計を出すことに対応したい。 また例えば行番号6に4月1日のデータがあとから挿入される場合にもきちんと合計が出るようにしたい。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- EXCEL 2003で条件に合った合計を求めたい
______A ____B____ C_____D 1___111___ 1 ___10___ 60 2___111___ 2 ___10 3___222___ 2 ___10 4___333___ 1 ___10 5___333___ 2 ___10 6___333___ 3 ___10 7___444___ 1 ___10 8___444___ 3 ___10 9___555___ 1 ___10 Excel 2003環境において、上記A1:C9を対象に関数で下記条件を元に数式をD1に入力して値を求めたいです。 条件: A列の同じ値のセルを一つのグループとし、かつその中で、B列で1から始まる連番となっているグループを対象にC列のセルを合計する。 上記のセル範囲で条件に合う行は1,2,4,5,6,9行目で答えは60になります。 SUMPRODUCT関数やIF関数を併用してみましたが、うまく作ることができませんでした。 なんとか作業列やVBAを用いずに一つの数式で済ませたいです。 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- Excelの条件検索による合計計算
ExcelでA列に日付、B列に商品名、C列に売上金額を入れて、日々の売上管理をしています。最大でも500行と仮定します。 B列のりんごの合計、みかんの合計など商品ごとの合計を算出したいと考えています。B列の商品ごとの合計です。 この場合には、どの様な関数・数式を使用するのでしょうか? 宜しくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- EXCEL 日付の合計
久しぶりに失礼します。 EXCELにて以下のような表があります。 A B 9/1 7000 7000 9/2 8000 8000 8000 9/3 9000 9000 これを、日付別に合計集計したいのですが 下記のように 9/1 14000 9/2 24000 9/3 18000 最初の表の日付(9/1等)の下は空白です 日付列Aの空白は次の日付が入力されるまでは上の日付 とみなします。 どのような条件付けをすればよいのか、ご教授下さい。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- Excelの複数条件の合計
Excel2010で、複数条件で合計を出したいのですが、例えば、 A|B|C 2001|1|125 2001|1|100 2001|2|95 2001|2|75 2001|2|50 2001|3|105 2001|3|125 2001|3|100 このような数列の場合、A列の「2001」とB列の「1」と条件が合うC列の値の合計を求めるというものです。 回答よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- EXCELでの条件付き合計
EXCELで以下のような表を作成しました。 ・日付の行数はランダムです。 (無い日付もあれば複数行ある日付もあります) ・日付の列,金額の列にはそれぞれ”日付”,”金額”と名前をつけています。 ある日付からある日付までの金額の合計を計算したいと考えています。 SUMIF関数を使用すればできそうだということはわかるのですが, 日付の条件をどのように入力すればいいのかがよくわかりません。 どのように入力すればいいのでしょうか? 日付 金額 12月1日 123 12月15日 962 12月31日 56
- ベストアンサー
- オフィス系ソフト
お礼
回答をくださってありがとうございます。 最小限の手間で、Excelに負担をかけずに目的の処理を行うことができました。 すばらしい回答をくださった方が多いのですが、こちらの方法で作業を進めていくことにしましたので、ベストアンサーとさせていただきます。