• ベストアンサー

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なども複合したりして試してみましたが、うまくいきません。 ご教授よろしくお願いします。

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

  • ベストアンサー
  • k_mori
  • ベストアンサー率62% (23/37)
回答No.3

こんにちは 検索関数についてですが 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です 関数はおく深いので、いろいろやってみるのもいいと思います がんばってください

T-KW
質問者

お礼

丁寧な回答、ありがとうございます。 しっかり理解して、今後に役立てます!

その他の回答 (3)

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

利用関数が変わっただけですが、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)

T-KW
質問者

お礼

回答、ありがとうございます。 色々な方法があるんですね。早速試してみます!

  • mako_sea
  • ベストアンサー率47% (62/130)
回答No.2

OFFSETを利用するなら、MATCH関数を利用すれば可能ですね。 =OFFSET(A1,MATCH(B1,A1:A6)-C1-1,0,1,1)

T-KW
質問者

お礼

ありがとうございます。 OFFSET&MATCHでも出来ました!

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 因みに、B1、C1の正当性チェックは考慮していません。 =INDEX(A:A,MATCH(B1,A1:A10,0)-C1)

T-KW
質問者

お礼

ありがとうございます。 やってみたら出来ました!

関連するQ&A