0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2020-01-05

一段階完成
秀丸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

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
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
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

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

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

    iLen = Len(a_sSearch)
    i = 1

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

    '// 選択セル範囲を1セルずつループ
    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

    '// 選択セル範囲を1セルずつループ
    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

実行
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 秀丸エディタの強調表示定義ファイルを直接編集する
RGBと16進数カラーコードの相互変換ツール - PEKO STEP
VBA FileSystemObject ファイル操作の基礎
VBA ファイルの読み込み
色を設定するには(ColorIndex、Color)-Excel VBA@Workshop
VBAで最終行を取得するには?|End(xlUp)、SpecialCells(xlLastCell) | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?