一段階完成
秀丸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) - プログラミング入門者向けサイト