Vlookupをした後に一致するけど、参照先がブランクだった場合、0になってしまったという経験ありませんか?

具体的には、以下のようなB列からD列の票があり、F列のIDをキーにして、氏名を表示させるというケースです。

 

VLOOKUPしようとすると、この時、1000000005 は大野君が一致しますが、1000000006 はB列は一致する文字があるけど、氏名がブランクとなっています。

この時、いつも通りVLOOKUPしてみると、以下のようになります。

分かりますか?キーは一致するけど取得するデータがブランクの場合は、0になってしまいます。

VLOOKUPした後にそのまま氏名をコピー→値貼り付け することがあるのですが、0が残ってしまいます。

普通にエクセルで操作していれば置換するのですが、今回はVBAで実装したいなと思いましたので、コード記載しておきます。

 

ゼロを空白に置換するコード(完全一致)

以下のコードをご利用ください。6行目が置換の処理です。

このコードでは、セルA1からZ100までの間に存在するゼロを空白に置換します。なお、完全一致で削除しますので、ご安心下さい。

“ワークシート”には削除したいデータがあるシート名を記載します。

Sub ゼロを空白に置換()
    
    Dim ws As Worksheet
    Dim endRow As Long
    Set ws = ThisWorkbook.Worksheets("ワークシート")
    ws.Range("A1:Z100").Replace What:="0", Replacement:="", LookAt:=xlWhole

End Sub

 

以下のシートに対して上記コードを実行すると、、

 

セルG4のゼロだけがブランクに置換されます。

 

セルの中の文字にゼロがあればすべて置換するコード

このコードでは、セルA1からZ100までの間に存在するゼロを含む文字のゼロ部分を空白に置換します。

前述のコードと違うのは、 オプション、LookAt の xlWholexlPart になっているというところです。

Sub ゼロを空白に置換()
    
    Dim ws As Worksheet
    Dim endRow As Long
    Set ws = ThisWorkbook.Worksheets("ワークシート")
    ws.Range("A1:Z100").Replace What:="0", Replacement:="", LookAt:=xlWhole

End Sub

 

同じようなコードですが、これを先ほどと同じように以下の入力データで実行してみます。

 

IDが 100000001 といった真ん中に0がたくさんあったのですが、このゼロが全くなくなってしまいました。。

 

見方変えるとめちゃめちゃ賢いですよね…

オプションを変えるだけでこんなことになってしまうんですね。

実際に私がよく使うのは完全一致の方です。笑

 

さいごに

ループして条件判定して置換して…ということももちろんできますが、せっかくExcel VBAで実装しているなら、Excelの機能を使って置換した方がすごく速かったりします。

できるだけエクセルの操作で存在するものを利用した方がいいのではないかと私は思います。

上記サンプルコードは私の使っているかなり簡素化したコードですので、ぜひご利用ください!!

 

ではまた。