- ベストアンサー
Excel:LOOKUP関数を使って、右のセルの値を返したい
今までVLOOKUP関数を使っていたんですが、 どの列の値を返すのではなく、 右のセルの値を返したいときは どういった関数を使えばいいのでしょうか?
- みんなの回答 (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)
いちおうエラーチェックが甘いですが、 ユーザー定義関数を作ってみました。 例 =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から始まる範囲でない場合もう一工夫必要。
#4ですが、言い忘れました。 G1に検索値を入力してくださいね。
複数列から検索する場合、 =INDEX(A1:F4,SUMPRODUCT((G1=A1:F4)*(ROW(A1:F4))),SUMPRODUCT((G1=A1:F4)*(COLUMN(A1:F4)))+1) としてみてください。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1の補足のような配置になっている場合、標準の関数ではできないと思います。 VBAでユーザー関数を作ればできるとは思いますが。
- hikson
- ベストアンサー率27% (9/33)
右のセルの値とは検査範囲の右という意味ですか? LOOKUP関数をつかえばよいのでは? 返す値を検査範囲の右の列に指定すれば結果的に右のセルの値が返ってくるはずですけど???
質問の意味がはっきり分からないので予測で書きますが・・・ どの列の値を返すのではなく とは その列の値を返すのではなく と考えて、 検索して見つかった値の右のセルの値を返したいと仮定します。 たとえば 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さんの意図した質問と意味が違っていれば もう少し具体的な補足をお願いします。
補足
実は検索したい値が複数の列に配置されているのと、 返したい値も、複数の列に配置されているからです。 A B C D E F 1 ああ 1 かか 1 ささ 1 2 いい 2 きき 2 しし 2 3 うう 3 くく 3 すす 3 4 ええ 4 けけ 4 せせ 4 すべて一列にまとめられればいいのですが、 みずらいので・・・・
お礼
お礼が遅れて申し訳ないです。 意味を飲み込もうとして頭が割れそうなのでもうしばらくお待ちを・・・