人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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とすべての時間帯ごとで平均したいと思っております。

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

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

●質問者: wakagaeri1
●カテゴリ:コンピュータ 科学・統計資料
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Silvanus
●200ポイント ベストアンサー

きっともっとスマートな方法があるんでしょうけど、これで一応出来ます。
(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)。


a-kuma3さんのコメント
(1) は、=TEXT(A3,"HH:mm") とする手もありますね。

Silvanusさんのコメント
> a-kuma3さん そうすると、E1:E48に入力する値が文字列として認識されていないと ダメなんじゃないかと思ってTIME関数を使った回答をしたのですが、 今やってみたら全く問題無く出来ますね。有り難うございます。

a-kuma3さんのコメント
あ、本当だ。 ぼくの想定だと、Silvanus さんの回答にある (3) が文字列表現になってる、という想定だったんですが (^^ゞ

Silvanusさんのコメント
Excelさんの独り勝ち(!?)ですねw

Silvanusさんのコメント
オ?、ノ?!、ご質問で「平均」(AverageIf)と書かれていらっしゃるのに 「合計」(SumIf)でお答えしてしまいました…orz。ゴメンナサイ…。 既に、上記(4)の"SUMIF"を"AVERAGEIF"に読み換えて 入力していただいている様ですね。本当にスミマセン…。 で、#DIV/0!が出て来るとのことですが、 ということは特定の時刻(例えば午前1時30分)に 全くデータが存在しない、ということになろうかと思いますが それで間違いございませんか? エラー値を表示させずに空白のママ置いておくのであれば (4)を「=IF(ISERROR(AVERAGEIF(C:C,E1,B:B)),"",AVERAGEIF(C:C,E1,B:B))」としてみて下さい。 wakagaeri1さんのコメントを、私が きちんと理解できていない様な気がして不安です…。

wakagaeri1さんのコメント
説明がへたくそですみません。 特定の時刻(例えば午前1時30分)に 全くデータが存在しない、ということはないですね! ない場合はエラーで大丈夫です。 そこで、 =AVERAGEIF(C:C,E1,B:B) でやるとすべてエラーになるため =AVERAGE(IF(C:C,E1,B:B)) でやってみたのですが、SUMIFと結果が変わらないのはなぜでしょう・・・

Silvanusさんのコメント
「=AVERAGE(IF(C:C,E1,B:B))」は全く意味が変わってきますので×として、 手元では「=AVERAGEIF(C:C,E1,B:B)」でエラー値にならず 上手くいってるんですけどね…。 SUMIFなら上手く行くのであれば、AVERAGEIFもOKなはずなんだけどなぁ。 ひとつ考えられるのはE1:E48の入力内容が時間シリアル値として 認識されていない可能性がある、ということでしょうか。 E1:E48の書式設定を「時刻」の他の表示形式(例えばAM/PM付き)などに 変換してみて下さい。その設定の変更に応じて、表示が変更されればOKですが そうでない場合は、E1:E48が文字列として認識されているかも知れません。 その場合は、改めて時刻として入力し直していただくか 上記のa-kuma3さんのコメの様に変更してみてはいかがでしょうか。

wakagaeri1さんのコメント
お返事遅れてすみません。 気象データの中にエラー値が入っていたのが原因でした。 懇切丁寧な説明ありがとうございました!

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

質問者から

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

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


2 ● みかん
●0ポイント

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までペイスト

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ