• ベストアンサー

ある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。 ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。 なければユーザー定義で作りたいと思っています。 VLOOKUP関数では一番左端が検索されますが、 それをある範囲まで拡張して、 その右隣の値を取得できるようにしたいのです。 どうかお知恵をお貸しください。

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

  • ベストアンサー
noname#52504
noname#52504
回答No.5

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す  =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1))) ※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定 ※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号 >その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。 というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、 場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。  ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー") ちなみに、VBAでやるならこんな感じになるかと。 動作の概要  【検査範囲】から【検査値】を探し、  最初にHITしたセルについて、右隣のセルの値を返す。  ex. =Sample(X1,A1:F200) '--------------------------↓ココカラ↓-------------------------- Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)  For Each セル In 検査範囲   If セル = 検査値 Then Exit For  Next セル  Sample = セル.Offset(0, 1) End Function '--------------------------↑ココマデ↑-------------------------- いずれもExcel2003で動作確認済。 以上ご参考まで。

MCF-777
質問者

お礼

ありがとうございました!できました! VBAをいじり始めてみたのですが、今ひとつだったので大変有り難いです。 関数も使ったことのないものを教えていただき、勉強になりました。 こころから感謝申し上げます。

その他の回答 (4)

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.4

#1です やはり、ご質問の内容を、変更することをお勧めします。 ばらばらに並んでいる、現在の元データをVlookupで検索できるように並び替えることを考えたほうが早いかもしれません。 例での氏名とIDで抽出可能な条件はありませんか? まずは行単位での抽出を考えましょう。

MCF-777
質問者

お礼

ありがとうございました。 また教えてください。

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

エクセルでは関数を使ってでは、抜き出しは苦手(式が複雑)です。 この質問コーナーで、私はimogasi方式という作業列を使うやり方でたくさん答えています。Googleで「imogasi方式」で照会すれば、OKWAVEでの同類の質問が相当数でで、そこには私以外の回答も出てきます。参考にしてください。 >ユーザー定義で作りたいと やってご覧よ。2つ以上の値を返すユーザー関数って、そうたやすく勉強できないよ。 (A)それよりある列の全セルをIF文で聞いて、該当かどうか調べて、該当なら、好みの列に1行ずつ下へずらして書き出す、を考えた方が格段に易しいよ。 上記(A)と絡めて、条件の第x番目の該当行を帰すユーザー関数を考えたら。

MCF-777
質問者

お礼

ありがとうござました。 また教えてください。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

INDEX関数とMATCH関数の組み合わせのことだと思います。 A   B 氏名 ID であった場合 D1にID入れて、E1に =INDEX(A:A,MATCH(D1,B:B),1) それぞれの関数の意味はHelpで調べてみてください。 そのほか、色々と使い道のある関数です。

MCF-777
質問者

お礼

ありがとうございます。 私が扱っているデータの具体的な例を挙げさせて頂きます。 まさし 00038 ゆみこ 00025 ひろし 00041 たろう 00040 というような形ではなく、 まさし 00038    ゆみこ 00025       ひろし 00041  欠席 たろう 00040 のように、バラバラに並んでいる形になっています。 関数の意味を見てみたのですが、どちらもA1:A200とかB1:B200という指定はできても、 A1:F200という指定はできないような気がするのです・・・。 氏名やIDがA列やB列にあるとは限らず、 ある人は氏名がC列にあったり、 またある人は氏名がD列にあったりします。 IDがそのすぐ隣にあることは保証されているのですが・・・。 どうぞよろしくお願いいたします。

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

いちばん簡単なのはある範囲をVlookupで検索できるように変更することです。 ある範囲が数列ならそれぞれ名前定義してVlookupで探して、なければ次の名前、なければ次の名前とするのも手かもしれません。 ある範囲の規模や並び方がわかればもう少し有効な策もあるかもしれないですね。

MCF-777
質問者

お礼

どうもありがとうございます。 「ある範囲」とは列が6列、行が200行ぐらいです。 検索したい値がA列にあるのか、B列にあるのか、まったくのランダムで、 B列にその値がある時も、その隣のA列のセルが、空白なのか、何か値が入っているのか、それもランダムになります。 その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。 どうぞよろしくお願いします。

関連するQ&A

  • EXCEL関数で値の範囲検索をしたい

    EXCEL関数で値の範囲検索をしたい お世話になっております。 シートに下記の表があります。    A    B    C 1  レベル MIN  MAX 2  1    0.3   0.7 3  2    0.8   1.2 4  3    1.3   1.7 5  4    1.8   2.2 6  5    2.3   2.7 7  6    2.8   3.2 8  7    3.3   10 たとえば、A10のセルに 1.5 と入力したら、その値がどのレベルの範囲であるのかを検索し、 レベルを返したいのです。 1.5のレベルは3なので、隣のA11のセルに 3 と表示する関数を作成したいのです。 値一致検索であればVLOOKUPを使えばいいのですが、 範囲検索はどうすればいいのかがわからなくて 質問しました。 ご教授おねがいいたします。

  • 特定のセルの値を返す関数を教えてください

    セルの値の検索といえばVLOOKUP関数ですが、 例えば条件にかなったセルの左上の値を返す・・・などといった 範囲が同じ行に無いものを返す関数などというのはあるのでしょうか? 知ってる方がいましたら教えてください。

  • ExcelのVlookup関数で一致した文字のセルの番地を取得する方法

    ExcelのVlookup関数で一致した文字のセルの番地を取得する方法 プログラム(VBA)で、検索で使用する関数でVlookup関数というのがあるというのが最近知ったのですが、Vlookup関数は、検索するセルの範囲を指定して、検索対象の文字列が一致した場合、そのセルの内容(値)を返すという風に書いてあったのですが、値ではなく、そのセルの番地を取得する方法はあるのでしょうか? ありましたら、その方法を詳しく教えてください。Vlookup関数以外でも検索するコードがあるようですが、Vlookup関数に限った場合でよろしくお願いします。 回答よろしくお願いします。

  • VBA★findを使って見つけたセルの値を取得

    AA="タナカ" Selection.Find(What:=AA, After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate 自動マクロでコレをつくりました。 タナカを見つけてその隣の変数を取得するというものを作りたいと思っています。 関数で言うとVlookupでやるものをマクロ化しようとしています。 検索して見つかったセルの右隣のセルの値を取得するにはどうしたらいいですか?

  • Vlookupの値のセル番地の表示

    エクセルのVlookup関数で、値を返したのですが、右隣の列にその値がどのセル番地にあったか表示させる方法はあるでしょうか? よろしくお願いいたします。

  • VLOOKUP関数の選択範囲にセルの値を入れたい

    エクセルのVLOOKUP関数の選択範囲にセルの値を入れることは出来ませんか? やりたい事は(画像参照) 1、現在の時刻に一番近い時間を検索して、現在の色を出す。 =VLOOKUP(現在時刻の入ったセル,B1:C50,1) 2、次に一番近くに来る赤の時間を表示する 1が何行目かを表示して、 =VLOOKUP("赤",A【表示したセル】:B50,2) にしたかったのですが、出来ませんでした。 わかりにくい説明ですが・・・わかる方、よろしくお願いします。 また、他に良い方法があれば教えてください。

  • vlookupの結果があるセルの書式を取得したい

    vlookupの結果があるセルの書式を取得したい =VLOOKUP(検索値,範囲,列番号,検索の型)で値を取ってくることは 出来ますが、その値の入っているセルの書式を取得したい。 Sheet1の セルA1に、検索したい値が入っていて、 セルB2にVLOOKUP関数が入り。 範囲はSheet2のA1:D1000となっていて、 列番号に4と入っていて10行目に 検索値と一致する値が入っていた場合に、D10の値は VLOOKUP関数で持ってこれますが、D10のセル書式を セルB2に反映させたいのですが、どのようにすれば良いでしょうか? VBAでプログラムしないとダメでしょうか?

  • VLOOKUP関数の結果セルの右下のセルを表示したい

    VLOOKUP関数について、質問させてください。 現在使っているエクセルのブックのセルA1にVLOOKUP関数を使用し、そのVLOOKUPの「範囲」の部分に、別のブックの範囲を入力しました。 そしてその別ブックの中の、VLOOKUPの検索値に該当するセル(ここでは※とします)の値が、現在使っているブックのセルA1に表れるところまでは出来ました。 しかし、今度は現在のブックのセルA3に、別ブックの※セルを基準に、右方向に1つ・下方向に1つ移動したセルの値が自動的に表示されるような関数を出さなくてはならず、OFFSET関数やADDRESS関数など、色々試してみたのですが分かりません。 遅い時間に申し訳ありませんが、関数にお詳しい方は、どうか知恵をお貸しください。 よろしくお願いします。

  • Excelで、指定した範囲の先頭のセルの値を取得するには?

    Excelで、指定したセル範囲(1列)で、空白を除いた先頭のセルの値を取得する 方法はありますでしょうか? できればマクロを使用せずに関数だけでできるほうがありがたいです。 例)  | A ------------ 1 |(空白) 2 | ○ 3 | △ 4 | × 5 | □ の場合、検索範囲にA1:A5 を指定すると、○が値として返ってくるような感じです。

  • excelで検索値の入っているセル番地を取得するには?

    お世話になります。 Excelの関数に関して質問させていただきます。 特定の範囲からある値を検索し、そのセルの番地(または行・列番号)を取得したいのですが、関数で可能でしょうか。 検索値は:ぢ --------------------------------------- |  あ  |  い  |  う  |  え  |  を  | --------------------------------------- |  だ  |  ぢ  |  づ  |  で  |  ど  | --------------------------------------- このとき"う"の入っているセルの番地(または行・列番号)を取得したい。 既出でしたらすいません。 よろしくお願いいたします。

専門家に質問してみよう