• ベストアンサー

Excel:LOOKUP関数を使って、右のセルの値を返したい

今までVLOOKUP関数を使っていたんですが、 どの列の値を返すのではなく、 右のセルの値を返したいときは どういった関数を使えばいいのでしょうか?

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

  • ベストアンサー
  • runbini
  • ベストアンサー率36% (48/130)
回答No.7

#4と#5です。 =IF(COUNTIF(A1:F4,G1)>1,"重複",INDEX(A1:F4,SUMPRODUCT((G1=A1:F4)*(ROW(A1:F4))),SUMPRODUCT((G1=A1:F4)*(COLUMN(A1:F4)))+1)) 関数でするならこちらの方がいいかなと思います。 この数式の範囲はすべてA1:F4です。 範囲が2行目から始まるなら =IF(COUNTIF(A2:F5,G1)>1,"重複",INDEX(A2:F5,SUMPRODUCT((G1=A2:F5)*(ROW(A2:F5)))-1,SUMPRODUCT((G1=A2:F5)*(COLUMN(A2:F5)))+1)) と、マイナス1を付け加えてくださいね。

その他の回答 (6)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

いちおうエラーチェックが甘いですが、 ユーザー定義関数を作ってみました。 例 =exVlookup("くく",A1:F4,2,2) Function exVlookup(検索値, 範囲 As Range, 列, 範囲の幅) Dim i, j For i = 1 To 範囲.Rows.Count For j = 1 To 範囲.Columns.Count Step 範囲の幅 If 範囲.Cells(i, j) = 検索値 Then exVlookup = 範囲.Cells(i, j + 列 - 1) Exit Function End If Next j Next i exVlookup = CVErr(5000) 'N/Aを返したいが… End Function ちなみに#4の方法だと、同じ値が有った時にエラーになればいいけど、ならずにでたらめの値が返る場合があります。 また、存在しない値を検索した場合もエラーにならずに、最初のセル(ああ)が返ります。 A1から始まる範囲でない場合もう一工夫必要。

doracken
質問者

お礼

お礼が遅れて申し訳ないです。 意味を飲み込もうとして頭が割れそうなのでもうしばらくお待ちを・・・

noname#9284
noname#9284
回答No.5

#4ですが、言い忘れました。 G1に検索値を入力してくださいね。

noname#9284
noname#9284
回答No.4

複数列から検索する場合、 =INDEX(A1:F4,SUMPRODUCT((G1=A1:F4)*(ROW(A1:F4))),SUMPRODUCT((G1=A1:F4)*(COLUMN(A1:F4)))+1) としてみてください。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#1の補足のような配置になっている場合、標準の関数ではできないと思います。 VBAでユーザー関数を作ればできるとは思いますが。

  • hikson
  • ベストアンサー率27% (9/33)
回答No.2

右のセルの値とは検査範囲の右という意味ですか? LOOKUP関数をつかえばよいのでは? 返す値を検査範囲の右の列に指定すれば結果的に右のセルの値が返ってくるはずですけど???

noname#9268
noname#9268
回答No.1

質問の意味がはっきり分からないので予測で書きますが・・・ どの列の値を返すのではなく とは その列の値を返すのではなく と考えて、 検索して見つかった値の右のセルの値を返したいと仮定します。 たとえば   A   B 1 ああ  1 2 いい  2 3 うう  3 4 ええ  4 で =VLOOKUP("ああ",A1:A4,1,FALSE) とすると結果は"ああ"になりますが、 それを1と返したいということでしょうか? その場合は =VLOOKUP("ああ",A1:B4,2,FALSE) とします。 A1:B4の範囲を検索し、(検索キーは一番左側のA列) 2番目の列(ここではB列)の結果を表示するという意味です。 dorackenさんの意図した質問と意味が違っていれば もう少し具体的な補足をお願いします。

doracken
質問者

補足

実は検索したい値が複数の列に配置されているのと、 返したい値も、複数の列に配置されているからです。   A   B  C    D  E   F 1 ああ  1  かか  1  ささ  1 2 いい  2  きき  2  しし  2 3 うう  3  くく  3  すす  3 4 ええ  4  けけ  4  せせ  4 すべて一列にまとめられればいいのですが、 みずらいので・・・・

関連するQ&A

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

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

  • Excel関数について(lookupなど)

    A列とB列にそれぞれ商品コード(A列)、数値(B列)が入っているリストがあります。(コードと数値はそれぞれ関係があり、このコードにはこの数値、というルールがある) 1)セルD4にそのコードが入ったら、セルE10に該当する数値が入るようにしたいんです。 2)但し、セルD4に入るコードは、リストにはないコードも存在する。その場合、セルE10には何も表示させたくない(エラーも非表示にしたい) という場合、どういう関数を使えばいいのでしょうか。 1)まではLOOKUPかVLOOKUPでできるようなのですが、2)の場合の表示がうまくいきません。 説明が下手で申し訳ないのですが、どなたかお分かりになるかた教えてください。

  • 関数が入っている列で値のある最後のセルの値を返す

    お尋ねします。 関数が入っている列で式の値が入っている一番下のセルの値を調べるにはどうしたら良いでしょうか? 例      A列   1   5   2   10   3   13   4   (式の値が無いのでゼロ) B1セルにA3セルの13と言う値を返したいのですが、列に式(SUMPRODUCT関数)が入っていて、実際はA4セルのゼロが返ってきます。 またシート1~シート5 まで上記と同じ式が入っていて、シート1のA列の最後の値「13」をシート6のB1セルに値を返す場合、INDIRECT関数を使った場合、どういう式になるでしょうか? ご回答よろしくお願いします。

  • LOOKUP関数で

    こんばんは。 ある範囲内で右の列を基準にして左側のデータを検索したいのですが、 (VLOOKUPの基準が右になったようなもの) LOOKUP関数ではデータが昇順に並ぶ必要があるなど、 制約が多く上手く求める結果が得られません。 元のデータ(昇順になってません)を触ることなく 右側を基準にVLOOKUPした時のような答えを得るにはどうすれば良いでしょうか? 何か別の関数を指定すればよいのでしょうか? 色々考えてみるのですが、どうも上手く行きません。 ご存知の方がいらっしゃればぜひご教示いただけませんでしょうか? よろしくお願いいたします

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

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

  • 複数のセルの値を満たすレコードにある他の列の値を検索する

    一つのレコードにフィールドがいくつかあります。 例えば、そのうち、B列とD列の値が一致するとき、 H列の値を返す…というような関数はありますか。 VLOOKUPでは一つのセルしか見てくれないので検索できず、 困っています。

  • 連続しない範囲で一番右に値のある一番上のセル

    連続しない範囲で一番右の値のある一番上のセルの関数 エクセルの関数について教えてください。 下記表のようにGX列に、連続しない特定の範囲 (R4,AD4,AP4,BB4,BN4,BZ4,CL4,CX4,DJ4,DV4,EH4,ET4)で 「い」列の一番右に値のあるセルの年月を表示させる方法はありますでしょうか? 非表示のセルにも数値が入っていたり、2行目には「い」列があったりします。 年月はセルの結合をしています。 いろいろ調べて試してみたのですが、うまくいきませんでした。 何卒、ご教授よろしくお願い致します。

  • [EXCEL]LOOKUP関数の戻り値とセルの書式の関係

    現在(たぶん同じ理由で)2点ほど困っていることがあります。 以下のようにLOOKUP関数を使ってセルに値をセットしています。 <Sheet1のレイアウト> |A列|B列  |C列 |-|----|---- |a |あああ |・・・ |b |いいい |・・・ |c |    | |d |かかか |・・・ <Sheet2のレイアウト> |A列|B列                 |C列 |--|-------------------|- |a | =LOOKUP(A1,Sheet1!A:A,Sheet1!B:B) | |b | =LOOKUP(A2,Sheet1!A:A,Sheet1!B:B) | |c | =LOOKUP(A3,Sheet1!A:A,Sheet1!B:B) | まず1つめです。 今まで、Sheet1は別ブックのマクロで出力された値を[コピー]→[形式を選択してはりつけ]→[値]ではりつけていました。このときはSheet2のB3のセルにはブランクが入っていたのですが、誤ってSheet1のセルに直接値を入力したり、[F2キー]→[Enter]をしてしまったためSheet2のB3のセルにはブランクをセットしたいのに0(ゼロ)が入るようになってしまいました。 B3のセルにブランクがセットされるように戻したいのですがどうしたらよいでしょうか? 次に2つめは、 Sheet2は他の列もB列と同様の式によって値がセットされていますが、列によって右詰で表示されたり中央揃えで表示されています。 Sheet1、Sheet2ともにすべて書式は「文字列」で、 Sheet2には「右詰」「左詰」などの書式は設定されていません。これはなぜでしょうか? 1つめは、IF文でLOOKUP関数の戻り値が0だったらブランクをセットするなどに式を変更すれば解決するとは思いますが、このような式が至るところで使ってありますので式を変更するにも時間がかかるため、また今後のためにも原因と対策をしりたいと思います。どなたかわかる方がいらっしゃいましたら回答よろしくお願いします。

  • Excelで、関数の引数の値を条件によって変更したい

    VLOOKUP関数の引数[範囲]を、条件によって自動的に変更したいのですが、できますでしょうか。 例えば、セル[F10]に、VLOOKUP関数の[範囲]に相当する文字列を入れておいて、セル[G10]に、[=VLOOKUP(A10,F10,3)]などとして、値を呼び出したいのですが、どのようにすればいいのでしょうか。 ちなみに、セル[I10]に[=CONCATENATE("=VLOOKUP(A10,",F10,",3)")]とすると希望の文字列は得られ、これを[G10]に値のみをコピーすると、[G10]のセルには希望通りの文字列が入ります。しかしこれは単なる文字列ですから関数として機能しません。一旦訂正モードにしてそのまま確定すると関数として認識してくれますが、全行で訂正する訳にもいきませんから困っています。 変数を使うことになるのかな、とも思いましたが、マクロを組まないで関数の定義だけでできれば好ましいので、何とか工夫できないものかと思っています。 よろしくお願いします。

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

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

専門家に質問してみよう