• ベストアンサー

エクセルで半角文字に色を付けるVBA

エクセルで半角文字を全角に変換しつつ、変換した文字には色を付けるマクロを考えています。 半角→全角の変換はこの記述でできましたが、 myTEXT = StrConv(myTEXT, vbWide) 変換した文字(変換後の文字)に色を付ける、というのが分かりません・・・。 そのような記述は可能でしょうか?お時間あるときにでもご教授いただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 こんな風にしたらどうでしょうか。 Sub TestExchange1() Dim c As Range Dim rng As Range  Set rng = ActiveSheet.UsedRange  For Each c In rng   If VarType(c.Value) = vbString Then '二重になっているけれどやむをえない     strFind c   End If  Next c  Set rng = Nothing End Sub Function strFind(ByRef rng As Range)   Dim Matches As Object   Dim Match As Object   Dim strTxt As String   Dim Ar(1, 254) As Integer   Dim n As Integer   With CreateObject("VBScript.RegExp")     .Pattern = "([!-~\uFF61-\uFF9F]+)"     .Global = True     If VarType(rng.Value) = vbString Then       strTxt = rng.Value       If .Test(strTxt) Then         Set Matches = .Execute(strTxt)         For Each Match In Matches           Ar(0, n) = Match.firstindex + 1           Ar(1, n) = Match.Length           n = n + 1           strTxt = Replace(strTxt, Match.Value, StrConv(Match.Value, vbWide), , 1, vbBinaryCompare)           rng.Value = strTxt         Next       End If     End If   End With   n = 0   Do Until Ar(0, n) = 0     rng.Characters(Ar(0, n), Ar(1, n)).Font.ColorIndex = 3     n = n + 1   Loop   Erase Ar() End Function

mcgaalee
質問者

お礼

なるほどー。長い回答ありがとうございます。非常に勉強になります。 こちらでも試してみます!ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

myTEXT = StrConv(myTEXT, vbWide) と文字列変数を一括で全角に変換するということは全角半角の混在は考えなくとも良いのですね? ならば、 変換前後のバイト数を調べて変わっていれば半角だったとわかります。 Sub Test01() myText = "abc" x = LenB(StrConv(myText, vbFromUnicode)) myText = StrConv(myText, vbWide) y = LenB(StrConv(myText, vbFromUnicode)) If y > x Then MsgBox "myTextは半角文字が含まれていました." '色を変えるコード End If End Sub

mcgaalee
質問者

お礼

変換前後のバイト数を調べるというのは思いつきませんでした。勉強になりました。ありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • \はエクセルでは全角?

    半角文字の\はエクセル(VBA)では全角扱いなのでしょうか? 添付のマクロを実行すると結果は"全角だろう"になります。 \はStrConvでvbWideを指定しても全角になりません。 全角の¥はStrConv/vbNarrowで半角になります。 どういう理由でこうなっているのでしょうか? \以外にもこのような文字があるのでしょうか? ご存知の方、教えていただけないでしょうか。 Sub Macro1() ch1 = "\" ch2 = StrConv(ch1, vbWide) If ch1 = ch2 Then Debug.Print "全角だろう" Else Debug.Print "半角だろう" End If End Sub

  • VBA(Excel)で文字列内の"~"記号だけ半角変換したくない

    VBA(Excel)で、StrConvを用いて、文字列内に存在する記号を全角→半角に変換して、再び文字列内に格納するようにしています。   strValue = StrConv(strValue, vbNarrow) しかし、"~"も"~"に変換されてしまいます。 "~"は半角変換しないようにしたいのですが、何か良い手法はありますでしょうか? どなたかご教授下さいませ。 よろしくお願い致します。

  • VBで「全角」文字を「半角」にしたいのです

    WORDで、文章中の段落ごとのつけた数字([0001]…[0054]…)を連番に置換する「Visual Basic」のマクロを利用し始めたのですが… 元のマクロコードでは全角を扱っていて、たとえば【0015】→【0012】に置換するようになっており、これを半角[0015]→[0012]にしたいのです。 問題のマクロコードです。〔(1)と(3)のコードを変更しました。〕  (1) .Text = "[^#^#^#^#]"        ←【^#^#^#^#】を変更しました  (2) .Replacement.Text = ""     : ★(3) AddStr = "[" + StrConv(Format(Num, "0000"), vbWide) + "]"     :  (4) If Flg_Conv = 1 Then  (5) MsgBox StrConv(Num - 1, vbWide) + "個の番号を置換しました", , Msg_Title  (6) Else (3)のところで数字が「全角」になるようになっていると思うのですが、これをどのように変更すれば、半角の数字になるのでしょうか? よろしくお願いします。

  • EXCELのVBAで半角数字を全角数字へ変換

    EXCEL2007を使用しております。 VBAにて半角数字を全角数字へ変換したいと思っております。 最初にStrconv (cells (i 、j ) 、vbwide ) としていました。セルには数字が入っていますが、これで実行しても半角のままでした。 これは数字を文字列に変えないとだめなのでは思い、Cstr ( cells ( i 、j ) としてそれをstring として定義した項目へ送ってからStrconv で変えようとしたのですが、これでも半角のままでした。 何か勘違いをしているように思うのですが、アドバイスいただければ幸いです。 宜しくお願い致します。

  • 指定した列の文字を半角→全角に変換するには

    エクセルにて以前の同様の質問の回答で特定のセルの文字を半角⇒全角へ変換する方法(マクロ)として以下のような回答を見かけましたが、これを複数の列ごとに行うにはどのようにしたらよろしいでしょうか?住所データを対象としていて行数はその都度変わります。 半角→全角 Sub Macro2()   Dim temp As String   temp = Cells(1, 2)   temp = StrConv(temp, vbWide)   Cells(1, 2).Value = temp End Sub どうか、よろしくお願い致します。

  • エクセルvba カタカナは全角、それ以外は半角に

    セルにはカタカナ、数字、漢字、文字がすべて混在しています。 カタカナは全角に、カタカナ以外(数字や記号)は半角に統一しようかと思っています。 一度すべてを半角にし、カタカナだけ全角に戻そうかと考えました。 Sub test() Dim e As Range Dim f As Integer Dim rData As Variant, ansData As Variant Range("A1:A10").Select For Each e In Selection ansData = "" For f = 1 To Len(e.Value) rData = StrConv(e.Value, vbNarrow) If Mid(rData, f, 1) Like "[ア-ン]" Then ansData = ansData & StrConv(Mid(rData, f, 1), vbWide) Else ansData = ansData & Mid(rData, f, 1) End If Next f e.Value = ansData Next e End Sub しかしこれでは、 「ッ」「ァ」など小さい文字や、「ー(長音)」が半角から全角に戻りません。 また、「ズ」など濁音が「ス゛」と2文字になってしまいます。 これらの正しく変換されないものをすべて列挙し、Replaceなどを使って修正するしかないのでしょうか? 実は最初に、すべてを「全角→半角」にするようマクロ作成したのですが、半角にする文字をReplaceですべて列挙しるのは大変だと思い、「半角→全角」にしたらうまくいくかと思ったのですが、それでもうまくいきませんでした・・・ よろしくお願いします。

  • 左から3文字だけ全角にし残りの6文字は半角のままにしたい。

    全部半角の"123456789"と言う文字列があります。 これを"123456789"にしたいのですがうまくいきません。 Sub 左から3文字目までを全角にする() Dim 文字列 As String 文字列 = "123456789" 文字列 = StrConv(Left(文字列, 3), vbWide) End Sub これを実行すると 文字列は"123"になってしまいます。 "123456789"にするにはどうすればいいのでしょうか? よろしくお願い致します。

  • Wordの文字を全角→半角に一括変換したい。

    Wordの文章の中に、全角文字と半角文字が混在しているので、一括して全角文字を半角文字に変換できないでしょうか? Excelではマクロがあり、便利なのですがWordでもあればいいなと思い。質問しました。 お知恵を拝借できればうれしいです。 (参考)Excelのマクロ http://www.morgan.co.jp/kiso/6excel-5.htm

  • Accessで半角→全角に変更したい

    教えて下さい! Accessで宛名印刷のレポートを作っているのですが、 縦書きにした場合、半角のカタカナで入力された会社名や、住所の番地、ビルの階の数字が横に寝てしまいます。これを解消するために、StrConv関数を使って、全角の大文字に変換しようとしたのですが、うまくいきません。 たとえばレポートに会社名、住所、住所1のテキストボックスを配置し、会社名/住所は、「会社Address」テーブルから読み込み、住所1には、住所を全角に変換した住所を表示するとします。 レポートプロパティの「読み込み時」に以下のコード 住所1.value = StrConv([会社Address]![住所1], vbWide) を記述したのですが、うまくいきません。 いい方法はないでしょうか。 あるいはもっと簡単にできる方法などはあるのでしょうか。

  • 全角半角?

    ACCESS97を使用しています。 次のような文字があります。 4-22 これを4バイトのデータに追加したところ "‐"と"-"によって "4‐2"となります。 "‐"…全角 "-"…半角という意味でしょうか? またStrConv関数で全角⇔半角、大文字⇔小文字をしたのですが 変換できません。 目的は 4‐22 のデータを 4-22 というように変換して 4バイトのところに全て追加できるようにしたいのです。  (数字ではなく "-"横棒を変換) ACCESSで可能でしょうか?

専門家に質問してみよう