エクセルで日付毎の最大値を一覧表にしたい(再)

このQ&Aのポイント
  • エクセルで日付ごとに取得したデータから、8:00から20:00までの間の最低温度と最高温度を別の一覧表に抜き出す方法を教えてください。
  • 前回いただいた回答では、データの取得範囲に問題がありました。8:00から20:00までのデータを抜き出す方法を再度質問いたします。
  • データ処理を始めたところ、作業時間外のデータを除外したいことが分かりました。8:00から20:00までのデータのみを処理する方法を教えてください。
回答を見る
  • ベストアンサー

エクセルで日付毎の最大値・・を一覧表にしたい(再)

先日ここで、下記の質問をさせてもらって下記のご回答いただいた者です。 ご回答では、全部のデータが対象でこれでも良いかと締め切ったのですがやはり8:00-20:00までのデータ・・・でないと作業時間外の温度となってしまうので意味がなくなることが分かりましたので再度 質問させていただきます。 <前回の質問> エクセルの表で添付の左側の表のような、2つの部屋の温湿度が30分毎に一覧表になったシートがあります。 A列に日付、C列に部屋No①の温度、D列に部屋No①の湿度、E列、F列には部屋No②の温度、湿度が入っています。 この表から各日付の8:00から20:00までの間(可変なら非常にありがたい)の最低温度と最高温度を、右の表のように別の一覧表に抜きたいのですが。。。。 <ご回答> G6: =INT(A5) H6: =INDEX($A:$A,MATCH($G6&I6,INDEX(INT($A$1:$A$8788)&C$1:C$8788,),0)) I6: =MINIFS(C:C,$A:$A,">="&$G6,$A:$A,"<"&$G6+1) J6: =INDEX($A:$A,MATCH($G6&K6,INDEX(INT($A$1:$A$8788)&C$1:C$8788,),0)) K6: =MAXIFS(C:C,$A:$A,">="&$G6,$A:$A,"<"&$G6+1) L6: =INDEX($A:$A,MATCH($G6&M6,INDEX(INT($A$1:$A$8788)&D$1:D$8788,),0)) M6: =MINIFS(D:D,$A:$A,">="&$G6,$A:$A,"<"&$G6+1) N6: =INDEX($A:$A,MATCH($G6&O6,INDEX(INT($A$1:$A$8788)&D$1:D$8788,),0)) O6: =MAXIFS(D:D,$A:$A,">="&$G6,$A:$A,"<"&$G6+1) P6: =INDEX($A:$A,MATCH($G6&Q6,INDEX(INT($A$1:$A$8788)&E$1:E$8788,),0)) Q6: =MINIFS(E:E,$A:$A,">="&$G6,$A:$A,"<"&$G6+1) R6: =INDEX($A:$A,MATCH($G6&S6,INDEX(INT($A$1:$A$8788)&E$1:E$8788,),0)) S6: =MAXIFS(E:E,$A:$A,">="&$G6,$A:$A,"<"&$G6+1) T6: =INDEX($A:$A,MATCH($G6&U6,INDEX(INT($A$1:$A$8788)&F$1:F$8788,),0)) U6: =MINIFS(F:F,$A:$A,">="&$G6,$A:$A,"<"&$G6+1) V6: =INDEX($A:$A,MATCH($G6&W6,INDEX(INT($A$1:$A$8788)&F$1:F$8788,),0)) W6: =MAXIFS(F:F,$A:$A,">="&$G6,$A:$A,"<"&$G6+1) G7: =G6+1 H6:W6 を7行目へコピペ。 G7:W7 を纏めて下へコピペ。 ============================== ご回答に従ってデータを処理し始めたのですが、やはり8:00~20:00までのデータでないと意味がないことが分かりました。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (713/1473)
回答No.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 を想定して作りましたが、バージョンは何ですか。バージョンによっては数式を簡単にできるので、あった方がいいです。

akira0723
質問者

お礼

何度ものご回答ありがとうございます。 昼から確認して期待通りに動くことを確認しました。 関数は知っており、INDEXとMATCH関数を組みあわせて使用したこともあるのですが、今回は当方のレベルではいつもの試行錯誤では到底解決できない課題でした。 実は、昨夜試行錯誤で前回のご回答と組み合わせて何とかできる方法も手間さえかければ出来るようになりました。 最初にシートを細工して(シリアル値の少数以下をMOD関数で求めて)時分でフィルタした表にして前回のご回答と組み合わせると同じ結果が得られました。 これからこの表に続けて最低1年間のデータ(1700行以上)を扱う予定ですのでこのご回答は大変助かります。 尚、エクセルのVer,は2019です。 どなたかからも同じ指摘があったので今後は気を付けます。 本当にありがとうございました。

その他の回答 (2)

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.2

出来合いのいくつかの関数で実現することは困難で ゴリゴリとソースコードを書いて、 地道に集計、転記する必要があるものと思います。 コードを提示するのはヤブサカデハナイものの、 >右の表のように別の一覧表に抜きたい 最高、最低の温湿度の日時を特定する部分が曖昧です。 ある日の指定時間内(8:00から20:00までの間)に 最高温度となった時刻が複数ある場合です。 その場合、どの時刻を転記すればいいでしょうか? この時刻を転記しないのであれば、SQL文が使えるだろうことから 比較的少ないコードで実現できるだろうと思いますが 時刻を転記する場合は、そこそこにコードの行数がかさみましょう。

akira0723
質問者

お礼

いつもお世話になっております。 ご回答ありがとうございます。 想像に反し、簡単ではないこと、時間を扱ったことが無く無知に由来する質問の不備等々、ご迷惑をかけてしまいました。 どこかを手作業にすることで、教えて頂いたご回答との組み合わせで効率的に処理できるようですのでこれ以上のお手数はもったいなく、無用に願います。 ちなみにエクセルのVer,は2019で、日付は今後1年程度継続的にデータ採取して傾向確認する作業となります。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

質問者は初心者だろうと思う。 ーー 推測理由は、 ・前の質問番号が書いてない。前の質問が簡単には、見れない。 ・エクセルバージョンが書いてない。本件では使える関数を左右する。 ・データ例を画像で載せている。回答する場合、テストデータでテストするが、この作業が大変なのは、回答文を書いてみないとっ分らないと思う。 ・前の回答のようなのは、関数式もエクセルベテラン向きで、仕組や理由が理解できないだろう、と思う。条件が変わったりしたらお手上げーー>再質問となる。 それにも関わらず、式をコピペして、結果がよさそうなら、ありがとうと喜んでいる質問者の、ケースが多い。 ーー それで、少しやり方を変えて、やってみた。 前問の回答と比べ、路線変更の部分があると思うので、やる気がしないだろうが、無視しても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にして表(列)を作る。

akira0723
質問者

お礼

ご回答ありがとうございます。 質問文の書き方、エクセルのVer.の記載等申し訳なく、参考になりました。

関連するQ&A

  • エクセルで日付毎の最大値、最小値を一覧表にしたい

    こんいちは。 いつも大変お世話になっております。 エクセルの表で添付の左側の表のような、2つの部屋の温湿度が30分毎に一覧表になったシートがあります。 A列に日付、C列に部屋No①の温度、D列に部屋No①の湿度、E列、F列には部屋No②の温度、湿度が入っています。 この表から各日付の8:00から20:00までの間(可変なら非常にありがたい)の最低温度と最高温度を、右の表のように別の一覧表に抜きたいのですが。。。。 結果の表は同じシートでも別のシートでも構わないのですが、最低温度、最高温度の列が隣合わせに配置されれば助かります。 各最低、最高温度を一発でグラフにできますので。 複雑になるようなら作り易いレイアウトで構いません。 但し、1日のデータ数はきっちり48個でない場合も想定されます。 更に贅沢な希望(オプション)としてはデータの間隔(30分)に縛られないVBAがあれば言うことないのですが。 思いつく限りの要求を盛り込みましたので、結果の表で細工できるようなレイアウトなら何でもOKですのでお助けください。 このデータを半年以上取り続けるので手作業で探すのは無理だと思いますので。

  • 日付け毎の最大値

    EXCELの表に      A             B 1 2006/4/1 10:00:00     A 2 2006/4/1 19:00:00     B 3 2006/4/11 11:00:00     C 4 2006/4/11 17:00:00     D 5 2006/10/18 9:00:00     E 6 2006/10/18 20:00:00    F 7 2006/11/11 18:00:00    G のようにA列に日付け/時刻がはいっています。ここから日付けごとの一番遅い時間を抽出したいです。 抽出後は      A             B 1 2006/4/1 19:00:00      B 2 2006/4/11 17:00:00     D 3 2006/10/18 20:00:00    F 3 2006/11/11 18:00:00     G となります。日付け/時刻を関数で区切るなどして色々試したのですが思うような結果にはなりませんでした。 どなたかご教授お願いします。

  • エクセル 順位表

    エクセル 順位表 いつもお世話になります。 売上実績表の中に、順位表を追加したいのですが、実績表から抽出すると、同一の実績の営業所は、すべて同じ営業所になってしまい困っています。 A    B    C   D    E   F 営コード 実績      順位  営コード  実績 2     200   1   5  500 3   400   2   3  400 4   300   3   4  300 5   500   4   4  300 6   300   5   4  300 7    300 順位3、4、5位は、それぞれ4,6,7の営業所コードを表示したいのですが、どうしたらいいでしょうか。 F列には、F2=LARGE(B:B,ROW(A1)) E列には、E2=INDEX(A:A,MATCH(F2,B:B,0)) 営業所数は100程あり、ピボットテーブルを使用せずに作成したいです。 色々条件がついてますが、よろしくお願い致します。

  • エクセルで、複数の表から一覧表を作るには?

    エクセル初心者です。 会社で、毎月の経費を、科目/支払先別の表にしているのですが、最新の1年分を一つの一覧表にまとめなければなりません。 毎月の経費の表は、以下のようなイメージです。  A列    B列    C列 消耗品   A社   \○○○         B社   \○○○         C社   \○○○         D社   \○○○ 交通費   E社   \○○○         F社   \○○○… 支払先の会社は、毎月異なり、1月と3月はA社とC社があるが、 2月はB社とD社だけ…という感じです。 毎月作られているこの表を、以下のような一覧表にまとめなおしたいのです。  A列    B列    C列     D列    E列               (1月)   (2月)   (3月) 消耗品   A社   \○○○        \○○○         B社          \○○○              C社   \○○○        \○○○         D社          \○○○ \○○○ 交通費   E社   \○○○              F社   \○○○        \○○○ イメージとしては、A列の勘定科目ごとに、各月の表のB列から重複しないように支払先の会社名を抽出し、それを一覧表の項目として、金額は各月からVLOOKUP?で引っ張ってくる?ということができればいいな、と思っているのですが、どなたかいい方法をご存知の方はいませんか? ちなみに、各月の表はタブで分かれており、今後も毎月アップデートする予定ですので、その都度タブを追加する形になると思います。 使用しているExcelは2003です。 よろしくお願いします。

  • エクセルで一覧表を「縦横」に調べて該当する値を取り出す方法について

    Excel2002を使用しています。 下記のような表を作成し、「MATCH関数」と「INDEX関数」を使用して、該当の値(仮にα値:5.3、距離700とします)を取り出そうとしているのですが、エラーになってしまいます。 A B C D 1 3.4 3.5 3.6  2 700 30.0 30.4 30.7 3 750 31.1 31.6 31.9     4 800 32.3 32.8 33.2 5 6 α値 5.3     7 距離 700   この表から、行番号、列番号を出すために、以下の関数式を使っています。     行番号:=MATCH(B6,B1:D1)     列番号:=MATCH(B7,A2:A4)  最後に、「INDEX関数」で該当の値を取り出したいのですが、この「INDEX関数」の結果が「#REF!」になってしまいます。関数式は   =INDEX(B2:D4,D6,D7) ちなみに、D6には、行番号の関数式が、D7には、列番号の関数式が入っています。 このエラーを解消したいのですが、どなたか知恵を貸していただけませんでしょうか。よろしくお願いします。

  • 3つの表を1つに縦に連結する

    3つの表W、X、Yがあって、 これらの列を縦に連結して表Zに するにはどのようにすれば良いでしょうか? ちなみにDBはAccess2000です。 宜しくお願いします。 表W F1|F2 ----- A |B A |B 表X F1|F2 ----- C |D C |D 表Y F1|F2 ----- E |F E |F 表Z F1|F2 ----- A |B A |B C |D C |D E |F E |F

  • EXCEL

    A-B-C-D-E-F-G 1-A-W-A-1-B- 2-B-A-N-2-C- 3-C-K-A-3-B- 4-D-A-I-4-E- 5-E-R-X-5-A- 例えば,エクセルで表のようになっている場合に, 列AにF1の値(表の場合は文字B)で検索をかけ,検索に該当した行(表の場合では行2)の列Dの値をG1に表示する方法はあるでしょうか?? 簡単に言うと,列Gに自動的にFに対応するDの数値を入力したいのです.自動的に列Gを下の表のようにすることは可能でしょうか? A-B-C-D-E-F-G 1-A-W-A-1-B-2 2-B-A-N-2-C-3 3-C-K-A-3-B-2 4-D-A-I-4-E-5 5-E-R-X-5-A-4 投稿すると文字がずれてしまって表が見難くてすいません. どなたか,ご教授よろしくお願いします.

  • Excelの関数について教えてください。

    前にも同じような質問をしたのですが、よく理解できなかったので、もう一度質問させていただきます。 まず、A列に1~10まで入力します。次にB列に11~20まで入力します。同様にC列に21~30まで入力します。そして、セルE3に2、セルE5に12に入力します。 それから、セルE3の値をA列から検索し、セルE5の値をB列から検索し、その重なったB行のC列の値を求めたいのです。ここでは22になります。 自分なりに考えてみましたが、 =IF(MATCH(F3,A:A)=MATCH(F5,B:B),INDEX(A2:C10,MATCH(F3,A:A)=MATCH(F5,B:B),C:C,"")) ではエラーがでてしまいます。 いくら考えてもわかりません。 どなたか教えてください。よろしくお願いします。

  • (エクセル)日付に相当するデータを入力する

    シート1に以下のように、A列には氏名、C列に日付がランダムに入力されています。   A   B   C 1 山田     4/4 3:00 2 佐藤     4/3 2:00 3 石井     4/4 3:00 4 加藤     4/3 2:00 5 田中     4/1 5:00 シート2に上から順位に並び替えたいです   A   B   C   D   E   F   G 1          4/1    4/2    4/3   4/4   4/5 2  1   田中 4/1 5:00 3  2   佐藤         4/3 2:00 4  3   加藤         4/3 2:00 5  4   山田             4/4 3:00 6  5   石井             4/4 3:00 1行目のC~Gには既に4/1~4/5が入力されています。 対応するところに日付を入力し、さらにB列には氏名を表示したいです。 C2には「=IF(AND(SMALL(Sheet1!$C$1:$C$5,$A2)<D$1,SMALL(Sheet1!$C$1:$C$5,$A2)>=C$1),SMALL(Sheet1!$C$1:$C$5,$A2),"")」としてうまくいきました(C1:F6も同様)。 問題はB列なのですが、B2に「=INDEX(Sheet1!$A$1:$A$5,MATCH(SUM(C2:G2),Sheet1!$C$1:$C$5,0))」や「=INDEX(Sheet1!$A$1:$A$5,MATCH(SMALL(Sheet1!$C$1:$C$5,A2),Sheet1!$C$1:$C$5,0))」としても同じ失敗結果になりました。 両方とも、上から順に 田中 佐藤 佐藤 ←失敗(加藤が正解) 山田 山田 ←失敗(石井が正解) となってしまい、重複する日付が失敗してしまいます。 B列にどのようにしたら良いか教えてください。 よろしくお願いします。

  • EXCEL 3つ以上の条件による表引き

    ご覧いただきありがとうございます。EXCELでの表引きについて、お知恵をお貸しください。 通常、表引きは縦・横2つのキーを指定して行うものだと思うのですが、3つ以上の条件による表引きは可能でしょうか。具体的には以下のような表引きを行いたいのです。 次のような表があるものとしてください。    A  B   C    D   E    F   G 1    学年  01   01   02   02   03 2   クラス   01   01   01   01   01 3   番号   01   02   01   02   01 4 A校     792  766   26   284  570 5 B校     446  424   23   147  537 6 C校     757  745   12    85  270 7 8 A校 9   01 10  01 11  01 12  792 このような表で、A8~A11セルに学校名、学年、クラス、出席番号を入れるとA12セルに対応するデータが表示されるようにしたいのです。 A12セルに『{=INDEX(C4:G6,MATCH(A8,A4:A6,0),MATCH(A11,C3:G3,0))*((C1:G1=$A$9)*(C2:G2=$A$10)*(C3:G3=$A$11))}』 という式を入れてみたところ、A9~A11セルに01を入力したときだけデータが表示されますが、それ以外の場合はゼロが表示されます。良い関数式がお分かりになられる方がいらっしゃいましたら、どうかご教示ください。 別にシートを用意して、文字列の結合で横方向のキーを010101、010102…と加工した上で表引きするのが順当な方法だとは思うのですが、できればそういう中間的なシートは使わずに、もとのデータから直接表引きしたいと思っています。よろしくお願いいたします。 OS WindowsXP Home EXCEL 2002

専門家に質問してみよう