• 締切済み

vlookup関数で、任意の列ではなく、行、列

タイトルの件、質問いたします。 =VLOOKUP(G2,A1:C3,2,FALSE) の関数があります。 これは、G2,A1の範囲の2列目の数字を返すものです。 これを、2列目ではなく、2列目の2行目の数字を返すものに出来ないでしょうか? 教えて下さい。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

>2列目ではなく、2列目の2行目の数字を返す =INDEX(B1:B3,MATCH(G2,A1:A3,0)+1)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

列ではなく行のデータを検索範囲にしたいという事でしょうか HLOOKUP関数

回答No.3

VLOOKUP 関数は「2 行以上を含む範囲」の中から指定の値を検索する関数であるはずなのに、1 行に限定したいとはどういう状況なのかが分からなくて、回答者の皆さんは困惑しているかと思います。また、G2 セルなどにどんなデータが存在しているのかが不明でヒントもないので、無数の答えがあるナゾナゾのような質問です。 皆さんとはまた別の解釈で、「『 B 列の各行のうち G2 セルと行番号が同じである行』の値を拾いたい」という意味に捉える場合は、次式です。 任意の空白セル =b2   ※数式を記入するセルは 2 行目でもそれ以外でも可 上式を記入したセルをコピーして「同じ列の次の行」に貼り付けると、その数式は自動的に「=B3」に書き換わります(相対参照)。「右隣の列の次の行」に貼り付けるならば、「=C3」となります。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

>これは、G2,A1の範囲の2列目の数字を返すものです A1:C3の範囲でA列よりG2を検索して見つかった行のA列を含み2列右側の値を返すものです >これを、2列目ではなく、2列目の2行目の数字を返すものに出来ないでしょうか? ■「2行2列」とわかっているのであれば以下でできます =INDEX(セル範囲,行数,列数)  → セル範囲の左上のセルを含み、行方向に行数、列方向に列数移動したセルを参照します  → =INDEX(A1:C3,2,2) → B2のセルを参照 =OFFSET(基準セル,行数,列数)  → 基準セルを含まず、行方向に行数、列方向に列数移動したセルを参照します  → 基準セルを含んでいないのでA1を指定した場合、行列数から-1する必要があります  → =OFFSET(A1,2-1,2-1) → B2のセルを参照 ■G2のセルで検索して位置を取得する =MATCH(検索値,セル範囲,0)  → セル範囲の中から検索値と完全一致する一つ目のセルの相対位置を返します  → =MATCH(G2,A1:A3,0) → 2 以上のMATCHとINDEXまたはOFFSETを組み合わせますとご質問者様の要件を満たすと思います ◇INDEXの場合 =INDEX(A1:C3,MATCH(G2,A1:A3,0),2) ◇OFFSETの場合 =OFFSET(A1,MATCH(G2,A1:A3,0)-1,2-1)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! >これは、G2,A1の範囲の2列目の数字を返すものです ではなく、 A1:C3の範囲でG2セルに入っているデータとA列が完全一致する行の2列目データを返す! という意味になりますので、 素直に解釈するとA1:C3セル範囲内でG2セルの数値 仮に「2」が入っているとすると 2列目・2行目 「3」が入っていると 3列目・3行目のデータを返したい!という解釈で =INDEX(A1:C3,G2,G2) とか =OFFSET(A1,G2-1,G2-1) としてみてはどうでしょうか? ※ 解釈が違っていたらごめんなさいね。m(_ _)m

関連するQ&A

  • ExcelでのVLOOKUP関数について

    キー1を1000倍したうえで完全一致のVLOOKUP関数を使うと#N/Aエラーが発生します。 表示上は同じように見えますが内部的に異なる値となっているのでしょうか? 試しにエラー行に対して、キーとターゲットとなる当該セルを「=」でつないで確認しても「TRUE」となります。 添付画像は、 検索先としてA列に基準キーを130.168~130.192(step 0.001)で各行へ入力し、B列はA列を1000倍、C列はB列をROUND関数で整数値に丸めたものをキーとしました。 D列にVLOOKUPで参照する値を入力し、E列以降で以下の異なるパターンで値を参照しています。 (1)【E・F列】 ・E列に整数値をキーとして130168~130192(step 1)で入力。 ・E列をキーとしてB~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,B:D,3,FALSE)』 (2)【G・H列】 ・G列にE列/100をキーとして計算。 ・G列をキーとしてA~D列のVLOOKUP関数としています。   『=VLOOKUP(G3,A:D,4,FALSE)』 (3)【I列】 ・E列をキーとしてC~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,C:D,2,FALSE)』 シートを複製し、キーの入力範囲を0.001~0.025(E列は1~25)にした場合はエラーがでませんでした。 その他の確認としてはTEXT、JIS、ASCなどを組み合わせて文字列としたキー同士のVLOOKUPではエラーにならず値を参照できています。

  • vlookup関数で検索値を含む文字列を検索する方法

    vlookup関数で例えば E1のセルに=vlookup(D1,A:C,3,false)とした場合、D1が佐藤であれば、A列に「佐藤」がある場合には当然、「佐藤」がある行の3列目の値が返されますが、「佐藤」はなく「佐藤A」や「A佐藤」がある場合にもこれらがある行の値を返して欲しいのですが、いい方法はありませんでしょうか。*を使ってできると思ったのですがうまくいきません。上記例で、=vlookup("*佐藤*",A:C,3,false)とすればできますが、*佐藤*の部分はD1の引用を利用したいのです。  よろしくお願いします。

  • vlookupに、Indirect と Match 関数を組み合わせる

    vlookup関数で、検索値にSheet1(Book1)から、範囲は、Sheet2(Book1)のセルにある名前のついているSheet1(Book2), そして、列番号は、指定した名前とマッチするSheet1(Book2)の列番号から、導き出そうとしています。 ところが、Matchで指定した範囲は、Indirect内の関数として認識されないようで、結果が得られません。 たとえば、 Book1のA1~E1にタイトルが入っています。(Index, Title, Book, Author, Frequency) Book2には、 シート1: InputName シート2: Output シート2に以下の関数を入れてみましたが、うまくいきません。 ちなみに、VLOOKUPの列番号を Match関数の代わりに、5 とすると、結果オーライですが、Book1 の列順が変わっていることがあるので、Matchを使ってエラーを避けたいのですが、以下の関数のどこを直すべきでしょうか? =IF(ISNA(VLOOKUP(C2,INDIRECT("'["&InputName!$A$2&"]"& InputName!$B$2&"'!"&"$A$2:$E$1400"),MATCH("Frequency",$A$2:$E$2,0),FALSE)),0,VLOOKUP(C2,INDIRECT("'["&InputName!$A$2&"]"& InputName!$B$2&"'!"&"$A$2:$E$1400"),MATCH("Frequency",$A$2:$E$2,0),FALSE)) よろしくお願いします。

  • EXCELのVLOOKUP関数について

    EXCELのVLOOKUP関数について教えてください。 例えばA1が○でC1が×のとき、その該当行の3列目を示す というような検索値を2つ満たすようなやり方は可能でしょうか? 範囲、列番号とも検索値1つに対応しているのでvlookup関数を並列することになるのでしょうか? 別の簡単な方法があれば教えてください。 わかりにくい質問で申し訳ございません。よろしくお願いします。

  • VLOOKUP関数の範囲の値が増えない方法

    VLOOKUP関数の範囲の指定で、 G2のセルの内容 =VLOOKUP(F2,TBL01!A2:C701,2,FALSE) と入っているセルを下方向にコピーすると G3 =VLOOKUP(F3,TBL01!A3:C702,2,FALSE) G4 =VLOOKUP(F4,TBL01!A4:C703,2,FALSE) といったようになります。ここで、 G3 =VLOOKUP(F3,TBL01!A2:C701,2,FALSE) G4 =VLOOKUP(F4,TBL01!A2:C701,2,FALSE) といった様に下方向にコピーしたいのです。 比較される値のF?は増えていく必要があります。 なにか良い方法はないでしょうか?

  • VLOOKUP関数の範囲をセルで指定したいと思っています。

    VLOOKUP関数の範囲をセルで指定したいと思っています。 B1:参照シート名(VLOOKUP関数で使用する範囲があるシート) C2:範囲の開始位置 E2:範囲の終了位置 B3:G3:列番号(B3の値は、B6:B8の範囲で使用する列番号、 D3の値は、D6:D8の範囲で使用する列番号) これらのセルに入力された情報をもとにB6:G8の範囲にVLOOKUP関数を 反映させたいと思っています。 例えば、 B1に参照シート名「2ケタ」 C2にVLOOKUP関数の範囲の開始位置「A5」 E2にVLOOKUP関数の範囲の終了位置「G7」 B3に範囲の列番号「2」がある場合 B6に「=VLOOKUP(A6,'2ケタ'!A5:G7,2,0)の関数を入力。 B2に参照シート名「3ケタ」 C5にVLOOKUP関数の範囲の開始位置「B5」 E2にVLOOKUP関数の範囲の終了位置「H7」 C3に範囲の列番号「3」がある場合 C6に「=VLOOKUP(A6,'3ケタ'!B5:H7,3,0)の関数を入力。 といった感じです。 現在、B6に「=VLOOKUP($A6,INDIRECT($B$1&"!a5:g7"),INDIRECT("$b$3"),0)」と 関数を入力して、VLOOKUP関数の「範囲の参照シート名」と「列番号」の情報は セルから持ってくることができました。 しかし、「a5:g7」という範囲だけは、INDIRECT関数をうまく入れることができません。 どのように関数を入力したら、上手くいくのか、教えていただけないでしょうか。

  • Excelの関数「VLOOKUP」について質問です

    以下のような表で 1 2 3 51 2 4 1 19 3 8 5 21 4 6 1 24 5 2 7 31 6 4 5 35 7 8 7 60 8 2 3 17 9 4 1 30 A11=空欄 A12=VLOOKUP($A11,$A$1:$D$9,2,FALSE) A13=VLOOKUP($A11,$A$1:$D$9,3,FALSE) とするとき、 A11に「5」と入力すると A12は「2」 A13は「7」になりますよね。 このときに新たにA14に、4列目の値を返すVLOOKUP A14=VLOOKUP($A15,$A$1:$D$9,4,FALSE) A15=任意の数を入れる を作りたいのですが、そのときに検索範囲を、A12,A13に求めた1列目の範囲 つまり2行目から7行目(A2からD7)に、自動的になるようにしたいのですが 検索範囲をどのように設定すればいいでしょうか。 お願いします

  • vLOOKUP関数の仕様

    VLOOKUP関数で検索値が検索対象に複数あるときに検索の型をfalseにすると 例えば E列に検索値のリストがありA列が検索対象になりC列が返す数値があるとすると =VLOOKUP(E1,$A$1:$C$1000,3,FALSE) という風にすると返す数値が A列で一番上にある一致行のC列を返す。 A列で検索値が一致する中でC列の値が最も少ない数値を返す。 のいずれかに見えるのですがこれは仕様として正しいのでしょうか?それとも、私の勘違いでしょうか? ちなみに、上記二つの仕様のうちどちらでも影響が無いんです。C列の数値が連番(時々欠番がありますが)ですので。

  • VLOOKUP関数が#N/Aで使えません

    こんにちは。 エクセルで表を作っています。 VLOOKUP関数を使いたいのですが、エラー#N/Aが出て使えません。とてもシンプルな式なのに、何がだめでできないのか全く解かりません。 式は、=VLOOKUP(C3&D3,A7:D12,4,FALSE)です。 ちなみに、=VLOOKUP(C2,B7:D12,3,FALSE)にはちゃんと反応して数値を返してくれます。違いは検索値だけなのですが、数字になっているので、文字列に指定もしました。違うセルで=C3&D3は返してくれています。 何がいけなくてできないのか、教えていただけると助かります。 よろしくお願いします。

  • Vlookup関数で行と列を両方Loopで回したい

    エクセル2010です。 Vlookup関数を使って、下記のようなコードを作りました。 行のLoopはできたのですが、列がわからなくて 1列ごと、50列まで書きました。 列のLoopはどうすればいいのでしょうか? よろしくお願いいたします。 Sub 毎月集計() Dim i As Byte Dim 範囲 As Range Dim myV As Variant Sheets("実績").Select Set 範囲 = Worksheets("2月").Range("B7:AZ20") For i = Application.InputBox("開始行を半角で入力してください。", Default:=123, Type:=1) To Application.InputBox( _ "最終行を半角で入力してください。", Default:=123, Type:=1) myV = Application.VLookup(Range("B" & i).Value, 範囲, 2, False) If IsError(myV) Then                Range("C" & i).Value = "0"         Else Range("C" & i).Value = myV End If myV = Application.VLookup(Range("B" & i).Value, 範囲, 3, False) If IsError(myV) Then Range("D" & i).Value = "0" Else Range("D" & i).Value = myV End If 以下省略 Next i End Sub

専門家に質問してみよう