[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字を置き換えたとき文字の色も変わってしまう現象』(ともちゃん)
よろしくお願いします。
アルファベットと数字と()の全角から半角への置換を一括でしたくて
記憶マクロを利用して下記のとおり作成しました。
実行すると、ところどころ文字の色が青から黒、赤から黒に変化しています。
変化していないところもありました。
どうしてこのような現象が起こるのでしょうか?
よろしくお願いいたします。
'
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
アルファベットと数字と()の全角から半角への置換を一括でしたくて
であれば StrConv(string,vbNarrow) 'Stringは対象文字列
で可能です。
どうしてもリセット前の文字色に戻したいのであれば、
変換前の文字色を控えておいて、変換後に再度設定するしかないでしょうね。
(渡辺ひかる) 2019/07/16(火) 09:43
なお、今回は文字色だけを対象としていますがそのほかの文字修飾を使用しているのであれば
それらもリセットされる可能性はあります。
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
>seiyaさんの正規表現を使って 何の断りもなく何勝手なことしてるんだ? 非常識な奴だ。
(seiya) 2019/07/16(火) 12:27
出所を明記して書いたつもりですが、
気分を害されたご様子。
お詫びいたします。
申し訳ありませんでした。
(渡辺ひかる) 2019/07/16(火) 12:42
他人のコードを内容もわからずそのまま転記して使用する。 その行為は初心者がする行為で、修正が必要になった時点でお手上げ、 回答者としてはやってはいけないことですよ。 (seiya) 2019/07/16(火) 12:47
ご指摘ありがとうございます。
内容的に理解していたつもりでしたが
軽はずみであったと思います。
以後 注意いたします。
申し訳ありませんでした。
(渡辺ひかる) 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.