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

下方のマクロを実行することにより、
文字列リストの内容に基づいて、
別シート(作業)内の文字列を変換することができます。

文字列からコード値へ変換することを目的にマクロを埋め込んだのですが、
別シート(作業)の文字列をコード値に変換した際、3桁くぎりのコード値が並んだ場合に、
自動で数値として認識されてしまいます。
※別シート(作業)のセルを文字列し設定しても発生します。

プログラムで回避手段があるようでしたらご教示いただければ幸いです。

例)文字列リストシート
A B
さる 10
ぞう 15
ごりら 101
きりん 102
わに 103
かば 104

マクロ実行前の作業シート
A
さる,ぞう
ごりら
ごりら,きりん,わに
さる,ごりら

マクロ実行後の作業シート
A
10,15
101
101102103
10101

上記マクロ実行後のシートの3~4行目のように、
カンマが取れることを防ぎ、文字列として代入したい所存です。

<マクロ>
Sub 文字列リストに基づき連続して置換する()
i = 2
Do
x1 = Sheets("文字列リスト").Cells(i, 1)
x2 = Sheets("文字列リスト").Cells(i, 2)
Sheets("作業").Cells.Replace _
What:=x1, Replacement:=x2, _
SearchOrder:=xlByColumns, MatchCase:=True
i = i + 1
Loop Until Sheets("文字列リスト").Cells(i, 1) = ""
End Sub


ご教示いただければ幸いです。
よろしくお願いいたします。

A 回答 (2件)

力技ですが・・・


文字列として認識されるよう置換される数字の前に「'」をつけて置換し、
その場合、「,」後ろの文字置換に関しては「'」が余計なので、
最後に「,'」を置換という方法です。

Sub 文字列リストに基づき連続して置換する()
i = 2
Do
x1 = Sheets("文字列リスト").Cells(i, 1)
x2 = "'" & Sheets("文字列リスト").Cells(i, 2)
Sheets("作業").Cells.Replace _
What:=x1, Replacement:=x2, _
SearchOrder:=xlByColumns, MatchCase:=True
i = i + 1
Loop Until Sheets("文字列リスト").Cells(i, 1) = ""


'このままだと2つ目以降の置換では「'」が表示されるので「,'」を「,」に置換
x1 = ",'"
x2 = ","
Sheets("作業").Cells.Replace _
What:=x1, Replacement:=x2, _
SearchOrder:=xlByColumns, MatchCase:=True

End Sub
    • good
    • 0
この回答へのお礼

ご教示くださいまして、ありがとうございました。
おかげさまで問題が解決致しました。

重ねてお礼申し上げます。

お礼日時:2013/05/16 15:52

私は2007ですが、問題なくマクロは実行しますね。

カンマが無くなるような事は無いです
A列の文字列の後にカンマが入ってるなんて事はありまんよね?

変数X1をStrで文字列指定してみては?
Str指定すると空白が挿入される事があるのでTrimで空白削除
What:=x1, Replacement:=Trim(Str(x2)),_
    • good
    • 0
この回答へのお礼

ご教示くださいまして、ありがとうございました。
Office 2010を使用しておりますが、同バージョンだと解決しませんでした。
バージョンによって差があるようです。

お礼日時:2013/05/16 15:50

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