VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。効率化と暇つぶしを兼ねています。VBA以外の話題もあるよ(笑)

指定した文字のみ色を変える

ある特定の文字のみ色を変えるマクロです。たとえば下のような「松島」という文字のみ色を変えたい場合に・・・・・・

f:id:kouten0430:20170626224050j:plain

色を変更したい文字が入ったセル範囲を選択した状態で、マクロを実行して下さい。

f:id:kouten0430:20170626224137j:plain

 

ちなみに、非表示やフィルタリングによって折りたたまれたセルには処理を行いません。(可視セルにのみ処理を行う)

 

***************************************
Sub 指定した文字の色を変える()
    Dim sm As Variant
    Dim ci As Variant
    Dim r As Range
    Dim i As Integer

smr:
    sm = Application.InputBox(Prompt:="色を変える文字を指定して下さい", Type:=2)
        If TypeName(sm) = "Boolean" Then
            Exit Sub
        ElseIf sm = "" Then
            GoTo smr
        End If
cir:
    ci = Application.InputBox(Prompt:="色を選んで下さい" _
    & vbCrLf & "1:黒" & vbCrLf & "2:白" & vbCrLf & "3:赤" & vbCrLf & _
    "4:明るい緑" & vbCrLf & "5:青" & vbCrLf & "6:黄色" & vbCrLf & _
    "7:ピンク" & vbCrLf & "8:水色" & vbCrLf & "9:明るい赤" & vbCrLf & _
    "10:緑" & vbCrLf & "(11以降の色番号はVBAのヘルプ等で確認下さい)", Type:=1)
        If TypeName(ci) = "Boolean" Then
            Exit Sub
        ElseIf ci < 1 Or ci > 56 Then
            MsgBox "1~56の数値で入力して下さい"
            GoTo cir
        End If

    For Each r In Selection.SpecialCells(xlCellTypeVisible)
   
        i = 1
   
        Do While i <= Len(r)
            If InStr(i, r, sm) > 0 Then
                r.Characters(InStr(i, r, sm), Len(sm)) _
                .Font.ColorIndex = ci
           
                i = InStr(i, r, sm) + Len(sm)
            Else
                Exit Do '永久ループを回避
            End If
        Loop
    Next r
End Sub
***************************************

 ※SubからEnd Subまでをコピペしてマクロを使用できます。使用の際は自己責任でお願いいたします。