[[20210616111834]] 『Characters について』(よん) ページの最後に飛ぶ

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

 

『Characters について』(よん)

【やりたい事】
 A1セルの文字列を1文字ずつ抽出して、太字であればその文字色を赤色にする。

【問題点】
 A1セルに入力した文字列のうち、「1文字目が太文字の場合」のみうまく動作しません。
 ※太字が解除されたり、色が着かなかっり。

●原因が分かる方居りましたらよろしくお願いします。
___

Sub test()

    Dim n As Long '文字数
    Dim i As Long '繰り返し変数

    '文字数を設定
    n = Len(Range("A1"))

    '1文字ずつ抽出して、太字であれば赤字にする。
    For i = 1 To n
        If Range("A1").Characters(i, 1).Font.Bold = True Then
            Range("A1").Characters(i, 1).Font.Color = vbRed
        End If
    Next i
End Sub

< 使用 Excel:Excel2016、使用 OS:Windows8 >


基本的に全部リセットされちゃうみたいだから、全部指定し直さないとダメなんじゃないですかね。

「1文字目が太文字の場合」これがちょっと解らない。
まあ、10数年前の知識だけですけど。
(Ihaveapen) 2021/06/16(水) 12:35


私の環境(office365/Windows10)では、おっしゃる状況にはなりませんでした。
とりあえずステップ実行してみるとかして、どのように判定されているかチェックしてみてはどうでしょうか?
    Sub 研究用()
        Dim i As Long

        For i = 1 To Len(Range("A1").Value)
            With Range("A1").Characters(i, 1)
                Debug.Print .Text, "Bold = " & .Font.Bold
                If .Font.Bold = True Then .Font.Color = vbRed
            End With
        Next i
    End Sub

(もこな2) 2021/06/16(水) 12:38


 当方Excel2010ですが、
 1文字目のBoldが解除されてしまう現象は確認できました。
 (色が付かないって方は再現できず)

 以下の悪あがきコードで、一見何とかなってる風には見えます。
 (見えるだけかも知れませんけど)

    Sub 太字は赤字に()
        Dim i As Long
        For i = 1 To Len(Range("A1").Characters.Text)
            With Range("A1").Characters(i, 1)
                If .Font.Bold Then
                    .Font.Bold = False
                    .Font.Color = vbRed
                    .Font.Bold = True
                End If
            End With
        Next i
    End Sub

(白茶) 2021/06/16(水) 12:45


Ihaveapen様、もこな2様、白茶様

回答ありがとうござます。問題解決出来ず追加の情報を記載させて頂きます。
言葉足らずで分かりづらく申し訳ありません。よろしくお願いします。
___
まず、うまくいかない場合のパターンがもう少し具体的に分かったので、追記します。

●うまくいかないパターン
・A1セルに 『確認用文字列』と入力
・A1セル選択状態のまま、『確認用』の文字だけ選択して、リボンの太字ボタンを押して太字にする
・エンターを押してA2セルに移動
・マクロを実行 →  『確』の文字が太字赤字、『認用文字列』が細字黒字になりうまくいかない

●うまくいくパターン
・A1セルに『確認用文字列』と入力
・A1セル選択状態のまま、『確認用文字列』全てを選択して、リボンの太字ボタンを押して太字にする
・エンターを押してA2セルに移動
・再度A1セルを選択して、『文字列』の文字だけ選択して、リボンの太字ボタンを押して細字に戻す
・エンターを押してA2セルに移動
・マクロを実行 →  『確認用』の文字のみが太字赤字となり、うまくいく

●●ステップ実行について
 上記の『うまくいかないパターン』を、もこな2様のマクロでステップ実行してみたところ、
 1文字目『確』の『.Font.Color = vbRed』を実行した時点で、
 【『確』の文字が太字赤字、『認用文字列』が細字黒字】となり、
 以降『認用文字列』はFont.Bold=Trueでないと判断されてしまいます。

 ※白茶様のマクロステップ実行でも同様に1文字目で不具合が生じます。

(よん) 2021/06/16(水) 13:34


 更に足掻いてみましょう...

    Sub 太字は赤字に2()
        Dim i As Long, ary() As Boolean
        Dim c As Range
        Set c = Range("A1")
        ReDim ary(1 To Len(c.Characters.Text))
        For i = 1 To UBound(ary)
            ary(i) = c.Characters(i, 1).Font.Bold
        Next i
        For i = 1 To UBound(ary)
            With c.Characters(i, 1)
                .Font.Bold = False
                If ary(i) Then .Font.Color = vbRed
                .Font.Bold = ary(i)
            End With
        Next i
    End Sub

 パターン1
     1.A1に[確認用文字列]と入力
     2.[文字列]部分だけBold
 パターン2
     1.A1に[確認用文字列]と入力
     2.A1自体をBoldに
     3.[確認用]部分だけBold解除

 の両方で確認してみました。
 こちらの環境では大丈夫そうです。

 途中、パターン2で何度か、勝手に文字が増殖するケースが発生しました。
        For i = 1 To UBound(ary)
            With c.Characters(i, 1)
                If ary(i) Then
                    .Font.Bold = False
                    .Font.Color = vbRed
                    .Font.Bold = ary(i)
                End If
            End With
        Next i
 とした場合です。

 [確認用文認用文字列]
  黒黒黒赤茶茶茶赤赤 ←[茶]ってなんやねん...
  太太太太細細細太太

 但し数式バーの内部は[確認用文字列]のまま
 別セルで =A1 として参照しても[確認用文字列]
 でもA列の列幅をAutoFitさせると[確認用文認用文字列]の幅に合わせられる。
 摩訶不思議....

(白茶) 2021/06/16(水) 14:01


2019 です。
太字が解除される現象確認しました。

回避するなら、一旦情報を記録しておいて、
その情報に従って全部設定しなおす感じでしょうか?

Sub test()

    Dim chs As Characters
    Dim v() As Boolean
    Dim i As Long

    ReDim v(1 To Range("A1").Characters.Count)

    For i = LBound(v) To UBound(v)
        v(i) = Range("A1").Characters(i, 1).Font.Bold
    Next

    For i = LBound(v) To UBound(v)
        If v(i) Then
            With Range("A1").Characters(i, 1).Font
                .Bold = True
                .Color = vbRed
            End With
        End If
    Next
End Sub

もっとうまいロジックがあるような気がしないでもないですが、
思いつかないです^^;
(まっつわん) 2021/06/16(水) 15:05


白茶様、まっつわん様

回答ありがとうございます。
双方試してみましたが、無事解決しました!
(白茶様の文字増殖バグ?も確認しました 笑)

配列にBooleanにと、自分では思いつかない対処法で大変参考になりました。

早急な回答本当にありがとうございました^^
(よん) 2021/06/16(水) 15:38


他板で同じような質問がありました。
白茶さんのコードをベースに回答させていただきました。
文字増殖問題も解決のつもりです。
http://www.vbalab.sakura.ne.jp/vbaqa/c-board.cgi?cmd=ntr;tree=81832;id=excel

(マナ) 2021/06/20(日) 17:55


コメント返信:

[ 一覧(最新更新順) ]


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