• ベストアンサー

エクセルについての質問です。関数で可能かどうか

まずシート2の1行目に時間と上や下のデータがリアルタイムで5分おきに自動で入力されてきます。シート1にはあらかじめ作成した時間のみの表があります。関数でシート2のA列を参照にしてシート1の同じ時間のところに上や下のデータをコピーすることは可能でしょうか?5分おきにデータがくるので手作業はしない形が希望です。シート1の表の形も変えたくありません。マクロでは可能だと思いますが、そこまでのスキルがないため関数でできればと考えています。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

シート2に次々と5分ごとにデータが入力されるとしたら、お求めのシート1のシートでもシート2の変化に対応した表を時間の変化も含めて対応させ作成することが良いでしょう。すなわちシート1ではシート2のA列に入力された5分間隔での時間の最新の時間と最も古い時間を考慮して表を作成することにします。 表1では予め時間のデータを入力しておく必要はありません。 例えばシート2ではお示しのようにA1セルから下方に5分ごとに降順で、B1セルから下方には下、上などの入力がされているとします。 シート1ではA列からH列までに表を完成させるとしてA2セルには次の式を入力してH2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(LOOKUP(10^10,Sheet2!$A:$A)+"0:05"*(INT((COLUMN(A1)-1)/2)+ROW(A1)*4-4)>MAX(Sheet2!$A:$A)+"0:02","",IF(MOD(COLUMN(A1),2)=1,LOOKUP(10^10,Sheet2!$A:$A)+"0:05"*(INT((COLUMN(A1)-1)/2)+ROW(A1)*4-4),INDEX(Sheet2!$B:$B,MATCH(OFFSET(A2,0,-1)-"0:02",Sheet2!$A:$A,-1)))) これでシート1で予め時間を入力しておく必要もありませんし、シート2の範囲に無い時間は表示されません。 なお、上記の式で0:02などの時間が加えられたり引かれたりしていますが、これは時刻などの比較処理においては時刻のシリアル値の小数点以下の数値の比較にしばしば問題があることからそれを解消するために使っています。

mimiki30
質問者

お礼

解決しました。ありがとうございました。

その他の回答 (3)

noname#204879
noname#204879
回答No.3

1.Sheet1 のセル B2 に次の[条件付き書式]を設定     数式が   =ISERROR(B2)     フォント色 白 2.Sheet1 のセル B2 に次の配列数式を入力して、此れを[コピー]して、   Sheet1 のB、D、F、H列の各セルに[貼り付け     {=INDEX(Sheet2!$B$1:$B$300,MATCH(TEXT(A2,"h:m"),TEXT(Sheet2!$A$1:$A$300,"h:m"),0))}

回答No.2

こういうのはINDEX(MATCH)の式か、VLOOKUP関数で検索する典型例です。INDEX(MATCH)については、No.1さんが書かれているとおりです。VLOOKUPは列の位置に制約があったりしますが、だいたいINDEX(MATCH)と同じことができます。いずれも頻繁に使うので、覚えましょう。ベストアンサーは辞退します。

  • ka28mi
  • ベストアンサー率41% (969/2315)
回答No.1

シート1の上下データを入れたい場所、たとえばB1セルに「=INDEX(Sheet2!$A:$B,MATCH(Sheet1!A1,Sheet2!$A:$A,FALSE),2)」と入れます。 これは、シート2のA~B列を基表として、シート1のA1セルと同じ値が入っている行の2列目(つまりB列)の値を持ってこいという関数です。 アンマッチがなければ、これで問題ないと思います。 アンマッチがあった場合は、空白にしたいのかエラーにしたいのかで対応が変わります。ちなみに、上の式ではエラーになります。 蛇足ですが、エクセルの場合はバージョンを書いておかれた方がいいと思いますよ。 上の式でしたら、エクセル97の時代に既にあった関数ですので、まず問題ないと思います。

mimiki30
質問者

補足

空白にしたいのですが、どうすればよいのでしょう?エクセル2003

関連するQ&A