- ベストアンサー
エクセルで日付毎の最大値を一覧表にしたい(再)
- エクセルで日付ごとに取得したデータから、8:00から20:00までの間の最低温度と最高温度を別の一覧表に抜き出す方法を教えてください。
- 前回いただいた回答では、データの取得範囲に問題がありました。8:00から20:00までのデータを抜き出す方法を再度質問いたします。
- データ処理を始めたところ、作業時間外のデータを除外したいことが分かりました。8:00から20:00までのデータのみを処理する方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず、画像の様に G2: 開始時間 G4: 終了時間 を入力します。 変更点だけ乗せます。 I6: =minifs(C:C,$A:$A,">="&$G6+$G$2,$A:$A,"<="&$G6+$G$4) K6: =maxifs(C:C,$A:$A,">="&$G6+$G$2,$A:$A,"<="&$G6+$G$4) M6: =minifs(D:D,$A:$A,">="&$G6+$G$2,$A:$A,"<="&$G6+$G$4) O6: =maxifs(D:D,$A:$A,">="&$G6+$G$2,$A:$A,"<="&$G6+$G$4) Q6: =minifs(E:E,$A:$A,">="&$G6+$G$2,$A:$A,"<="&$G6+$G$4) S6: =maxifs(E:E,$A:$A,">="&$G6+$G$2,$A:$A,"<="&$G6+$G$4) U6: =minifs(F:F,$A:$A,">="&$G6+$G$2,$A:$A,"<="&$G6+$G$4) W6: =maxifs(F:F,$A:$A,">="&$G6+$G$2,$A:$A,"<="&$G6+$G$4) ところで、Excel2019 を想定して作りましたが、バージョンは何ですか。バージョンによっては数式を簡単にできるので、あった方がいいです。
その他の回答 (2)
- HohoPapa
- ベストアンサー率65% (455/693)
出来合いのいくつかの関数で実現することは困難で ゴリゴリとソースコードを書いて、 地道に集計、転記する必要があるものと思います。 コードを提示するのはヤブサカデハナイものの、 >右の表のように別の一覧表に抜きたい 最高、最低の温湿度の日時を特定する部分が曖昧です。 ある日の指定時間内(8:00から20:00までの間)に 最高温度となった時刻が複数ある場合です。 その場合、どの時刻を転記すればいいでしょうか? この時刻を転記しないのであれば、SQL文が使えるだろうことから 比較的少ないコードで実現できるだろうと思いますが 時刻を転記する場合は、そこそこにコードの行数がかさみましょう。
お礼
いつもお世話になっております。 ご回答ありがとうございます。 想像に反し、簡単ではないこと、時間を扱ったことが無く無知に由来する質問の不備等々、ご迷惑をかけてしまいました。 どこかを手作業にすることで、教えて頂いたご回答との組み合わせで効率的に処理できるようですのでこれ以上のお手数はもったいなく、無用に願います。 ちなみにエクセルのVer,は2019で、日付は今後1年程度継続的にデータ採取して傾向確認する作業となります。
- imogasi
- ベストアンサー率27% (4737/17070)
質問者は初心者だろうと思う。 ーー 推測理由は、 ・前の質問番号が書いてない。前の質問が簡単には、見れない。 ・エクセルバージョンが書いてない。本件では使える関数を左右する。 ・データ例を画像で載せている。回答する場合、テストデータでテストするが、この作業が大変なのは、回答文を書いてみないとっ分らないと思う。 ・前の回答のようなのは、関数式もエクセルベテラン向きで、仕組や理由が理解できないだろう、と思う。条件が変わったりしたらお手上げーー>再質問となる。 それにも関わらず、式をコピペして、結果がよさそうなら、ありがとうと喜んでいる質問者の、ケースが多い。 ーー それで、少しやり方を変えて、やってみた。 前問の回答と比べ、路線変更の部分があると思うので、やる気がしないだろうが、無視してもOKだ。 小生エクセル2013を使っているので、WAXIFS関数が使えない。それでSIMPRODUCT関数を使わざるを得なかった。MAXIFS関数の方が易しい式になるが。 この回答も、SIMPRODUCT関数を使う点など、そう簡単には理解できない点はあろう(特にそうする「理由」を)。ましてベターかどうかなどは、判定は難しいだろうが。読者もいると思って、別の方法がある場合は、いつも挙げてるように、している。 ーー 「最高」温度しか回答してない。列配列も画像とは、ちがうので、式の番地部分を変えないといけない、という難しさがある。 質問の回答を使えるには、すこしは修正部分が必要で、それが判らないレベルでは、 質問して回答を得ても、無駄と思う 。 例データ Sheet1のA1:C17 日時 時刻 時刻温度 2022/1/1 9:00 12 2022/1/1 13:00 16 2022/1/1 16:00 17 2022/1/1 18:00 11 2022/1/1 23:30 10 2022/1/2 16:00 10 2022/1/2 18:00 13 2022/1/2 23:30 14 2022/1/3 16:00 9 2022/1/3 18:00 11 2022/1/3 23:30 7 2022/1/4 9:00 7 2022/1/4 13:00 10 2022/1/4 16:00 13 2022/1/4 20:00 11 2022/1/4 23:30 10 === 前作業(1) A列が、元データは、日+時刻のデータとなっている。しかし望むのは,「日ごと」の最高温度なので、日付だけの列が欲しい。 これを作るのは、作業列だが、作業列を作るのは望まない、などと、言わないでほしい。よくある。 前作業(2) 重複なく漏れのない、日付(だけの)データを作る。 下記を関数でやるのは、難しい式になるので、エクセル操作を使う。 その日付だけを分離した元のデータの列を対象に、 データーフィルター詳細設定ー抽出結果の範囲指定ー重複するレコードは無視するをONーOK これで指定列に 日時 2022/1/1 2022/1/2 2022/1/3 2022/1/4 がつくれる。重複なし、漏れなし。 (注意) そのとき。データ第1行目には、日時などの見出し文言を入れておくこと。 フィルタ結果を出す抽出先に指定した列の第1行目にも、それと同じ文言をコピペしておくこと。 == 以下が関数の内容に関する本番。 $J$6セルには、時刻シリアル値を入れておく。どこでも空きセルでよい。 式の中で、定数の定義でもよいが。 =TIMEVALUE("22:00") 夜10時以下のための夜10時の値です。 ーーー 関数式 結果=日限定、時刻条件指定、最高温度 =SUMPRODUCT(MAX(($A$2:$A$17=$F2)*($B$2:$B$17<$J$6 )*($C$2:$C$17))) これをフィルタした日数データ行数だけ式を複写する。 結果 日時 2022/1/1 2022/1/2 2022/1/3 2022/1/4 最高温度 17 13 11 13 == 日ごと最低のデータは、式のMAXの部分==>MINにして表(列)を作る。
お礼
ご回答ありがとうございます。 質問文の書き方、エクセルのVer.の記載等申し訳なく、参考になりました。
お礼
何度ものご回答ありがとうございます。 昼から確認して期待通りに動くことを確認しました。 関数は知っており、INDEXとMATCH関数を組みあわせて使用したこともあるのですが、今回は当方のレベルではいつもの試行錯誤では到底解決できない課題でした。 実は、昨夜試行錯誤で前回のご回答と組み合わせて何とかできる方法も手間さえかければ出来るようになりました。 最初にシートを細工して(シリアル値の少数以下をMOD関数で求めて)時分でフィルタした表にして前回のご回答と組み合わせると同じ結果が得られました。 これからこの表に続けて最低1年間のデータ(1700行以上)を扱う予定ですのでこのご回答は大変助かります。 尚、エクセルのVer,は2019です。 どなたかからも同じ指摘があったので今後は気を付けます。 本当にありがとうございました。