以下のVBAマクロを解析し、80文字程度で機能説明してください。

Option Explicit

' グローバル変数
Dim g_エラーログ As String
Dim g_処理中断フラグ As Boolean

' ===================================================================
' メイン処理：表整形とフィルター処理
' ===================================================================
Sub M365E3LicenseExtract()
    g_処理中断フラグ = False
    g_エラーログ = ""
    
    On Error GoTo エラー処理
    
    ' アクティブシートの存在確認
    If ActiveSheet Is Nothing Then
        MsgBox "アクティブなシートが見つかりません。", vbCritical, "エラー"
        Exit Sub
    End If
    
    ' ユーザーフォームをモードレス表示（他のExcelファイルを操作可能）
    frm_M365E3LicenseExtract.Show vbModeless
    
    ' 処理が中断された場合は終了
    If g_処理中断フラグ Then
        MsgBox "処理が中断されました。", vbInformation, "処理中断"
        Exit Sub
    End If
    
    Exit Sub
    
エラー処理:
    g_エラーログ = "メイン処理でエラーが発生しました。" & vbCrLf & _
                   "エラー番号: " & Err.Number & vbCrLf & _
                   "エラー内容: " & Err.Description
    MsgBox g_エラーログ, vbCritical, "エラー発生"
    g_処理中断フラグ = True
End Sub

' ===================================================================
' 表整形処理の実行
' ===================================================================
Sub 表整形処理実行(フィルター対象列 As String, 抽出値配列 As Variant)
    On Error GoTo エラー処理
    
    Dim 対象シート As Worksheet
    Dim 最終行 As Long
    Dim 最終列 As Long
    Dim データ範囲 As Range
    
    ' アクティブシートを取得
    Set 対象シート = ActiveSheet
    
    ' データ範囲を取得
    最終行 = 対象シート.Cells(対象シート.Rows.count, 1).End(xlUp).row
    最終列 = 対象シート.Cells(1, 対象シート.columns.count).End(xlToLeft).Column
    
    If 最終行 < 2 Then
        MsgBox "データが見つかりません。", vbCritical, "エラー"
        g_処理中断フラグ = True
        Exit Sub
    End If
    
    ' 画面更新を停止
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    ' 1) 表にフィルターを設定
    Set データ範囲 = 対象シート.Range(対象シート.Cells(1, 1), 対象シート.Cells(最終行, 最終列))
    If Not データ範囲.AutoFilter Then
        データ範囲.AutoFilter
    End If
    
    ' 2) N列とJ列を入れ替える
    N列J列入れ替え処理 対象シート
    
    ' 3) 指定列を非表示にする
    列非表示処理 対象シート
    
    ' 4-8) ヘッダー名変更と列幅設定
    ヘッダー名変更処理 対象シート
    
    ' 9) S列でフィルター処理
    S列フィルター処理 対象シート
    
    ' 指定されたフィルター条件を適用
    If フィルター対象列 <> "" And IsArray(抽出値配列) Then
        指定フィルター処理 対象シート, フィルター対象列, 抽出値配列
    End If
    
    ' 10) ウィンドウ枠の固定
    対象シート.Activate
    対象シート.Range("A2").Select
    ActiveWindow.FreezePanes = True
    
    ' 11-12) ヘッダー行の書式設定
    ヘッダー書式設定 対象シート
    
    ' 13) 目盛線を非表示
    ActiveWindow.DisplayGridlines = False
    
    ' 画面更新を再開
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    Exit Sub
    
エラー処理:
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    g_エラーログ = "表整形処理でエラーが発生しました。" & vbCrLf & _
                   "エラー番号: " & Err.Number & vbCrLf & _
                   "エラー内容: " & Err.Description
    MsgBox g_エラーログ, vbCritical, "エラー発生"
    g_処理中断フラグ = True
End Sub

' ===================================================================
' N列とJ列を入れ替える処理
' ===================================================================
Sub N列J列入れ替え処理(対象シート As Worksheet)
    On Error GoTo エラー処理
    
    Dim 最終行 As Long
    Dim N列データ As Variant
    Dim J列データ As Variant
    
    最終行 = 対象シート.Cells(対象シート.Rows.count, 1).End(xlUp).row
    
    ' N列（14列目）とJ列（10列目）のデータを取得
    N列データ = 対象シート.Range(対象シート.Cells(1, 14), 対象シート.Cells(最終行, 14)).Value
    J列データ = 対象シート.Range(対象シート.Cells(1, 10), 対象シート.Cells(最終行, 10)).Value
    
    ' データを入れ替え
    対象シート.Range(対象シート.Cells(1, 14), 対象シート.Cells(最終行, 14)).Value = J列データ
    対象シート.Range(対象シート.Cells(1, 10), 対象シート.Cells(最終行, 10)).Value = N列データ
    
    Exit Sub
    
エラー処理:
    Err.Raise Err.Number, "N列J列入れ替え処理", Err.Description
End Sub

' ===================================================================
' 列非表示処理
' ===================================================================
Sub 列非表示処理(対象シート As Worksheet)
    On Error GoTo エラー処理
    
    ' B列を非表示
    対象シート.columns("B:B").Hidden = True
    
    ' D～I列を非表示
    対象シート.columns("D:I").Hidden = True
    
    ' K～M列を非表示
    対象シート.columns("K:M").Hidden = True
    
    ' O～R列を非表示
    対象シート.columns("O:R").Hidden = True
    
    ' T～AB列を非表示
    対象シート.columns("T:AB").Hidden = True
    
    Exit Sub
    
エラー処理:
    Err.Raise Err.Number, "列非表示処理", Err.Description
End Sub

' ===================================================================
' ヘッダー名変更処理
' ===================================================================
Sub ヘッダー名変更処理(対象シート As Worksheet)
    On Error GoTo エラー処理
    
    ' A1セル（Display name → 表示名）
    If 対象シート.Range("A1").Value = "Display name" Then
        対象シート.Range("A1").Value = "表示名"
        対象シート.columns("A:A").ColumnWidth = 25
    End If
    
    ' C1セル（User principal name → ユーザー名）
    If 対象シート.Range("C1").Value = "User principal name" Then
        対象シート.Range("C1").Value = "ユーザー名"
        対象シート.columns("C:C").ColumnWidth = 30
    End If
    
    ' J1セル（Office → 部）
    If 対象シート.Range("J1").Value = "Office" Then
        対象シート.Range("J1").Value = "部"
        対象シート.columns("J:J").ColumnWidth = 36
    End If
    
    ' N1セル（Department → 課）
    If 対象シート.Range("N1").Value = "Department" Then
        対象シート.Range("N1").Value = "課"
        対象シート.columns("N:N").ColumnWidth = 60
    End If
    
    ' S1セル（Licenses → ライセンス）
    If 対象シート.Range("S1").Value = "Licenses" Then
        対象シート.Range("S1").Value = "ライセンス"
        対象シート.columns("S:S").ColumnWidth = 50
    End If
    
    Exit Sub
    
エラー処理:
    Err.Raise Err.Number, "ヘッダー名変更処理", Err.Description
End Sub

' ===================================================================
' S列フィルター処理（Microsoft 365 E3を含む条件）
' ===================================================================
Sub S列フィルター処理(対象シート As Worksheet)
    On Error GoTo エラー処理
    
    ' S列（19列目）で「Microsoft 365 E3」を含む条件でフィルター
    対象シート.AutoFilter.Range.AutoFilter field:=19, Criteria1:="*Microsoft 365 E3*"
    
    Exit Sub
    
エラー処理:
    Err.Raise Err.Number, "S列フィルター処理", Err.Description
End Sub

' ===================================================================
' 指定フィルター処理
' ===================================================================
Sub 指定フィルター処理(対象シート As Worksheet, フィルター対象列 As String, 抽出値配列 As Variant)
    On Error GoTo エラー処理
    
    Dim 列番号 As Integer
    Dim i As Integer
    
    ' 列名から列番号を取得
    Select Case フィルター対象列
        Case "表示名", "Display name"
            列番号 = 1
        Case "ユーザー名", "User principal name"
            列番号 = 3
        Case "部", "Office"
            列番号 = 10
        Case "課", "Department"
            列番号 = 14
        Case "ライセンス", "Licenses"
            列番号 = 19
        Case Else
            Exit Sub
    End Select
    
    ' 配列の要素数に応じてフィルター条件を設定
    If UBound(抽出値配列) = 0 Then
        ' 単一条件
        対象シート.AutoFilter.Range.AutoFilter field:=列番号, Criteria1:=抽出値配列(0)
    ElseIf UBound(抽出値配列) = 1 Then
        ' 2つの条件（OR）
        対象シート.AutoFilter.Range.AutoFilter field:=列番号, _
            Criteria1:=抽出値配列(0), Operator:=xlOr, Criteria2:=抽出値配列(1)
    Else
        ' 3つ以上の条件（配列フィルター）
        対象シート.AutoFilter.Range.AutoFilter field:=列番号, Criteria1:=抽出値配列, Operator:=xlFilterValues
    End If
    
    Exit Sub
    
エラー処理:
    Err.Raise Err.Number, "指定フィルター処理", Err.Description
End Sub

' ===================================================================
' ヘッダー行の書式設定
' ===================================================================
Sub ヘッダー書式設定(対象シート As Worksheet)
    On Error GoTo エラー処理
    
    Dim ヘッダー範囲 As Range
    Dim 最終列 As Long
    
    最終列 = 対象シート.Cells(1, 対象シート.columns.count).End(xlToLeft).Column
    Set ヘッダー範囲 = 対象シート.Range(対象シート.Cells(1, 1), 対象シート.Cells(1, 最終列))
    
    With ヘッダー範囲
        ' 背景色：RGB(112,173,71)
        .Interior.Color = RGB(112, 173, 71)
        
        ' フォント色：白、太字
        .Font.Color = RGB(255, 255, 255)
        .Font.Bold = True
    End With
    
    Exit Sub
    
エラー処理:
    Err.Raise Err.Number, "ヘッダー書式設定", Err.Description
End Sub