重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Excelについての質問です。
Excelに詳しい方もし分かれば教えていただきたいです。

本日が4月1日と仮定して

ーは空白です

シート1


商品名 商品ID 日付 4月1日 4月2日....4月8日.....etc
テレビ A10 ーーーーーーー準備ーーー出荷
冷蔵庫 B10 ーーー 準備ーーーーーーー出荷
プリンタC23ーーーーーーーーーーー準備

と下と横に続くデータから

シート2
商品名 商品名ID
テレビ A10
冷蔵庫 B10

といったように一週間後出荷とセルに記入されているデータをシート2に抽出したいと考えております。

ただ当方の知識不足でIF関数などが試行錯誤して組んでは見たものの思うように作成できず困っております。

大変申し訳ないのですが関数又はその様に抽出する方法を教えて頂けたら大変助かります。
どうぞ宜しくお願い致します。

A 回答 (4件)

こんにちは!



一例です。
↓の画像のような配置になっているとします。
(便宜上Sheet1の日付始まりのC1セルは「本日」の日付としています)

Sheet2のA2セルに
=IFERROR(INDEX(Sheet1!A$1:A$1000,SMALL(IF(OFFSET(Sheet1!$A$1:$A$1000,,MATCH(TODAY()+7,Sheet1!$1:$1,0)-1)="出荷",ROW($A$1:$A$1000)),ROW(A1))),"")
配列数式になりますので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → Sheet2のA2セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。

最後のA2セルのフィルハンドルで列・行方向にコピーすると
画像のような感じになります。m(_ _)m
「今日の日付から一週間後のデータを別のシー」の回答画像2
    • good
    • 0

[No.3]へのコメント、


提示式中の「ROW(Sheet1!A$1:A$1000)」は少し冗長でした。
「ROW(A$1:A$1000)」に修正願います。(7文字分短くなる!)
    • good
    • 0

Sheet2 において、


A2: =IFERROR(INDEX(Sheet1!A:A,SMALL(IF(OFFSET(Sheet1!$A$1,,MATCH(TODAY()+7,Sheet1!$1:$1,0)-1,1000,)="出荷",ROW(Sheet1!A$1:A$1000),""),ROW(A1))),"")
【お断り】配列数式として入力のこと。

セル A2 を右および下方にオートフィル
「今日の日付から一週間後のデータを別のシー」の回答画像3
    • good
    • 0

エクセルの関数で実現するにはハードルが高すぎると思います。

出来なくはないけど、行詰めの必要がないある場合は、if文の入れ子がかなり深くなるので、速度的にも実用的ではないと思います。

行詰めに関しては、抽出した後に値として貼り付けし、並べかえを行う方法は、比較的軽くなります。

次に、1週間後の日付欄の特定ですが、アドレスを直接入力するセルを作り、indirect関数で参照されるのが簡単です。もし、日付の列も自動で作成する場合は、column関数などを使って特定し、そこにindirectで参照するといった形になるかとおもいます。

indirect関数は、特定のセルに入力されたアドレス文字列をアドレスと認識して参照してくれます。

でも、関数を使われるよりも、VBA(マクロ)を使う方が簡単にできると思いますよ。

考え方としては、4/1の欄をカレントセルとして、今日の日付+7日後の競ると一致するまで、offsetで繰り返していきます。同じセルにあたれば、今度は下方向に、出荷と書かれているのにセルかチェックし、その行の必要なデータをシート2に書き出すだけになります。

もし、マクロを使ったことがなければ、比較的簡単な処理なので、挑戦されてみるといい題材だと思いますよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!