• ベストアンサー

VBA VLOOKUP 検査値が数値だと#N/Aになってしまう

VBAでVLOOKUPをセルに表示させるようにしましたが、検査値が数値になると#N/Aになってしまいます。 IFと組み合わせて検索セルがブランクのときは空白、そうでないときはVLOOKUP数式をもともと1000行くらい埋め込めばいいのかもしれませんがそうすると1000行を超えたらどうする?など柔軟性がいまいちなので、行数が変わっても対応できるようVBAでLOOPにしようと思いました。 アクティブシートのA列の値をシート「マスタ」のA列から探してきて、「マスタ」のB列の内容をアクティブシートのB列に表示させたいです。 最終行 = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row j = 2 Do Until j = 最終行 + 1  Cells(j, 2).Select  Selection.Formula = "=Vlookup(""" & Cells(j, 1) & """,マスタ!A:B,2,false)"  j = j + 1 Loop 検索が数値の場合、#N/Aになります。 数値でも文字列でもvlookupで拾えるようにするにはどのようにしたらよいでしょうか。

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

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

> VALUEにすると数値はOKですが、今度は文字列が#N/Aになってしまいます。 文字列か数値かをVarTypeで識別して Selection.Formula = "=Vlookup(""" & Cells(j, 1) & """,マスタ!A:B,2,false)" と Selection.Formula = "=Vlookup(VALUE(""" & Cells(j, 1) & """),マスタ!A:B,2,false)" を振り分けたらいかが。

tainosuke
質問者

お礼

これですっきり解決しました! 2回もお返事いただきまして気にかけてくださってありがとうございます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

VLOOKUPは表を引くのだから、第2引数で指定した列の最も左列の 文字列 その全角か半角か 数値化をデータにあわせて作らないといけない。 また先頭後尾などに目に見えないスペースなど無いこと。 セルの値で検索するので、表示形式でそう見えている事態で、表作りを惑わされないこと。 数値が検索できないことなど(VBAでも)絶対無い。 データの値と検索表の最左列のデータの値が(該当あるように見えても)違っているからに違いなく、見直しをすること。 明らかに文字列の数字文字と数値と両者が違っているのが判っていて、片一方の修正が大変なら、どちらかのデータが歩み寄らないといけない。 それには、検索する前に、VBではVal関数=数値化や、Trim(Str関数)=文字列化、など使って加工することになる。

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.2

本筋の回答は#1さんがされていますのでアドバイスというか... j = 2 Do Until j = 最終行 + 1  Cells(j, 2).Select  Selection.Formula = "=Vlookup(""" & Cells(j, 1) & """,マスタ!A:B,2,false)"  j = j + 1 Loop の6行は下の1行でも同じです。 Range(cells(2,2),cells(最終行+1,2))Formula="=Vlookup(""" & Cells(j, 1) & """),マスタ!A:B,2,false)" Loopしなくても一気に代入できます。(式は#1さんの回答に変えてください) ぜひお試しを

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

Selection.Formula = "=Vlookup(VALUE(""" & Cells(j, 1) & """),マスタ!A:B,2,false)" にすればいかがでしょう。

tainosuke
質問者

補足

VALUEにすると数値はOKですが、今度は文字列が#N/Aになってしまいます。

関連するQ&A

専門家に質問してみよう