【秀丸】Excelで秀丸の強調表示定義ファイルを使う

一段階完成
秀丸v8.87

■ColorSetと強調文字のhilightファイルを用意

```:おそらく
スタイル→0：普通 1：Bold

ColorSet [0][0]：普通の文字
            [1]：背景
            [2]：スタイル
ColorSet [4][0]：強調表示1
            [1]：背景
            [2]：スタイル
ColorSet [7][0]：強調表示2
            [1]：背景
            [2]：スタイル
ColorSet[22][0]：強調表示3
            [1]：背景
            [2]：スタイル
ColorSet[23][0]：強調表示4
            [1]：背景
            [2]：スタイル
ColorSet[36][0]：強調表示5
            [1]：背景
            [2]：スタイル
ColorSet[37][0]：強調表示6
            [1]：背景
            [2]：スタイル
ColorSet[38][0]：強調表示7
            [1]：背景
            [2]：スタイル
ColorSet[39][0]：強調表示8
            [1]：背景
            [2]：スタイル
```

```:.hilight
/<ColorSet>
/[0][0]:0x00F2F8F8
/[0][1]:0x00222827
/[0][2]:0x00000000
/[1][0]:0x005E7175
/[1][1]:0x00222827
/[1][2]:0x00000000
/[2][0]:0x005E7175
/[2][1]:0x00222827
/[2][2]:0x00000001
/[3][0]:0x005E7175
/[3][1]:0x00222827
/[3][2]:0x00000000
/[4][0]:0x00EFD966
/[4][1]:0x00222827
/[4][2]:0x00000000
/[5][0]:0x00EFD966
/[5][1]:0x00222827
/[5][2]:0x00000001
/[6][0]:0x00F2F8F8
/[6][1]:0x00222827
/[6][2]:0x0000000A
/[7][0]:0x007226F9
/[7][1]:0x00222827
/[7][2]:0x00000000
/[8][0]:0x007226F9
/[8][1]:0x00222827
/[8][2]:0x00000001
/[9][0]:0x00F2F8F8
/[9][1]:0x00222827
/[9][2]:0x00000009
/[10][0]:0x00222827
/[10][1]:0x0099FF99
/[10][2]:0x00000000
/[11][0]:0x007226F9
/[11][1]:0x00222827
/[11][2]:0x00000002
/[12][0]:0x007226F9
/[12][1]:0x00222827
/[12][2]:0x00000002
/[13][0]:0x002EE2A6
/[13][1]:0x00222827
/[13][2]:0x00000000
/[14][0]:0x002EE2A6
/[14][1]:0x00222827
/[14][2]:0x00000000
/[15][0]:0x00FF81AE
/[15][1]:0x00222827
/[15][2]:0x00000000
/[16][0]:0x00A5A5A5
/[16][1]:0x00222827
/[16][2]:0x00000000
/[17][0]:0x02000000
/[17][1]:0x00400080
/[17][2]:0x00000000
/[18][0]:0x00A5A5A5
/[18][1]:0x00222827
/[18][2]:0x00000000
/[19][0]:0x00A5A5A5
/[19][1]:0x00222827
/[19][2]:0x00000000
/[20][0]:0x0074DBE6
/[20][1]:0x00222827
/[20][2]:0x00000000
/[21][0]:0x007226F9
/[21][1]:0x00222827
/[21][2]:0x00000002
/[22][0]:0x002EE2A6
/[22][1]:0x00222827
/[22][2]:0x00000000
/[23][0]:0x001F97FF
/[23][1]:0x00222827
/[23][2]:0x00000000
/[24][0]:0x00FFFF00
/[24][1]:0x02000000
/[24][2]:0x00000001
/[25][0]:0x002EE2A6
/[25][1]:0x00222827
/[25][2]:0x00000000
/[26][0]:0x005E7175
/[26][1]:0x00222827
/[26][2]:0x00000000
/[27][0]:0x00A5A5A5
/[27][1]:0x00222827
/[27][2]:0x00000000
/[28][0]:0x00463A96
/[28][1]:0x00222827
/[28][2]:0x00000000
/[29][0]:0x00463A96
/[29][1]:0x00222827
/[29][2]:0x00000000
/[30][0]:0x00F2F8F8
/[30][1]:0x00222827
/[30][2]:0x00000000
/[31][0]:0x00222827
/[31][1]:0x00222827
/[31][2]:0x00000000
/[32][0]:0x00A5A5A5
/[32][1]:0x00222827
/[32][2]:0x00000000
/[33][0]:0x00463A96
/[33][1]:0x00222827
/[33][2]:0x00000000
/[34][0]:0x0000FFFF
/[34][1]:0x02000000
/[34][2]:0x00000001
/[35][0]:0x00463A96
/[35][1]:0x00222827
/[35][2]:0x00000000
/[36][0]:0x00FF81AE
/[36][1]:0x00222827
/[36][2]:0x00000000
/[37][0]:0x00F2F8F8
/[37][1]:0x00222827
/[37][2]:0x00000001
/[38][0]:0x00F2F8F8
/[38][1]:0x00222827
/[38][2]:0x00000001
/[39][0]:0x00F2F8F8
/[39][1]:0x00222827
/[39][2]:0x00000001
/[40][0]:0x002EE2A6
/[40][1]:0x00222827
/[40][2]:0x00000001
/[41][0]:0x001F97FF
/[41][1]:0x00222827
/[41][2]:0x00000001
/[42][0]:0x00F2F8F8
/[42][1]:0x00222827
/[42][2]:0x00000004
/[43][0]:0x00F2F8F8
/[43][1]:0x00222827
/[43][2]:0x00000005
/[44][0]:0x00FF81AE
/[44][1]:0x00222827
/[44][2]:0x00000000
/[45][0]:0x00222827
/[45][1]:0x009999FF
/[45][2]:0x00000000
/[46][0]:0x005E7175
/[46][1]:0x00222827
/[46][2]:0x00000000
/[47][0]:0x00FF66FF
/[47][1]:0x00222827
/[47][2]:0x00000000
/[48][0]:0x00222827
/[48][1]:0x00F2F8F8
/[48][2]:0x00000000
/[49][0]:0x02000000
/[49][1]:0x02000000
/[49][2]:0x00000000
/[50][0]:0x00000000
/[50][1]:0x00000000
/[50][2]:0x00000000
/[51][0]:0x00463A96
/[51][1]:0x00222827
/[51][2]:0x00000000
/[52][0]:0x00F2F8F8
/[52][1]:0x00222827
/[52][2]:0x00000000
/[53][0]:0x01000008
/[53][1]:0x01000005
/[53][2]:0x00000000
/[54][0]:0x01000008
/[54][1]:0x01000005
/[54][2]:0x00000000
/[55][0]:0x01000008
/[55][1]:0x01000005
/[55][2]:0x00000000
/[56][0]:0x01000008
/[56][1]:0x01000005
/[56][2]:0x00000000
/[57][0]:0x01000008
/[57][1]:0x01000005
/[57][2]:0x00000000
/[58][0]:0x01000008
/[58][1]:0x01000005
/[58][2]:0x00000000
/[59][0]:0x01000008
/[59][1]:0x01000005
/[59][2]:0x00000000
/[60][0]:0x01000008
/[60][1]:0x01000005
/[60][2]:0x00000000
/[61][0]:0x00F2F8F8
/[61][1]:0x00222827
/[61][2]:0x00000000
/[62][0]:0x000000FF
/[62][1]:0x00222827
/[62][2]:0x00000000
/[63][0]:0x02000000
/[63][1]:0x0000FF00
/[63][2]:0x00000001
/[64][0]:0x02000000
/[64][1]:0x00804000
/[64][2]:0x0000000B
/<ColorSetEx>
/CurLineColorEx:0x00800080
/RulerColorEx:0x005E7175
/RulerBackEx:0xFFFFFFFF
```
----

```vb:①
Public 強調表示1
Public 強調表示2
Public 強調表示3
Public 強調表示4
Public 強調表示5
Public 強調表示6
Public 強調表示7
Public 強調表示8

Public ws1
Public ws2

Public Function 強調カラー取得()
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject ' インスタンス化
    
    Dim ts As TextStream
    Dim s As String
    
    Set ws1 = Worksheets("temp")
    Set ws2 = Worksheets("source")
    
    ws2.Cells.Clear
    
    
    '1行ずつ取得
    Set ts = fso.OpenTextFile("C:\Users\xxxx\Desktop\test.hilight", Format:=TristateFalse) ' ファイルを Shift_JIS で開く
    Do Until ts.AtEndOfStream
        s = ts.ReadLine
        
        '基本フォントカラー, 背景
        If InStr(s, "[0][0]") <> 0 Then
            ws2.Cells.Font.Color = "&H" + Right(s, 8)
        End If
        
        If InStr(s, "[0][1]") <> 0 Then
            ws2.Cells.Interior.Color = "&H" + Right(s, 8)
        End If
        
        
        If InStr(s, "[4][0]") <> 0 Then
            強調表示1 = "&H" + Right(s, 8)
        End If
        
        If InStr(s, "[7][0]") <> 0 Then
            強調表示2 = "&H" + Right(s, 8)
        End If
        
        If InStr(s, "[22][0]") <> 0 Then
            強調表示3 = "&H" + Right(s, 8)
        End If
        
        If InStr(s, "[23][0]") <> 0 Then
            強調表示4 = "&H" + Right(s, 8)
        End If
        
        If InStr(s, "[36][0]") <> 0 Then
            強調表示5 = "&H" + Right(s, 8)
        End If
        
        If InStr(s, "[37][0]") <> 0 Then
            強調表示6 = "&H" + Right(s, 8)
        End If
        
        If InStr(s, "[38][0]") <> 0 Then
            強調表示7 = "&H" + Right(s, 8)
        End If
        
        If InStr(s, "[39][0]") <> 0 Then
            強調表示8 = "&H" + Right(s, 8)
        End If
    Loop
    ts.Close ' ファイルを閉じる
    ' 後始末
    Set ts = Nothing
    Set fso = Nothing
End Function
```



```vb:②
Public Function ソースコード取得()
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    
    Dim ts As TextStream
    Dim s As String
    
    i = 1
    Set ts = fso.OpenTextFile("C:\Users\xxxx\Desktop\Ctest2.hilight", Format:=TristateFalse) ' ファイルを Shift_JIS で開く
    Do Until ts.AtEndOfStream
        s = ts.ReadLine
        ws2.Cells(i, 1) = s
        i = i + 1
    Loop
    ts.Close ' ファイルを閉じる
End Function
```


```vb:③
Public Function 強調文字列取得()
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    
    Dim ts As TextStream
    Dim s As String
    
    i = 1
    Set ts = fso.OpenTextFile("C:\Users\xxxx\Desktop\Ctest.hilight", Format:=TristateFalse) ' ファイルを Shift_JIS で開く
    Do Until ts.AtEndOfStream
        s = ts.ReadLine
        
        a_sSearch = Mid(s, InStr(s, ",") + 1, Len(s) - InStr(s, ","))
        a_iNumber = Left(s, InStr(s, ",") - 1)
        
        ws1.Cells(i, 1) = Len(a_sSearch)
        ws1.Cells(i, 2) = a_sSearch
        ws1.Cells(i, 3) = a_iNumber
         
        i = i + 1
    Loop
    ts.Close ' ファイルを閉じる
    ' 後始末
    Set ts = Nothing
    Set fso = Nothing


    '// 文字数が小さい順に並び替える
    rangeStr = "A1" & ":" & "C" & i
    ws1.Activate
    Range("A:A").Select
    ActiveWorkbook.Worksheets("temp").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("temp").Sort.SortFields.Add2 Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("temp").Sort
        .SetRange Range(rangeStr)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Function

```

```vb:④
Public Function ハイライト表示()
    Dim fso As FileSystemObject
    Set fso = New FileSystemObject
    
    Dim ts As TextStream
    Dim s As String
    
    i = 1
    Do While Not IsEmpty(ws1.Cells(i, 1))
        a_sSearch = ws1.Cells(i, 2)
        a_lNumber = ws1.Cells(i, 3)
        
        Select Case a_lNumber
            Case 9, 41, 1, 33
                Call 指定文字列のフォント変更(a_sSearch, 強調表示1, False)
                
            Case 25, 57, 17, 49
                Call 正規表現ハイライト(a_sSearch, 強調表示1, False)
                
                
            Case 73, 105, 65, 97
                Call 指定文字列のフォント変更(a_sSearch, 強調表示2, False)
                
            Case 89, 121, 81, 113
                Call 正規表現ハイライト(a_sSearch, 強調表示2, False)
                
                
            Case 137, 169, 129, 161
                Call 指定文字列のフォント変更(a_sSearch, 強調表示3, False)
            
            Case 153, 185, 145, 177
                Call 正規表現ハイライト(a_sSearch, 強調表示3, False)
                
                
            Case 201, 233, 193, 225
                Call 指定文字列のフォント変更(a_sSearch, 強調表示4, False)
            
            Case 217, 249, 209, 241
                Call 正規表現ハイライト(a_sSearch, 強調表示4, False)
                
                
            Case 265, 297, 257, 289
                Call 指定文字列のフォント変更(a_sSearch, 強調表示5, False)
                
            Case 281, 313, 273, 305
                Call 正規表現ハイライト(a_sSearch, 強調表示5, False)
                
                
            Case 329, 361, 321, 353
                Call 指定文字列のフォント変更(a_sSearch, 強調表示6, False)
                
            Case 345, 377, 337, 369
                Call 正規表現ハイライト(a_sSearch, 強調表示6, False)
                
                
            Case 393, 425, 385, 417
                Call 指定文字列のフォント変更(a_sSearch, 強調表示7, False)
                
            Case 409, 441, 401, 433
                Call 正規表現ハイライト(a_sSearch, 強調表示7, False)
                
                
            Case 457, 489, 449, 481
                Call 指定文字列のフォント変更(a_sSearch, 強調表示8, False)
                
            Case 473, 505, 465, 497
                Call 正規表現ハイライト(a_sSearch, 強調表示8, False)
            
            Case Else
        End Select
        
        i = i + 1
        DoEvents
    Loop
End Function

```

```vb:パブリック
Public Function 指定文字列のフォント変更(a_sSearch, a_lColor, a_bBold)
    Dim f   As Font     '// Fontオブジェクト
    Dim i               '// 引数文字列のセルの位置
    Dim iLen            '// 引数文字列の文字数
    Dim r   As Range    '// セル範囲の１セル

    iLen = Len(a_sSearch)
    i = 1

    MaxRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.count).Row

    '// 選択セル範囲を１セルずつループ
    For rowNum = 1 To MaxRow
        Set r = Cells(rowNum, 1)
        '// 指定されたセルの文字列から引数文字列を全て検索
        Do
            '// セル文字列から引数文字列を検索
            i = InStr(i, r.Value, a_sSearch)

            '// 引数文字列が存在しない場合
            If (i = 0) Then
                '// 次検索用に検索開始位置を1に初期化
                i = 1

                '// このセルの処理を終了
                Exit Do
            End If


            Debug.Print Mid(r, i + iLen, 1)
            Select Case Mid(r, i + iLen, 1)
                Case " ", "(", ")", "{", "}", ""
                Case Else
                    '// 次検索用に検索開始位置を1に初期化
                    i = 1
    
                    '// このセルの処理を終了
                    Exit Do
            End Select
               


            '// 引数文字列部分のFontオブジェクトを取得
            Set f = r.Characters(i, iLen).Font
            
            
            
            '// フォント設定
            f.Color = a_lColor  '// 文字色
            f.Bold = a_bBold    '// 太さ

            '// 次検索用に検索開始位置をずらす
            i = i + 1
        Loop
    Next
End Function


Public Function 正規表現ハイライト(pat, a_lColor, a_bBold)
    MaxRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.count).Row
    For rowNum = 1 To MaxRow
        Cells(rowNum, 1).Activate
        Call 正規表現強調表示(pat, a_lColor, a_bBold)
    Next
End Function


Function 正規表現強調表示(ByVal pat As String, a_lColor, a_bBold)
    Dim reg, match, match2

    Set reg = CreateObject("VBScript.RegExp")   '// オブジェクト作成
    'pat = "^[_a-zA-Z][^\(=;:]*[ \t]+[_a-zA-Z][_a-zA-Z0-9]*\([^;]*$" '// '検索パターン

    '// 正規表現オブジェクトの設定
    With reg
        .Pattern = pat     '// 正規表現によるパターンを設定
        .IgnoreCase = True '// 大文字と小文字を区別する
        .Global = True      '// 文字列全体を検索する
    End With

    '// 選択セル範囲を１セルずつループ
    For Each v1 In Selection    '// v1:検索対象
        '// 正規表現によるマッチングの実行
        Set match = reg.Execute(CStr(v1))

        '// 実行結果の解析
        For Each match2 In match
            If match2.FirstIndex = 0 Then
                Call 指定文字列のフォント変更(match2, a_lColor, a_bBold)
            End If
        Next
    Next
End Function

```

```vb:実行
Sub 実行()
    Application.StatusBar = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    
    
    startTime = Timer
    
    Call 強調カラー取得
    Call ソースコード取得
    Call 強調文字列取得
    
    ws2.Activate
    Call ハイライト表示
    
    endTime = Timer
    processTime = (endTime - startTime)
    MsgBox processTime & "s"
    
    
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub

```


>参考
[Revolver 秀丸エディタの強調表示定義ファイルを直接編集する](http://revolver2011.blog96.fc2.com/blog-entry-157.html)
[RGBと16進数カラーコードの相互変換ツール - PEKO STEP](https://www.peko-step.com/tool/tfcolor.html)
[VBA FileSystemObject ファイル操作の基礎](https://www.tipsfound.com/vba/18001)
[VBA ファイルの読み込み](https://www.tipsfound.com/vba/18003)
[色を設定するには(ColorIndex、Color)－Excel VBA@Workshop](http://excel.style-mods.net/topic11.htm)
[VBAで最終行を取得するには？｜End(xlUp)、SpecialCells(xlLastCell) | 侍エンジニア塾ブログ（Samurai Blog） - プログラミング入門者向けサイト](https://www.sejuku.net/blog/28929)