- ベストアンサー
Excel 検索に関する関数について教えてください
色々と試しましたが、どうしてもうまくいかないので教えてください。 A列に休日を除いた日付(生産カレンダー)が入っています。 日付は手入力です。 A列 2008/5/14 2008/5/15 2008/5/16 2008/5/19 2008/5/20 2008/5/21 B1セルに任意の日付が入力された時、C1のセルに任意に入力されている数値分だけ前の日付をA列を参照してD1セルに表示したいのです。 例えばB1セルに2008/5/20、C1セルに3と入力された場合、D1セルには2008/5/20の3つ上のセルの値、2008/5/15を表示させたいのです。 生産カレンダーは列でなく、行にしても可です。 LOOKUP系やOFFSETなども複合したりして試してみましたが、うまくいきません。 ご教授よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 検索関数についてですが index関数とmatch関数の複合ででます T-KWさんの場合、a列に日付、b1に任意の日付、C1に数値、D1に結果表示ということでしたので、 式は以下のようになります。 =INDEX(A1:A6,MATCH(B1,A1:A6)-C1) しかし、これですと、数値がマイナスになったり、B1もしくはC1が空白の場合、エラーがでます。 エラー回避を組み込んだ式は以下のとおりです =IF(OR(B1="",C1=""),"",IF(MATCH(B1,A1:A6)-C1<=0,INDEX(A1:A6,1),INDEX(A1:A6,MATCH(B1,A1:A6)-C1))) なお、数値が0、INDEXの中の1の数値を変更すれば、それ以下になると一番最初の日付が出るようになります。 もちろん、範囲を配列(A列)だけにしても、Okです 関数はおく深いので、いろいろやってみるのもいいと思います がんばってください
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
利用関数が変わっただけですが、MATCH関数の代わりに LOOKUP関数を使ってやった。 例データ A列 B列 C列 D列 2008/5/14 2008/5/20 3 2008/5/15 2008/5/15 2008/5/16 2008/5/19 2008/5/20 2008/5/21 D1の式は =OFFSET(A1,LOOKUP(B1,$A$1:$A$100,ROW($A$1:$A$100))-C1-1,0)
お礼
回答、ありがとうございます。 色々な方法があるんですね。早速試してみます!
- mako_sea
- ベストアンサー率47% (62/130)
OFFSETを利用するなら、MATCH関数を利用すれば可能ですね。 =OFFSET(A1,MATCH(B1,A1:A6)-C1-1,0,1,1)
お礼
ありがとうございます。 OFFSET&MATCHでも出来ました!
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 因みに、B1、C1の正当性チェックは考慮していません。 =INDEX(A:A,MATCH(B1,A1:A10,0)-C1)
お礼
ありがとうございます。 やってみたら出来ました!
お礼
丁寧な回答、ありがとうございます。 しっかり理解して、今後に役立てます!