プロが教える店舗&オフィスのセキュリティ対策術

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で拾えるようにするにはどのようにしたらよいでしょうか。

A 回答 (4件)

> 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)"
を振り分けたらいかが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/11/26 23:09

VLOOKUPは表を引くのだから、第2引数で指定した列の最も左列の


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

本筋の回答は#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さんの回答に変えてください)
ぜひお試しを
    • good
    • 0

Selection.Formula = "=Vlookup(VALUE(""" & Cells(j, 1) & """),マスタ!A:B,2,false)"



にすればいかがでしょう。

この回答への補足

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

補足日時:2009/11/20 23:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!