excelの関数・マクロに関する質問です。


A3から2010/1/22 0:30、A4に2010/1/22 1:00、A5に2010/1/22 1:30と30分ごとの時系列が入力されており、それがA22274の2011/5/1 0:00まで入力されています。
そして、B列の同行にその時間に対応する気象データが入力されています。

その気象データを2010/1/22 0:30、2010/1/23 0:30、2010/1/24 0:30・・・・・2011/4/30 0:30と同じ時間帯だけの平均値をとりたいです。
それを1:00、1:30・・・・23:30、0:00とすべての時間帯ごとで平均したいと思っております。

関数を入力する列はお任せ致します。

この計算が出来るのであれば、マクロでも関数でも構いません。
どうぞよろしくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/11/07 13:29:13
  • 終了:2012/11/08 13:39:01

ベストアンサー

id:Silvanus No.1

Silvanus回答回数174ベストアンサー獲得回数672012/11/07 13:56:18

ポイント200pt

きっともっとスマートな方法があるんでしょうけど、これで一応出来ます。
(1) C3に"=TIME(HOUR(A3),MINUTE(A3),0)"を記入
(2) C3をC4:C22274ペイスト
(3) 例えばE1からE48に向けて「0:00」「0:30」…「23:30」と記入
(4) F1に「=SUMIF(C:C,E1,B:B)」を記入
(5) F1をF48までペイスト
記入した各セルの時刻表示書式設定は適宜行なって下さい。
-----
【訂正】
(4) F1に「=AVERAGEIF(C:C,E1,B:B)」を記入
※下の画像では、集計部分の3行目以降にしてあります(E3:F50)。

他7件のコメントを見る
id:wakagaeri1

お返事遅れてすみません。
気象データの中にエラー値が入っていたのが原因でした。

懇切丁寧な説明ありがとうございました!

2012/11/08 13:37:28
id:Silvanus

上手く行った様で何よりです!
エラー値が混入されてましたか、なるほど。
もし、今回質問された処理を今後も繰り返し行う必要があって、
かつ、データの中にエラー値が混入することが避けられないのであれば
D列に「=IF(ISERROR(B3),"",B3)」(※これはセルD3へ入力する例)の
様な式を入力しておき、平均の式を「=AVERAGEIF(C:C,E1,D:D)」と
変更してやればOKではないかと思います。

2012/11/08 14:09:35

その他の回答(1件)

id:Silvanus No.1

Silvanus回答回数174ベストアンサー獲得回数672012/11/07 13:56:18ここでベストアンサー

ポイント200pt

きっともっとスマートな方法があるんでしょうけど、これで一応出来ます。
(1) C3に"=TIME(HOUR(A3),MINUTE(A3),0)"を記入
(2) C3をC4:C22274ペイスト
(3) 例えばE1からE48に向けて「0:00」「0:30」…「23:30」と記入
(4) F1に「=SUMIF(C:C,E1,B:B)」を記入
(5) F1をF48までペイスト
記入した各セルの時刻表示書式設定は適宜行なって下さい。
-----
【訂正】
(4) F1に「=AVERAGEIF(C:C,E1,B:B)」を記入
※下の画像では、集計部分の3行目以降にしてあります(E3:F50)。

他7件のコメントを見る
id:wakagaeri1

お返事遅れてすみません。
気象データの中にエラー値が入っていたのが原因でした。

懇切丁寧な説明ありがとうございました!

2012/11/08 13:37:28
id:Silvanus

上手く行った様で何よりです!
エラー値が混入されてましたか、なるほど。
もし、今回質問された処理を今後も繰り返し行う必要があって、
かつ、データの中にエラー値が混入することが避けられないのであれば
D列に「=IF(ISERROR(B3),"",B3)」(※これはセルD3へ入力する例)の
様な式を入力しておき、平均の式を「=AVERAGEIF(C:C,E1,D:D)」と
変更してやればOKではないかと思います。

2012/11/08 14:09:35
id:wakagaeri1

回答ありがとうございます。

しかし、データが入っていないセルが多数あるので#DIV/0!となります。
解決方法ありますでしょうか?

id:sanada33 No.2

みかん回答回数293ベストアンサー獲得回数32012/11/07 23:12:00

1) C3に"=TIME(HOUR(A3),MINUTE(A3),0)"を記入
(2) C3をC4:C22274ペイスト
(3) 例えばE1からE48に向けて「0:00」「0:30」…「23:30」と記入
(4) F1に「=SUMIF(C:C,E1,B:B)」を記入
(5) F1をF48までペイスト

  • id:windofjuly
    うぃんど 2012/11/07 19:34:40
    お二人が妙ににぎにぎしいので、邪魔するのは気が引けるのですが…(笑)

    Silvanusさんの回答の(4)のsumifを、
    2007以降限定でよければAVERAGEIFSに変更。
    http://office.microsoft.com/ja-jp/excel-help/HA010047493.aspx
    2003までであればSUMPRODUCT…)/COUNTIF(…)に変更。
  • id:Silvanus
    そんな風に気を遣われなくともww。
    AVERAGEIFをAVERAGEIFSにしただけでは結果は変わらないんじゃありませんか?
    両者の違いは単に、検索条件を複数にできるか否かだけであって、
    第3引数までの記述なら、処理内容に差はなかったのでは? 違いましたっけ?
    SUMPRODUCT関数の部分は良いとして、COUNTIFを用いて処理するためには、
    IF関数を用いてB列のデータの有無に依存して予めC列に
    「TIME関数(or TEXT関数)」か「別のダミー値(orナルストリング)」を
    記入しておかないといけないんじゃないでしょうか?
  • id:windofjuly
    うぃんど 2012/11/07 20:50:40
    回答No.1に【訂正】以下が入る前の状態を見てたのでAVERAGEIFSとかコメントしました。
    Excelのバージョンも不明なので最後のほうは手抜きです。
  • id:Silvanus
    失礼いたしました<o>。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません