- ベストアンサー
EXCELのMAX関数について
日付の範囲を指定して最大値を求める方法はありますか? 7月1日から9月30日までの範囲で各月ごとに、 測定値の最大値を出したいと思っています。 ところがMAX関数を使うと、 3ヶ月間の間の最大値を出してしまい、 各月ごとに最大値を出すことができません。 もしも可能であれば、各月ごとに最大値を出す方法を教えてください。 私の希望のやり方としては、毎日事に当日までの最大値を出したいと思っています。 7月10日であれば、7月1日から7月10日までの最大値であり、 8月10日であれば、7月分は一切含まない、 8月1日から8月10日までの最大値を出したいと思っています。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2 jindon です。 長々と説明するのは好きではありませんが。 提示した配列数式の簡単な説明です。 1.A列の日付はシリアル値で入力されていることが条件です。 2.日付の並びは範囲内(A1:1:100)であれば、ランダム(前後しても)でかまいません。(日付がシリアル値だから)が、年をまたぐ(年の違った同月日付がある)場合は数式を下記に変える必要があります。 =MAX(IF((((YEAR(A2:A100)=YEAR(TODAY()))*MONTH(A2:A100)=MONTH(TODAY()))*(A2:A100<=TODAY())),B2:B100)) また、範囲を拡大する場合はA1:A100、B2:B100を同等に拡大してください。 A1からA100までの日付で 月がMONTH(TODAY()):今月 で、且つ <=TODAY():今日までのB列の最大値を返します。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
(1)A列に日付が入っているとします。正式な日付シリアル値であること。即ち2004/7/14のような入れ方で入れてあること。文字列などは不可。 (2)A列の日付順にデータが並んでいること。 最低月ごとに纏まっていて、月の順序ではあること でも良さそう。 (3)例えばB列に最大数を考えるデータがあるとします。B列以外の場合は(5)の式が変る。 (4)C列(どの列でも空き列であれば良い)に =MONTH(A1)といれて、下方向に複写します。これでそのデータの月の数字が出ます。 (5)D1に =MAX(OFFSET($D$1,MATCH(MONTH(A1),$B$1:$B$70,0)-1,0):D1) と入れて下へ複写します。 これでD列各行は同じ月の最上行から自分の行までの(B列計数の)最大数を表示します。 (6)$B$1:$B$70の70はA、B列データのデータ入力可能性のある最下行で置換えてください。 十分にテストして見てください。データの各行組み合わせで結果が変る問題ですから。 まあしかし、関数による解は、試行錯誤と思いつき的な手法が要ります。 VBAで組めば思いつく通りのロジックで組めます。 (A)直前までの最大値を覚えておいて、それと比べる (B)月が変ったか毎行判別して、変れば最大値を0にリセットして(A)をすれば良い。
お礼
やはり関数のみでは無理があるようですね。 といっても、皆さんのやり方でもうまく出来ましたが、 今後はマクロなども勉強したいと思います。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 日付がA列、データがB列にあるとします。 (1)月ごとの最大値 =MAX(IF(TEXT(A1:A50,"yyyymm")="200407",B1:B50)) と入力して、[Ctrl]+[Shift]+[Enter]で確定します。 (数式の両端に「{}」が付いて、配列数式になります。) これで、2004年の7月のデータの最大値が表示されます。 数式中の「200407」で年月を指定します。 現在の年月なら、数式中の「"200407"」を、 「TEXT(TODAY(),"yyyymm")」 に変更して下さい。 (2)ある日付までのその月のみの最大値 ある日付をD1に入力するとして、 =MAX(IF((A1:A50>D1-DAY(D1))*(A1:A50<=D1),B1:B50)) と入力して、やはり[Ctrl]+[Shift]+[Enter]で確定します。 どちらもデータ範囲は、適宜変更して下さい。
お礼
MAX関数は範囲のみしか指定できないと思っていました。 でも色々な使い方があるんですね。 創意工夫というか、今後はVBAも覚えます。 本当にありがとうございました。
- jindon
- ベストアンサー率43% (50/116)
A列に日付、B列に値 C1に今月の最大値 =MAX(IF(((MONTH(A2:A100)=MONTH(TODAY()))*(A2:A100<=TODAY())),B2:B100)) として、 Ctrl+Shift+Enter で確定
お礼
う~む、エクセルも奥が深いですね。 まだまだ覚えることもありそうです。 今回教えていただいたやり方で、 何パターンか試してみます。
- anmochi
- ベストアンサー率65% (1332/2045)
表の作り方にもよるが、そこまで細かな制御をしたいならマクロを書いた方が早いんではなかろうか。 あいまいな返答ですまぬ。
お礼
それではマクロの参考書でも買ってきて見ます。
お礼
中身の細かい説明まで有難う御座います。