• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VLOOKUPで他のシートを参照する場合)

VLOOKUPで他のシートを参照する方法とは?

このQ&Aのポイント
  • VLOOKUP関数を使用して他のシートを参照する方法について解説します。
  • シート内の特定の範囲から値を取得するために、VLOOKUP関数を使用することができます。
  • 参照先の範囲を素早く変更する方法についても紹介します。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答No.2様の関数は、その関数を1行目から入力して行く場合に対応する関数ですが、もし、関数を最初に入力するセルが(1)「値表示」シートのA1セルではなく、検索範囲がB1:D4、B5:D8、B9:D12となっているVLOOKUP関数をA2セルから入力して行くという場合には、次の様な関数をA2セルに入力してから、A2セルをコピーして、A3以下に貼り付けて下さい。 =VLOOKUP($B2,OFFSET(データ!$B$1:$D$4,(ROWS(A$2:A2)-1)*4,0),2,FALSE)  或いは =VLOOKUP($B2,OFFSET(データ!$B$1:$D$4,(ROW()-ROW(A$2))*4,0),2,FALSE)  上記はA2セルのVLOOKUP関数の検索範囲がB1:D4となる様にする場合の例ですが、これと同じ考え方で、A1セルのVLOOKUP関数の検索範囲がB1:D4となる様にする場合には、A1セルに入力する関数を次の様にして下さい。 =VLOOKUP($B1,OFFSET(データ!$B$1:$D$4,(ROWS(A$2:A2)-1)*4,0),2,FALSE)  或いは =VLOOKUP($B1,OFFSET(データ!$B$1:$D$4,(ROW()-ROW(A$2))*4,0),2,FALSE)

don-naldo
質問者

補足

ご回答ありがとうございます。 詳細に様々な方法を教えていただきありがとうございました。ROW関数は初めてな上に、回答No2のchie65535さんの数式よりちょっと複雑なので、理解するのに時間がかかりました。 ちなみに、VLOOKUP関数をA2セルから入力する場合に、回答No2のchie65535さんから教えていただいた関数である =VLOOKUP(B1,OFFSET(データ!$B$1,(ROW()-1)*4,0,4,3),2,FALSE) 上記の式で、A2から入力する場合はROW()から引く数を「-1」から「-2」に変更、またA3から入力する場合は「-3」にするだけでも同じ結果になるようですが、この単純な変更だと何か不都合が起きるケースがありますか。

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 回答No.3です。 >=VLOOKUP(B1,OFFSET(データ!$B$1,(ROW()-1)*4,0,4,3),2,FALSE) >上記の式で、A2から入力する場合はROW()から引く数を「-1」から「-2」に変更、またA3から入力する場合は「-3」にするだけでも同じ結果になるようですが、この単純な変更だと何か不都合が起きるケースがありますか。  例えば「値表示」シートのレイアウトが変更になって、「値表示」シートのA2セルに入力されていた「B1:D4を検索範囲とするVLOOKUP関数」を移動させて、「B1:D4を検索範囲とした場合の結果」をA列の別の行のセルに表示させる様にする必要が生じた際に、 =VLOOKUP($B2,OFFSET(データ!$B$1:$D$4,(ROWS(A$2:A2)-1)*4,0),2,FALSE) や =VLOOKUP($B2,OFFSET(データ!$B$1:$D$4,(ROW()-ROW(A$2))*4,0),2,FALSE) を使っていた場合には、A2:B2の上に一行を挿入するだけで、「B1:D4を検索範囲とした場合の結果」がA3セルに表示される様になりますし、A2:B2よりも上の行を一行削除するだけで、「B1:D4を検索範囲とした場合の結果」がA1セルに表示される様になります。  これに対し、「値表示」シートのA2セルに =VLOOKUP(B2,OFFSET(データ!$B$2,(ROW()-2)*4,0,4,3),2,FALSE) と入力されていた場合には、一々、ROW()-2の後半部の「-2」の値を移動先の行番号に合わせて変更せねばなりません。  そして、もっと重要なのは、「-2」がセル参照ではないために「何故、『-2』になっているのか」という事が解かり難いという点です。  例えば、この御質問で得られた回答の関数を質問者様がお仕事で使われた場合、後日になって修正が必要になった際に、質問者様が「何故、『-2』になっているのか」という事を忘れてしまわれたり、質問者様の仕事を引き継いだ方が関数を修正しようとされた際に、「-2」の部分を修正せねばならない事が一見しただけでは解り難く、その部分を修正しないまま単純に「値表示」シートのレイアウトだけを変更してしまう事により、表示結果がおかしくなってしまう恐れが若干あるかと思います。

don-naldo
質問者

お礼

夜遅い時間に、ご丁寧な解説をしていただきありがとうございました。 大変分かりやすかったです。 数式は少し複雑になりますが、後々の事を考えると必要な事ですね。 ありがとうございました。

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.5

いっそのこと、 =VLOOKUP(B1,データ!B$1:D$40,2,FALSE) では如何? それでは駄目な理由を教えてください。

don-naldo
質問者

補足

回答No2のchie65535さんの数式で解決しました。ありがとうございました。 ちなみに、参照先がデータ!B$1:D$40ではダメな理由は、B列のセルに入力されているデータがB1:D4、B5:D8、B9:D12もすべて同じ内容なので、範囲を明確に指定しないと正確な数値が表示できません。

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.4

参照範囲をOFFSET関数で指定してください。 A1=VLOOKUP(B1,OFFSET(データ!$A$1,(ROW()-1)*4,0,4,2),2,FALSE) OFFSET関数は参照位置のセルから離れたセル数を左上として高さと幅の数値で複数セルの範囲を指定できます。 提示のデータ範囲では添付画像のようになります。

don-naldo
質問者

お礼

画像を付けていただき非常にわかりやすかったです。ありがとうございました。 これで、一つ一つ参照先を修正していた手間から解放されます。

回答No.2

A1セルに =VLOOKUP(B1,OFFSET(データ!$B$1,(ROW()-1)*4,0,4,3),2,FALSE) と入力して、下方向にコピーして下さい。 「(ROW()-1)*4」と言う計算式は「1行目にあれば0、2行目にあれば4、3行目にあれば8…」という計算をします。 「OFFSET(データ!$B$1,0,0,4,3)」と言う計算式は「データ!$B$1から0行、0列移動した場所の、4行×3列の12個のセル」を意味します。つまり「データ!B1:D4」です。 「OFFSET(データ!$B$1,4,0,4,3)」と言う計算式は「データ!$B$1から4行、0列移動した場所の、4行×3列の12個のセル」を意味します。つまり「データ!B5:D8」です。 「OFFSET(データ!$B$1,8,0,4,3)」と言う計算式は「データ!$B$1から8行、0列移動した場所の、4行×3列の12個のセル」を意味します。つまり「データ!B9:D12」です。 従って、この式は「1行目に書いたらデータ!B1:D4を参照し、2行目に書いたらデータ!B5:D8を参照し、3行目に書いたらデータ!B9:D12を参照し…」となります。 なので =VLOOKUP(B1,OFFSET(データ!$B$1,(ROW()-1)*4,0,4,3),2,FALSE) は、1行目に書いたら =VLOOKUP(B1,データ!B1:D4,2,FALSE) と同じ意味、2行目に書いたら =VLOOKUP(B2,データ!B5:D8,2,FALSE) と同じ意味、3行目に書いたら =VLOOKUP(B3,データ!B9:D12,2,FALSE) と同じ意味(以下繰り返し)になります。

don-naldo
質問者

お礼

大変わかりやすく教えていただきありがとうございました。 これで、地道にセルの指定範囲を一つずつ修正していた手間から解放されます。 ROW関数という便利な関数も新たに覚えることができました。ありがとうございました。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

=VLOOKUP(B1,データ!,B$1:D$4,2,FALSE)

関連するQ&A