'replace関数の使い方について学びましょう。
Sub hoge()
Dim moji
moji = "abc-12-34-56-78"
Dim new_moji
new_moji = Replace(moji, "-", "") 'ハイフンを見つけたら長さ0の文字列と置換します
Range("A1").Value = "abc12345678"
Range("A2").Value = moji
Range("A3").Value = new_moji
If Range("A1").Value = Range("A3").Value Then
Range("C1").Value = "A1とA3のセルの値は一致しています"
Else
Range("C1").Value = "A1とA3のセルの値は一致していません"
End If
If Range("A1").Value = new_moji Then
Range("C2").Value = "A1の値と変数new_mojiの中身は一致しています"
Else
Range("C2").Value = "A1の値と変数new_mojiの中身は一致していません"
End If
End Sub
'数値と文字を比較した場合、一見同じようでも「一致していない」と判定されることがあります
'以下の[1]では、左辺は、セルA5の値。これは数値「12345678」です。
' 右辺は、new_mojijという変数。これは文字列「"12345678"」が格納されています。
'これらは、一見同じようでも、違うものです。
Sub fuga()
Dim moji
moji = "12-34-56-78"
Dim new_moji
new_moji = Replace(moji, "-", "") 'ハイフンを見つけたら長さ0の文字列と置換します
Range("A5").Value = "12345678"
Range("A6").Value = moji
Range("A7").Value = new_moji
If Range("A5").Value = Range("A3").Value Then
Range("C5").Value = "A1とA3のセルの値は一致しています"
Else
Range("C5").Value = "A1とA3のセルの値は一致していません"
End If
If Range("A5").Value = new_moji Then '[1]
Range("C6").Value = "A1の値と変数new_mojiの中身は一致しています"
Else
Range("C6").Value = "A1の値と変数new_mojiの中身は一致していません"
End If
End Sub
'前記の問題の回避策は、データ型を変換してから比較をすることです。
'以下では、 12345678 という数値を "12345678" という文字列に変換しました。
'これで、左辺は "12345678", 右辺も "12345678" ということで、めでたく「一致している」という結果を得られます。
Sub piyo()
Dim moji
moji = "12-34-56-78"
Dim new_moji
new_moji = Replace(moji, "-", "") 'ハイフンを見つけたら長さ0の文字列と置換します
Range("A9").Value = "12345678"
Range("A10").Value = moji
Range("A11").Value = new_moji
If Range("A9").Value = Range("A3").Value Then
Range("C9").Value = "A1とA3のセルの値は一致しています"
Else
Range("C9").Value = "A1とA3のセルの値は一致していません"
End If
'Cstr関数は、数値を文字列に変換します
If CStr(Range("A9").Value) = new_moji Then
Range("C10").Value = "A1の値と変数new_mojiの中身は一致しています"
Else
Range("C10").Value = "A1の値と変数new_mojiの中身は一致していません"
End If
End Sub
さざなみさんの投稿
(投稿ID: 4780)
小川慶一さんのコメント
(コメントID: 6686)
こんばんは。
以下のサンプルコードを参考にしてください。
ポイントは、以下の2点です。
[a] replace関数を使う
[b] データの型を一致させてから比較する
> 質問です。ある10桁以上の連続した番号を含むファイルAがあります。Bにも同じ番号が入力されています。10桁以上の番号をキーにして、Bの情報をAのファイルに転記したいのですが、Bの番号にはハイフンが含まれています。ハイフンを排除したいのですがどうしたらできますか?発展編2を受ければスマートなやり方ができますか?検索・置換やブイルックアップを使わずにマクロでやりたいです。
受講生さんのコメント
(コメントID: 6687)
Replace関数というものがあるんですね!ありがとうございます。ここ数日どう質問していいかも分からずやっと質問しました。困難に遭うたび新しいことを身につけられてうれしいです。
> さざなみさん:
>
> こんばんは。
>
> 以下のサンプルコードを参考にしてください。
> ポイントは、以下の2点です。
> [a] replace関数を使う
> [b] データの型を一致させてから比較する
>
>
>
>
> > 質問です。ある10桁以上の連続した番号を含むファイルAがあります。Bにも同じ番号が入力されています。10桁以上の番号をキーにして、Bの情報をAのファイルに転記したいのですが、Bの番号にはハイフンが含まれています。ハイフンを排除したいのですがどうしたらできますか?発展編2を受ければスマートなやり方ができますか?検索・置換やブイルックアップを使わずにマクロでやりたいです。
小川慶一さんのコメント
(コメントID: 6690)
お楽しみいただけているようでなによりです。
ひきつづき、よい学びを☆