• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCEL関数/別シートのセル番地をセルの値で指定)

EXCEL関数/別シートのセル番地をセルの値で指定

このQ&Aのポイント
  • Sheet2に抽出されたデータの一部をSheet1からVLOOKUP関数を使用して参照する際に、参照元のセル番地を計算して手入力するのは大変なため、自動的に計算する方法が知りたい。
  • Sheet2からSheet1のデータをVLOOKUP関数で参照する際に、参照元のセル番地を自動的に計算する方法を教えてください。
  • EXCEL関数を使用して、Sheet2からVLOOKUP関数で参照する際のセル番地を自動的に計算する方法を教えてください。

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

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

基本のご質問: シート1のK列の18+1=19行目は =INDEX(Sheet1!K:K,A4+1) で直接参照します。わざわざVLOOKUPする必要「も」ありません。 次のご質問: >これを空欄のまま表示させるために K列の内容が「文字列」だった場合は =INDEX(Sheet1!K:K,A4+1)&"" としておきます。 K列の内容が「数値」で、これを「数値として」計算結果を出しとかなきゃならない場合は =IF(INDEX(Sheet1!K:K,A4+1)="","",INDEX(Sheet1!K:K,A4+1)) としておきます。 K列の内容が数値でも、結果は「文字列として表示するだけでOK」な場合は、先の&""の方式を利用できます。

arsk2150
質問者

お礼

前回に引き続きご回答いただきありがとうございます! しかも、とてもスマートな関数に変身させてくださって、 大変勉強になりました。 心からの感謝をこめて、重ね重ね御礼申し上げます。

その他の回答 (6)

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

No.6です! たびたびごめんなさい。 投稿後に思ったのですが・・・ Sheet1の1行目は項目が入っているのですよね? そうであればSheet2の1行目は列番号でなく 表示したい「項目名」を入力した方が良いと思います。 その場合の数式は E2セルを =IF(OR(E$1="",$A2=""),"",INDEX(OFFSET(Sheet1!$A:$A,,MATCH(E$1,Sheet1!$1:$1,0)-1,,1),MATCH($A2,Sheet1!$A:$A,0))) として、列・行方向にオートフィルでコピーしてみてください。 (前回の数式は列方向のオートフィルは考慮していませんでした) ※ 空白の「0」の表示の件についてはNo.1さんが回答してくださっているので その方法を利用させてもらう手もあると思います。 何度も失礼しました。m(_ _)m

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

こんにちは! Sheet2のE1セルは単に表示したい列番号を入力するだけとします。 今回の質問の場合は K と入力 E2セルに =IF(OR(A2="",E$1=""),"",INDEX(INDIRECT("Sheet1!"&E$1&":"&E$1),MATCH(A2,Sheet1!A:A,0))) という数式を入れオートフィルで下へコピー! ※ Sheet1の表示したいセルが空白の場合は「0」が表示されてしまいますので、 Excelのオプション → 詳細設定 → 「次のシートで作業するときの・・・」 → 「ゼロ値」のチェックを外しておきます。 尚、Sheet2で他の項目でどうしても「0」を表示しなければならない場合は IF関数で上記数式が空白の場合の条件を追加してやります。m(_ _)m

arsk2150
質問者

お礼

前回に引き続き、貴重なお時間を割いてご回答くださったこと、 心から感謝いたします。また、わざわざオートフィルのことまで ご考慮いただき追加のご回答をいただきましたことも、 重ねて御礼申し上げます。 こちらで質問させていただくごとに自分の不勉強が身に沁みます。 またお世話になることがあるかもしれませんが、どうぞよろしくお願いいたします。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

次のような式にすることで問題は無いように思いますね。 =IF(VLOOKUP(A4,Sheet1!A:K,COLUMN(K4),FALSE)="","",VLOOKUP(A4,Sheet1!A:K,COLUMN(K4),FALSE))

arsk2150
質問者

お礼

貴重なお時間を割いてご回答いただきありがとうございます! 大変勉強になりました。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.4

#2です。すみません、誤記がありました。 INDIRECTのすぐ後の( が抜けてました。追加してください。 すみません。

  • moon00
  • ベストアンサー率44% (315/712)
回答No.3

INDIRECT関数を使えば可能な気がします。 Sheet1!K19と書くべきところを、以下のようにします。 INDIRECT("R"&A4+1&"C11",FALSE) "R"&A4+1&"C11"で、A4セルの値を使い、R1C1形式でK19を表します。

arsk2150
質問者

お礼

貴重なお時間を割いてご回答いただきありがとうございます! 大変勉強になりました。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.2

他にも方法はあると思いますが、例えば、 =IF(INDIRECT"Sheet1!K"&(A4+1))="","",VLOOKUP(A4,Sheet1!A:K,COLUMN(K4),FALSE) でどうでしょうか。もしくは、 >たとえば、Sheet2のA列が18であれば(上記Sheet2のA4)、 >元データはSheet1の19行目にあることになります。  >A列の数値+1、が行番号ということです。 なのですから、VLOOKUPで廻さなくても =IF(INDIRECT"Sheet1!K"&(A4+1))="","",INDIRECT"Sheet1!K"&(A4+1))) とか。 この他にもOFFSET関数を使ってもできそうです。

arsk2150
質問者

お礼

ご親切にご回答いただきありがとうございました! 大変勉強になりました。 心から感謝申し上げます。

関連するQ&A