[[20190712173927]] 『文字を置き換えたとき文字の色も変わってしまう現』(ともちゃん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字を置き換えたとき文字の色も変わってしまう現象』(ともちゃん)

よろしくお願いします。

アルファベットと数字と()の全角から半角への置換を一括でしたくて
記憶マクロを利用して下記のとおり作成しました。

実行すると、ところどころ文字の色が青から黒、赤から黒に変化しています。
変化していないところもありました。

どうしてこのような現象が起こるのでしょうか?

よろしくお願いいたします。


Sub 置換()
'
' Sub Macro
'

'

    Worksheets("シート名").Select
    Range("F:F,H:H").Select

    Selection.Replace What:="?`", Replacement:="A", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, MatchByte:=True, SearchFormat:=False, ReplaceFormat:=False
    Selection.Replace What:="?a", Replacement:="B", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, MatchByte:=True, SearchFormat:=False, ReplaceFormat:=False
    Selection.Replace What:="?b", Replacement:="C", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, MatchByte:=True, SearchFormat:=False, ReplaceFormat:=False
    Selection.Replace What:="?c", Replacement:="D", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, MatchByte:=True, SearchFormat:=False, ReplaceFormat:=False
・
・
・
End Sub

< 使用 Excel:Excel2013、使用 OS:Windows10 >


すいません
上のマクロ文字化けしてました。

文字化けしている部分は
以下のような感じです。

A→A
a→a
1→1

のような感じです。

すいません。

(ともちゃん) 2019/07/12(金) 17:52


 部分的に変えた色はリセットされます。
(BJ) 2019/07/12(金) 20:12

回避できる方法はないでしょうか?
(ともちゃん) 2019/07/16(火) 08:36

回避できるかどうかわかりませんが

アルファベットと数字と()の全角から半角への置換を一括でしたくて

であれば StrConv(string,vbNarrow) 'Stringは対象文字列

で可能です。

どうしてもリセット前の文字色に戻したいのであれば、
変換前の文字色を控えておいて、変換後に再度設定するしかないでしょうね。

(渡辺ひかる) 2019/07/16(火) 09:43


昔作ったのを思い出してみました
複数セルなら test プロシージャをループさせるなどして、活用してください

なお、今回は文字色だけを対象としていますがそのほかの文字修飾を使用しているのであれば
それらもリセットされる可能性はあります。

Sub test()

    my文字色を保持して置換 Range("B4")
End Sub
Sub my文字色を保持して置換(myTarget As Range)

    Dim myFontColor() As Variant
    Dim myLen As Long
    Dim i As Long

    myLen = Len(myTarget.Value)

    ReDim myFontColor(1 To myLen)

    For i = 1 To myLen
        myFontColor(i) = myTarget.Characters(Start:=i, Length:=1).Font.Color
    Next
    myTarget.Value = StrConv(myTarget.Value, vbNarrow)
    For i = 1 To myLen
        myTarget.Characters(Start:=i, Length:=1).Font.Color = myFontColor(i)
    Next
End Sub

(渡辺ひかる) 2019/07/16(火) 10:56


 >アルファベットと数字と()の全角から半角への置換

 Sub test()
     Dim rng As Range, r As Range, m As Object
     With Sheets("シート名")
         Set rng = Intersect(.UsedRange, .Range("f:f,h:h"))
         With CreateObject("VBScript.RegExp")
             .Global = True
             .Pattern = "[A-Za-z0-9()]"
             For Each r In rng
                 For Each m In .Execute(r.Value)
                     r.Characters(m.firstindex + 1, m.Length).Text = StrConv(m, 8)
                 Next
             Next
         End With
     End With
 End Sub
(seiya) 2019/07/16(火) 11:14

渡辺さま

ありがとうございます。
文字や()は上手く置換されましたが、以下2点が少し気になりましたので
教えてください。

1 マクロ実行時に以下のエラーがでます。(ただし置換はされていました。)
実行時エラー1004
CharactersクラスのTextプロパティを設定できません。

2 全角のスペースが半角になってしまいます。
(ともちゃん) 2019/07/16(火) 12:06


投稿に問題がありましたので削除させていただきました
(渡辺ひかる) 2019/07/16(火) 12:24

 >seiyaさんの正規表現を使って
 何の断りもなく何勝手なことしてるんだ?
 非常識な奴だ。

(seiya) 2019/07/16(火) 12:27


seiyaさん

出所を明記して書いたつもりですが、

気分を害されたご様子。

お詫びいたします。

申し訳ありませんでした。

(渡辺ひかる) 2019/07/16(火) 12:42


 他人のコードを内容もわからずそのまま転記して使用する。
 その行為は初心者がする行為で、修正が必要になった時点でお手上げ、
 回答者としてはやってはいけないことですよ。
(seiya) 2019/07/16(火) 12:47

seiyaさん

ご指摘ありがとうございます。

内容的に理解していたつもりでしたが
軽はずみであったと思います。

以後 注意いたします。

申し訳ありませんでした。

(渡辺ひかる) 2019/07/16(火) 12:56


質問者さん

問い合わせに対しての回答のみ 記載します

1.について

書式を戻すときのエラーかと思います。
元データもわからず、こちらで再現もできないので・・・

2. について

私のコードは全角半角のある文字すべてを半角にするコードです。
英数字かっこに限定するのであれば、もう一工夫必要になります。

(渡辺ひかる) 2019/07/16(火) 13:04


皆様

投稿をくださった方、ありがとうございました。
私の勉強不足のため、ご迷惑をおかけしました。
何とか問題解決できそうです。

(ともちゃん) 2019/07/16(火) 15:53


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.