0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VBA ファイルを読み込みと色付け

Last updated at Posted at 2024-10-04

そして正規表現で特定の文字を色付けしたい


Sub ProcessFiles()
    Dim lastRow As Long
    Dim i As Long
    Dim fileName As String
    Dim filePath As String
    Dim fileContent As String
    Dim regex As Object
    Dim matches As Object
    Dim pattern1 As String
    Dim pattern2 As String
    Dim fileNum As Integer
    Dim line As String
    Dim fullPath As String
    
    ' アクティブシートを取得
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    ' 最後の行を取得
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 正規表現のパターン
    pattern1 = "正規表現1" ' 1つ目の正規表現をここに記載
    pattern2 = "正規表現2" ' 2つ目の正規表現をここに記載
    
    ' 正規表現オブジェクトの作成
    Set regex = CreateObject("VBScript.RegExp")
    regex.Global = True
    
    ' 1行ずつ処理
    For i = 1 To lastRow
        fileName = ws.Cells(i, "A").Value ' A列の数字をファイル名として取得
        filePath = "C:\path\to\folder\" & fileName & ".txt" ' テキストファイルのパスを作成(適宜修正)
        
        ' ファイルが存在するか確認
        If Dir(filePath) <> "" Then
            ' ファイルを開いて内容を1行ずつ読み取る
            fileNum = FreeFile
            Open filePath For Input As fileNum
            
            Do While Not EOF(fileNum)
                Line Input #fileNum, line
                
                ' 1つ目の正規表現に一致するか確認
                regex.Pattern = pattern1
                If regex.Test(line) Then
                    ' 一致した場合、その行をAB列に記載
                    ws.Cells(i, "AB").Value = line
                    
                    ' 2つ目の正規表現に一致する部分を赤く塗る
                    regex.Pattern = pattern2
                    Set matches = regex.Execute(line)
                    
                    If matches.Count > 0 Then
                        Dim match As Object
                        For Each match In matches
                            ' マッチ部分を赤くする
                            ' テキストファイルの内容をシートに記載しているため、そのセルの該当部分を赤くする
                            Dim startIndex As Integer
                            startIndex = InStr(line, match.Value)
                            If startIndex > 0 Then
                                ws.Cells(i, "AB").Characters(startIndex, match.Length).Font.Color = RGB(255, 0, 0)
                            End If
                        Next match
                    End If
                    
                    ' 1つ目に該当したら次のファイルに進む(1行のみ取得)
                    Exit Do
                End If
            Loop
            
            ' ファイルを閉じる
            Close fileNum
        Else
            ' ファイルがない場合はスキップ
            ws.Cells(i, "AB").Value = "ファイルが見つかりません"
        End If
    Next i
    
    ' 終了メッセージ
    MsgBox "処理が完了しました。"
End Sub


Sub HighlightMatchesInActiveCell()
    Dim regex As Object
    Dim matches As Object
    Dim pattern2 As String
    Dim cellContent As String
    Dim match As Object
    Dim matchStart As Integer
    
    ' アクティブセルの内容を取得
    cellContent = ActiveCell.Value
    
    ' 2つ目の正規表現のパターンを設定
    pattern2 = "正規表現2" ' 2つ目の正規表現をここに記載
    
    ' 正規表現オブジェクトの作成
    Set regex = CreateObject("VBScript.RegExp")
    regex.Global = True
    
    ' 2つ目の正規表現に一致する部分を探す
    regex.Pattern = pattern2
    Set matches = regex.Execute(cellContent)
    
    ' 一致した部分があれば色をつける
    If matches.Count > 0 Then
        For Each match In matches
            ' 一致した部分の開始位置を取得
            matchStart = InStr(cellContent, match.Value)
            
            ' 一致した部分を赤くする
            If matchStart > 0 Then
                ActiveCell.Characters(matchStart, Len(match.Value)).Font.Color = RGB(255, 0, 0)
            End If
        Next match
    Else
        MsgBox "正規表現に一致する部分がありません。"
    End If
End Sub
0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?