• ベストアンサー

EXCELの表を参照して値を返す方法

例えば下記のような表があるとします。 表1(シート1)  A列  B列  ~10  A 11~20  B 21~30  C 31~50  D  ・  ・  ・ 151~  Z 表2(シート2) 45   X 21   X 133   X Xの箇所に表1のA列を参照してB列の値(AとかC)を返す方法はないでしょうか?IF文を使った場合7レベルまではできるのですが、それ以上のネストは無理なようです。ちなみに表1は30分類(行)ほどあります。 よろしくお願いします。  

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

  • ベストアンサー
  • gyouda1114
  • ベストアンサー率37% (499/1320)
回答No.4

Vlookup関数を使おう 但し、A列は、数値とし、昇順に入力すること Sheet1(表1)    A_B  1_ 1_A  2_11_B  3_21_C  4_31_D  5_41_E  6_51_F  7_61_G  8_71_H  9_81_I 10_91_J 11_101_K 12_111_L 13_121_M 14_131_N 15_141_O 16_151_P Seet2(表2)    A_ B  1__ 45_      2__ 21_  3_ 133_  B1に =VLOOKUP(A1,$A$1:$B$16,2)(下方にオートフィル)

ken1967
質問者

お礼

回答ありがとうございました。使用法を理解するのに少し時間がかかりましたが、なんとか解決できました。ヘルプで何時間も、使える関数がないか探していたのですがわかりませんでした。検索キーは完全に一致しなくても使えるのですね。これでいっきに作業が進みます。ありがとうございました。

その他の回答 (4)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.5

マクロです、試してみてください。 Sub Test()   Dim wR     As Long   Dim xR     As Long   Dim wNum    As Long   Dim sNo     As Long   Dim eNo     As Long   Dim wI     As Long   Dim wSt     As String   Dim eVal    As String   '   With Worksheets("Sheet2")     For wR = 1 To .Cells(Rows.Count, "A").End(xlUp).Row       wNum = .Cells(wR, "A")       eVal = ""       With Worksheets("Sheet1")         For xR = 1 To .Cells(Rows.Count, "A").End(xlUp).Row           wSt = .Cells(xR, "A")           wI = InStr(wSt, "~")           If wI = 1 Then             sNo = 0: eNo = Mid(wSt, wI + 1)           Else             sNo = Left(wSt, wI - 1): eNo = Mid(wSt, wI + 1)           End If           If wNum >= sNo And wNum <= eNo Then             eVal = .Cells(xR, "B")             Exit For           End If         Next       End With       .Cells(wR, "B") = eVal     Next   End With End Sub

ken1967
質問者

お礼

ご回答ありがとうございました。多分すばらしい方法を教えていただいたのだと思いますが、まだ私はマクロの使い方をしらないので、今回はVLOOKUPを使用したいと思います。今後マクロを勉強したときに参考にさせていただきます。ありがとうございました。

  • koko88okok
  • ベストアンサー率58% (3839/6543)
回答No.3

VLOOKUP関数をお使いください。 「VLOOKUP関数を制覇しよう!」 http://allabout.co.jp/computer/msexcel/closeup/CU20060805A/ 「Excel豆知識24 24-1 VLOOKUP関数 3」 http://www11.plala.or.jp/koma_Excel/contents3/mame3024/mame302401.html

ken1967
質問者

お礼

回答ありがとうございました。使用法を理解するのに少し時間がかかりましたが、なんとか解決できました。ヘルプで何時間も、使える関数がないか探していたのですがわかりませんでした。検索キーは完全に一致しなくても使えるのですね。これでいっきに作業が進みます。ありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 =IF(A1<>"",VLOOKUP(A1,sheet1!A:B,2,TRUE),"")として下方向にコピー 但し、A列は、0,11,21,31,51・・・151として昇順に配列として下さい。

ken1967
質問者

お礼

回答ありがとうございました。使用法を理解するのに少し時間がかかりましたが、なんとか解決できました。ヘルプで何時間も、使える関数がないか探していたのですがわかりませんでした。検索キーは完全に一致しなくても使えるのですね。これでいっきに作業が進みます。ありがとうございました。

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

VLOOKUPの教科書にあるような質問ですね。 まずとりあえず、VLOOKUPの参照ができるように、A列を 10 20 30 : 150 99999(これ以上は絶対に来ない値) と書き換えます。その上で、 =VLOOKUP(Sheet2!A1,Sheet1!$A$1:$B$16,2,FALSE) これで「A列の値を超えない最大値に対応する文字」が出てきます。 詳細は以下のURL、特に3ページ目を読んで見て下さい。 http://allabout.co.jp/computer/msexcel/closeup/CU20060805A/

ken1967
質問者

お礼

回答ありがとうございました。使用法を理解するのに少し時間がかかりましたが、なんとか解決できました。ヘルプで何時間も、使える関数がないか探していたのですがわかりませんでした。検索キーは完全に一致しなくても使えるのですね。これでいっきに作業が進みます。ありがとうございました。