[[20161129003031]] 『指定したセルに含まれない文字を色付けするマクロ』(yyyfg) ページの最後に飛ぶ

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

 

『指定したセルに含まれない文字を色付けするマクロ』(yyyfg)

例えばA1に”文字列”がありB1に記載してある文字列とを比較してA1に含まれない文字を判別しB1に記載のA1に含まれない文字のみに色付けするといったようなマクロを望んでいるのですが可能でしょうか?
要は隣接したセル同士を比較して異なる文字があれば、色を付ける動作を望んでおります><;
< 使用 Excel:Excel2007、使用 OS:Windows7 >


 力技で美しくないですが。

 Sub Sample()
    Dim dic As Object
    Dim x As Long
    Dim pos1 As Range
    Dim pos2 As Range

    Set dic = CreateObject("Scripting.Dictionary")
    Set pos1 = Range("A1")
    Set pos2 = pos1.Offset(, 1)

    For x = 1 To Len(pos1.Value)
        dic(Mid(pos1.Value, x, 1)) = True
    Next

    pos2.Font.ColorIndex = xlAutomatic

    For x = 1 To Len(pos2.Value)
        If Not dic.exists(Mid(pos2, x, 1)) Then pos2.Characters(x, 1).Font.Color = vbRed
    Next

 End Sub

(β) 2016/11/29(火) 01:07


 ↑ やっぱり、おバカなコードでした。以下で充分ですね。

 Sub Sample2()

    Dim x As Long

    Dim pos1 As Range

    Dim pos2 As Range

    Set pos1 = Range("A1")

    Set pos2 = pos1.Offset(, 1)

    pos2.Font.ColorIndex = xlAutomatic

    For x = 1 To Len(pos2.Value)

        If InStr(pos1.Value, Mid(pos2.Value, x, 1)) = 0 Then pos2.Characters(x, 1).Font.Color = vbRed

    Next

 End Sub

(β) 2016/11/29(火) 01:16


 ↑は A1 と B1 の比較ですが、やりたいことが、A列とB列に文字列があって、同じ行の A列のセルとB列のセルの比較を

 一括処理したいということであれば、Sample2 をベースにして繰り返しを加味。

 Sub Sample3()

    Dim x As Long

    Dim pos1 As Range

    Dim pos2 As Range

    With Range("B1", Range("B" & Rows.Count).End(xlUp))

        .Font.ColorIndex = xlAutomatic

        For Each pos2 In .Cells

            Set pos1 = pos2.Offset(, -1)

            For x = 1 To Len(pos2.Value)

                If InStr(pos1.Value, Mid(pos2.Value, x, 1)) = 0 Then pos2.Characters(x, 1).Font.Color = vbRed

            Next

        Next

    End With

 End Sub

(β) 2016/11/29(火) 11:14


おぉ、データ整数型かつrangeを定義してwithステートメントで動作を一纏めにしB1セルを基準とし上の行を取得。カラーパレットから色は自動選択で,次にFor each(オブジェクトを格納する変数)In でフロー制御を行い,SETで変数1に変数2.OFFSET(,1列上)を命令&代入。
次にfor〜nextステートメントで条件繰り返し、変数Xに1 to (変数1&変数2.値)を代入。
IFで条件分岐 Instr(START1.値,mid(文字列(値として),変数X文字列先頭位置を検索,長さ1))=指定したセルに文字が含まれていない場合、変数2(B列)に文字列の一部の書式を変更する関数を使用し変数Xで事前に比較してある文字列に一致した文字の先頭位置を判別、font.colorメソッド処理で赤色に書式変更。
読み難いですがこんな感じでしょうか?因みに完璧に動作しました、
ありがとうございます。
(yyyfg) 2016/11/29(火) 23:08


 なぜ、私の最初のレスのみを残し、質問文と、そのあとのコード、
 ならびに、そのあとの質問者さんからのレスを削除されたのかわかりませんけど、
 私のレスのみ、復元しておきました。

 誰が、何の目的で、こういった編集を行うのでしょうかね?
(β) 2016/11/30(水) 21:39

コメント返信:

[ 一覧(最新更新順) ]


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