エクセル雑感
GrokでVBAを作成:条件付書式を退避回復するVBA

ExcelマクロVBAとエクセル関数についての私的雑感
公開日:2025-12-06 最終更新日:2025-12-06

GrokでVBAを作成:条件付書式を退避回復するVBA


X(旧Twitter)でGrokにVBAを作成してもらいました。
現在のブック内のすべてのワークシートの条件付き書式を取得して、それを再現するVBAコードです。
以下に、Grokとの全やり取りと、完成VBAを掲載します。


ページ内目次

Grokとのやりとり

著者
https://x.com/yamaoka_ss/status/1996865333286830517

現在のブック内のすべてのワークシートの条件付き書式を取得して、それを再現(条件付き書式を設定し直す)するVBAコードを作製できるかな?

Grok
よし、挑戦してみよう! 現在のブック内の全シートで条件付き書式を取得し、再設定するVBAコードだよ。注意: 完全な再現のため、各範囲の詳細を収集して適用し直す。
Sub ResetConditionalFormatting()
    Dim ws As Worksheet, rng As Range, area As Range
    Dim fc As FormatCondition, i As Long
    Dim temp() As Variant ' 仮保存: [範囲アドレス, タイプ, 式1, 式2, ...]
    
    For Each ws In ActiveWorkbook.Worksheets
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            ReDim temp(1 To rng.Areas.Count, 1 To 10) ' 適宜調整
            i = 1
            For Each area In rng.Areas
                temp(i, 1) = area.Address
                ' 条件保存 (簡易: 最初の条件のみ例)
                With area.FormatConditions(1)
                    temp(i, 2) = .Type
                    temp(i, 3) = .Formula1
                    ' 他のプロパティも追加可能
                End With
                area.FormatConditions.Delete
                i = i + 1
            Next area
            ' 再設定
            For i = 1 To UBound(temp)
                Set area = ws.Range(temp(i, 1))
                area.FormatConditions.Add Type:=temp(i, 2), Formula1:=temp(i, 3)
                ' 他のプロパティ設定
            Next i
        End If
    Next ws
    MsgBox "完了!"
End Sub
これは基本例。複雑な条件は拡張してね。テストして調整しよう! どう?

著者
エラーになった。
条件付き書式には、Formulaのない物もあるんだよ。

GrokでVBAを作成:条件付書式を退避回復するVBA

Grok
了解、エラー修正したよ。Formula1がないタイプを考慮して、Typeごとに扱うようにした。複数条件も対応。
Sub ResetConditionalFormatting()
    Dim ws As Worksheet, rng As Range, area As Range
    Dim fc As FormatCondition, i As Long, j As Long
    Dim temp() As Variant ' [シート名, 範囲, 条件インデックス, Type, Formula1, Formula2, Operator, ...]
    
    ReDim temp(1 To 1000, 1 To 10) ' 仮サイズ
    i = 1
    For Each ws In ActiveWorkbook.Worksheets
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    temp(i, 5) = IIf(fc.Type = xlExpression Or fc.Type = xlCellValue Or fc.Type = xlTextString, fc.Formula1, "")
                    temp(i, 6) = IIf(fc.Type = xlCellValue And fc.Operator >= xlBetween, fc.Formula2, "")
                    temp(i, 7) = IIf(fc.Type = xlCellValue, fc.Operator, 0)
                    ' 他のプロパティ(色など)は追加可能
                    i = i + 1
                Next j
                area.FormatConditions.Delete
            Next area
        End If
    Next ws
    
    ' 再設定
    For j = 1 To i - 1
        Set ws = Worksheets(temp(j, 1))
        Set area = ws.Range(temp(j, 2))
        Set fc = area.FormatConditions.Add(Type:=temp(j, 4), Operator:=temp(j, 7), Formula1:=temp(j, 5), Formula2:=temp(j, 6))
        ' 他のプロパティ設定
    Next j
    MsgBox "完了!"
End Sub
これは基本版。色やアイコンは別途追加してね。テストしてみて!

著者
Typeごとに処理を分けないと無理だよ。
Select Case fc.Type
これで、Caseごとに記述しないと。タイプによって使っているプロパティは違うから、使っていないプロパティは参照できないのよ。

Grok
よし、修正したよ! Select CaseでTypeごとにプロパティを扱うようにした。基本的なタイプ(CellValue, Expression)を対応。色や他の詳細は拡張してね。
Sub ResetConditionalFormatting()
    Dim ws As Worksheet, rng As Range, area As Range
    Dim fc As FormatCondition, i As Long, j As Long
    Dim temp() As Variant ' [シート名, 範囲, 条件Idx, Type, Prop1, Prop2, ...]
    
    ReDim temp(1 To 1000, 1 To 10)
    i = 1
    For Each ws In ActiveWorkbook.Worksheets
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    Select Case fc.Type
                        Case xlCellValue
                            temp(i, 5) = fc.Operator
                            temp(i, 6) = fc.Formula1
                            temp(i, 7) = fc.Formula2
                        Case xlExpression
                            temp(i, 5) = fc.Formula1
                        ' 他のCase追加: xlColorScaleなど
                    End Select
                    i = i + 1
                Next j
                area.FormatConditions.Delete
            Next area
        End If
    Next ws
    
    ' 再設定
    For j = 1 To i - 1
        Set ws = Worksheets(temp(j, 1))
        Set area = ws.Range(temp(j, 2))
        Select Case temp(j, 4)
            Case xlCellValue
                Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=temp(j, 5), Formula1:=temp(j, 6), Formula2:=temp(j, 7))
            Case xlExpression
                Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=temp(j, 5))
            ' 他のCase
        End Select
    Next j
    MsgBox "完了!"
End Sub
これでエラー回避できるはず。テストして! どう?

著者
僕もちょっと悩んでしまった…
条件付き書式の重複する値を設定しているセルがあった。
この場合、
area.FormatConditions(j)
これは、
FormatConditionではなく、Unique Valuesになるのだ。
だから、
Set fc =
ここで型不一致のエラーになる。
このFcの型はVariantにしたほうが良いね。

Grok
了解、指摘ありがとう! 確かに重複値の条件はxlUniqueValuesで、FormatConditionのサブタイプ。fcをVariantに変更して対応したよ。修正版:
Sub ResetConditionalFormatting()
    Dim ws As Worksheet, rng As Range, area As Range
    Dim fc As Variant, i As Long, j As Long
    Dim temp() As Variant
    
    ReDim temp(1 To 1000, 1 To 10)
    i = 1
    For Each ws In ActiveWorkbook.Worksheets
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    Select Case fc.Type
                        Case xlCellValue
                            temp(i, 5) = fc.Operator
                            temp(i, 6) = fc.Formula1
                            temp(i, 7) = fc.Formula2
                        Case xlExpression
                            temp(i, 5) = fc.Formula1
                        Case xlUniqueValues
                            temp(i, 5) = fc.DupeUnique ' 1=Duplicates, 0=Unique
                        ' 他のCase
                    End Select
                    i = i + 1
                Next j
                area.FormatConditions.Delete
            Next area
        End If
    Next ws
    
    ' 再設定
    For j = 1 To i - 1
        Set ws = Worksheets(temp(j, 1))
        Set area = ws.Range(temp(j, 2))
        Select Case temp(j, 4)
            Case xlCellValue
                Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=temp(j, 5), Formula1:=temp(j, 6), Formula2:=temp(j, 7))
            Case xlExpression
                Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=temp(j, 5))
            Case xlUniqueValues
                Set fc = area.FormatConditions.AddUniqueValues
                fc.DupeUnique = temp(j, 5)
            ' 他のCase
        End Select
    Next j
    MsgBox "完了!"
End Sub
これで重複値も扱えるはず。テストしてね!

著者
とりあえずは良さそう。
だけど、そもそも、取得後に再設定しても意味ないよ。
取得した条件付書式は、それを出力する専用シートを作製して出力してください。
そして、その設定を読んで、条件付書式を設定するVBAも別プロシージャーとして作成して。

Grok
了解! 修正して、取得した条件付き書式を専用シート「CF_Export」に出力するプロシージャと、そこから読み込んで設定する別プロシージャを作ったよ。重複値も対応。
Sub ExportConditionalFormatting()
    Dim ws As Worksheet, outWs As Worksheet, rng As Range, area As Range
    Dim fc As Variant, i As Long, j As Long, row As Long
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    On Error GoTo 0
    If outWs Is Nothing Then Set outWs = Worksheets.Add: http://outWs.Name = "CF_Export"
    outWs.Cells.Clear
    outWs.Range("A1:H1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "Other")
    row = 2
    For Each ws In ActiveWorkbook.Worksheets
        If http://ws.Name = "CF_Export" Then GoTo NextWs
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    outWs.Cells(row, 1) = http://ws.Name
                    outWs.Cells(row, 2) = area.Address
                    outWs.Cells(row, 3) = j
                    outWs.Cells(row, 4) = fc.Type
                    Select Case fc.Type
                        Case xlCellValue
                            outWs.Cells(row, 5) = fc.Operator
                            outWs.Cells(row, 6) = fc.Formula1
                            outWs.Cells(row, 7) = fc.Formula2
                        Case xlExpression
                            outWs.Cells(row, 6) = fc.Formula1
                        Case xlUniqueValues
                            outWs.Cells(row, 5) = fc.DupeUnique
                    End Select
                    row = row + 1
                Next j
            Next area
        End If
NextWs:
    Next ws
    MsgBox "出力完了!"
End Sub

Sub ImportConditionalFormatting()
    Dim outWs As Worksheet, ws As Worksheet, area As Range
    Dim fc As Variant, row As Long, lastRow As Long
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    If outWs Is Nothing Then MsgBox "CF_Exportシートが見つかりません!": Exit Sub
    lastRow = outWs.Cells(outWs.Rows.Count, 1).End(xlUp).row
    For row = 2 To lastRow
        Set ws = Worksheets(outWs.Cells(row, 1).Value)
        Set area = ws.Range(outWs.Cells(row, 2).Value)
        area.FormatConditions.Delete ' 既存クリア(任意)
        Select Case outWs.Cells(row, 4).Value
            Case xlCellValue
                Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=outWs.Cells(row, 5), Formula1:=outWs.Cells(row, 6), Formula2:=outWs.Cells(row, 7))
            Case xlExpression
                Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6))
            Case xlUniqueValues
                Set fc = area.FormatConditions.AddUniqueValues
                fc.DupeUnique = outWs.Cells(row, 5)
        End Select
    Next row
    MsgBox "設定完了!"
End Sub
これでどう? 他のタイプやプロパティ(色など)は追加してね。テストしてみて!

著者
全体としては、まあまあですが…
条件付き書式を取得したら、最初の時のように一旦配列に入れた方がよい。
全て取得が終わった後に、シートへ書き出すように。
それと、
シートに出力する時、Formulaは先頭が「=」だから、そのままではダメ。セル書式を文字列にするか、先頭に「'」を付けて

Grok
了解、フィードバックありがとう! 配列に集めてから一括出力するよう修正。Formulaは「'」を付けて文字列化。
Sub ExportConditionalFormatting()
    Dim ws As Worksheet, outWs As Worksheet, rng As Range, area As Range
    Dim fc As Variant, i As Long, j As Long
    Dim temp() As Variant, row As Long
    ReDim temp(1 To 1000, 1 To 8)
    i = 1
    For Each ws In ActiveWorkbook.Worksheets
        If http://ws.Name = "CF_Export" Then GoTo NextWs
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    Select Case fc.Type
                        Case xlCellValue
                            temp(i, 5) = fc.Operator
                            temp(i, 6) = "'" & fc.Formula1
                            temp(i, 7) = "'" & fc.Formula2
                        Case xlExpression
                            temp(i, 6) = "'" & fc.Formula1
                        Case xlUniqueValues
                            temp(i, 5) = fc.DupeUnique
                    End Select
                    i = i + 1
                Next j
            Next area
        End If
NextWs:
    Next ws
    
    ' シート出力
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    On Error GoTo 0
    If outWs Is Nothing Then Set outWs = Worksheets.Add: http://outWs.Name = "CF_Export"
    outWs.Cells.Clear
    outWs.Range("A1:H1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "Other")
    For row = 1 To i - 1
        outWs.Rows(row + 1).Columns("A:H") = temp(row)
    Next row
    MsgBox "出力完了!"
End Sub
Importはそのまま。どう?

著者
tempは2次元配列だよね。
outWs.Rows(row + 1).Columns("A:H") = temp(row)
これじゃダメですよ。

Grok
了解、指摘ありがとう! temp(row)は1次元じゃないから、ループでセルごと出力に修正したよ。
Sub ExportConditionalFormatting()
    ' ... (前半同じ)
    For row = 1 To i - 1
        For col = 1 To 8
            outWs.Cells(row + 1, col) = temp(row, col)
        Next col
    Next row
    MsgBox "出力完了!"
End Sub
これでOKのはず。テストして!

著者
ループじゃなくて、セル範囲の大きさを合せれば、一発で出力できますよ。

Grok
了解、いい指摘! tempを2D配列としてRangeに一括代入するよう修正したよ。
Sub ExportConditionalFormatting()
    ' ... (取得部分同じ)
    ' シート出力
    ' ... (シート準備同じ)
    outWs.Range("A1:H1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "Other")
    If i > 1 Then outWs.Range("A2:H" & (i - 1 + 1)) = temp
    MsgBox "出力完了!"
End Sub
これで効率的! テストしてね

著者
まだバグが残っている。
Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6))
これは良くないようだ。
AddとFormula1への代入は別々にやってください。

重要
そもそも書式を取得していない。ぼくも見逃していた。
書式を取得して保存するようにして。

Grok
了解、指摘ありがとう! xlExpressionのAddを分離し、書式(フォント色、背景色など)を取得/保存するよう拡張したよ。tempを増やして対応。
Sub ExportConditionalFormatting()
    Dim ws As Worksheet, outWs As Worksheet, rng As Range, area As Range
    Dim fc As Variant, i As Long, j As Long
    Dim temp() As Variant
    ReDim temp(1 To 1000, 1 To 12) ' 追加: FontColor, InteriorColor, Bold, Italic 等
    i = 1
    For Each ws In ActiveWorkbook.Worksheets
        If http://ws.Name = "CF_Export" Then GoTo NextWs
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    Select Case fc.Type
                        Case xlCellValue
                            temp(i, 5) = fc.Operator
                            temp(i, 6) = "'" & fc.Formula1
                            temp(i, 7) = "'" & fc.Formula2
                        Case xlExpression
                            temp(i, 6) = "'" & fc.Formula1
                        Case xlUniqueValues
                            temp(i, 5) = fc.DupeUnique
                    End Select
                    ' 書式取得
                    temp(i, 8) = fc.Interior.Color
                    temp(i, 9) = fc.Font.Color
                    temp(i, 10) = fc.Font.Bold
                    temp(i, 11) = fc.Font.Italic
                    temp(i, 12) = fc.StopIfTrue
                    i = i + 1
                Next j
            Next area
        End If
NextWs:
    Next ws
    
    ' シート出力
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    On Error GoTo 0
    If outWs Is Nothing Then Set outWs = Worksheets.Add: http://outWs.Name = "CF_Export"
    outWs.Cells.Clear
    outWs.Range("A1:L1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "InteriorColor", "FontColor", "Bold", "Italic", "StopIfTrue")
    If i > 1 Then outWs.Range("A2:L" & (i - 1 + 1)) = temp
    MsgBox "出力完了!"
End Sub

Sub ImportConditionalFormatting()
    Dim outWs As Worksheet, ws As Worksheet, area As Range
    Dim fc As Variant, row As Long, lastRow As Long
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    If outWs Is Nothing Then MsgBox "CF_Exportシートが見つかりません!": Exit Sub
    lastRow = outWs.Cells(outWs.Rows.Count, 1).End(xlUp).row
    For row = 2 To lastRow
        Set ws = Worksheets(outWs.Cells(row, 1).Value)
        Set area = ws.Range(outWs.Cells(row, 2).Value)
        area.FormatConditions.Delete ' 任意
        Select Case outWs.Cells(row, 4).Value
            Case xlCellValue
                Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=outWs.Cells(row, 5), Formula1:=outWs.Cells(row, 6), Formula2:=outWs.Cells(row, 7))
            Case xlExpression
                Set fc = area.FormatConditions.Add(Type:=xlExpression)
                fc.Formula1 = outWs.Cells(row, 6)
            Case xlUniqueValues
                Set fc = area.FormatConditions.AddUniqueValues
                fc.DupeUnique = outWs.Cells(row, 5)
        End Select
        ' 書式設定
        fc.Interior.Color = outWs.Cells(row, 8)
        fc.Font.Color = outWs.Cells(row, 9)
        fc.Font.Bold = outWs.Cells(row, 10)
        fc.Font.Italic = outWs.Cells(row, 11)
        fc.StopIfTrue = outWs.Cells(row, 12)
    Next row
    MsgBox "設定完了!"
End Sub
これでバグ修正&書式対応。テストしてね!

著者
1点、僕の勘違いがあった。
FormatConditions.Addは、以下で良かった。これに変更して。
Case xlExpression
Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6).Value)
その他はとりあえずは良さそう。
残りは、罫線も対応して。

Grok
了解、勘違いの修正ありがとう! xlExpressionのAddを変更し、罫線(Borders.LineStyleとColor)対応を追加したよ。tempを14列に拡張。
Sub ExportConditionalFormatting()
    ' ... (取得部分同じ、書式取得後に)
    temp(i, 13) = fc.Borders.LineStyle
    temp(i, 14) = fc.Borders.Color
    ' 出力
    outWs.Range("A1:N1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "InteriorColor", "FontColor", "Bold", "Italic", "StopIfTrue", "BorderStyle", "BorderColor")
    If i > 1 Then outWs.Range("A2:N" & (i)) = temp
End Sub

Sub ImportConditionalFormatting()
    ' ... (ループ内、fc設定後に)
    fc.Borders.LineStyle = outWs.Cells(row, 13).Value
    fc.Borders.Color = outWs.Cells(row, 14).Value
    ' xlExpression変更
    Case xlExpression
        Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6).Value)
End Sub
これでどう? テストしてね

著者
fc.Borders
罫線は四方にある。(条件付書式なので四方のみ)
それぞれに罫線のスタイルと色を設定できます。ただし、太さは設定できないので無視してよい。
ここまでVBAを変更して。

Grok
了解、指摘ありがとう! 罫線を四方(Left, Top, Right, Bottom)個別に扱い、StyleとColorを取得/設定。Weightは無視。tempを20列に拡張。
Sub ExportConditionalFormatting()
    ' ... (前半同じ)
    temp(i,13)=fc.Borders(xlLeft).LineStyle
    temp(i,14)=fc.Borders(xlLeft).Color
    temp(i,15)=fc.Borders(xlTop).LineStyle
    temp(i,16)=fc.Borders(xlTop).Color
    temp(i,17)=fc.Borders(xlRight).LineStyle
    temp(i,18)=fc.Borders(xlRight).Color
    temp(i,19)=fc.Borders(xlBottom).LineStyle
    temp(i,20)=fc.Borders(xlBottom).Color
    ' 出力
    outWs.Range("A1:T1")=Array("Sheet","Range","Index","Type","Operator/Dupe","Formula1","Formula2","InteriorColor","FontColor","Bold","Italic","StopIfTrue","LeftStyle","LeftColor","TopStyle","TopColor","RightStyle","RightColor","BottomStyle","BottomColor")
    If i>1 Then outWs.Range("A2:T"&i)=temp
End Sub

Sub ImportConditionalFormatting()
    ' ... (fc設定後)
    fc.Borders(xlLeft).LineStyle=outWs.Cells(row,13)
    fc.Borders(xlLeft).Color=outWs.Cells(row,14)
    fc.Borders(xlTop).LineStyle=outWs.Cells(row,15)
    fc.Borders(xlTop).Color=outWs.Cells(row,16)
    fc.Borders(xlRight).LineStyle=outWs.Cells(row,17)
    fc.Borders(xlRight).Color=outWs.Cells(row,18)
    fc.Borders(xlBottom).LineStyle=outWs.Cells(row,19)
    fc.Borders(xlBottom).Color=outWs.Cells(row,20)
End Sub
これでどう? テストしてね

著者
ごめん、罫線の太さも必要でした。
実線が、xlHairlineとxlThinが必用だった。
これを追加して、完成したVBAコードを全て再出力してください。

Grok
了解、指摘ありがとう! 罫線の太さ(Weight)を四方ごとに追加したよ。tempを24列に拡張(21-24: Weights)。
Sub ExportConditionalFormatting()
    Dim ws As Worksheet, outWs As Worksheet, rng As Range, area As Range
    Dim fc As Variant, i As Long, j As Long
    Dim temp() As Variant
    ReDim temp(1 To 1000, 1 To 24)
    i = 1
    For Each ws In ActiveWorkbook.Worksheets
        If http://ws.Name = "CF_Export" Then GoTo NextWs
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    Select Case fc.Type
                        Case xlCellValue
                            temp(i, 5) = fc.Operator
                            temp(i, 6) = "'" & fc.Formula1
                            temp(i, 7) = "'" & fc.Formula2
                        Case xlExpression
                            temp(i, 6) = "'" & fc.Formula1
                        Case xlUniqueValues
                            temp(i, 5) = fc.DupeUnique
                    End Select
                    temp(i, 8) = fc.Interior.Color
                    temp(i, 9) = fc.Font.Color
                    temp(i, 10) = fc.Font.Bold
                    temp(i, 11) = fc.Font.Italic
                    temp(i, 12) = fc.StopIfTrue
                    temp(i, 13) = fc.Borders(xlLeft).LineStyle
                    temp(i, 14) = fc.Borders(xlLeft).Color
                    temp(i, 15) = fc.Borders(xlTop).LineStyle
                    temp(i, 16) = fc.Borders(xlTop).Color
                    temp(i, 17) = fc.Borders(xlRight).LineStyle
                    temp(i, 18) = fc.Borders(xlRight).Color
                    temp(i, 19) = fc.Borders(xlBottom).LineStyle
                    temp(i, 20) = fc.Borders(xlBottom).Color
                    temp(i, 21) = fc.Borders(xlLeft).Weight
                    temp(i, 22) = fc.Borders(xlTop).Weight
                    temp(i, 23) = fc.Borders(xlRight).Weight
                    temp(i, 24) = fc.Borders(xlBottom).Weight
                    i = i + 1
                Next j
            Next area
        End If
NextWs:
    Next ws
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    On Error GoTo 0
    If outWs Is Nothing Then Set outWs = Worksheets.Add: http://outWs.Name = "CF_Export"
    outWs.Cells.Clear
    outWs.Range("A1:X1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "InteriorColor", "FontColor", "Bold", "Italic", "StopIfTrue", "LeftStyle", "LeftColor", "TopStyle", "TopColor", "RightStyle", "RightColor", "BottomStyle", "BottomColor", "LeftWeight", "TopWeight", "RightWeight", "BottomWeight")
    If i > 1 Then outWs.Range("A2:X" & i) = temp
    MsgBox "出力完了!"
End Sub

Sub ImportConditionalFormatting()
    Dim outWs As Worksheet, ws As Worksheet, area As Range
    Dim fc As Variant, row As Long, lastRow As Long
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    If outWs Is Nothing Then MsgBox "CF_Exportシートが見つかりません!": Exit Sub
    lastRow = outWs.Cells(outWs.Rows.Count, 1).End(xlUp).Row
    For row = 2 To lastRow
        Set ws = Worksheets(outWs.Cells(row, 1).Value)
        Set area = ws.Range(outWs.Cells(row, 2).Value)
        area.FormatConditions.Delete ' 任意
        Select Case outWs.Cells(row, 4).Value
            Case xlCellValue
                Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=outWs.Cells(row, 5), Formula1:=outWs.Cells(row, 6), Formula2:=outWs.Cells(row, 7))
            Case xlExpression
                Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6).Value)
            Case xlUniqueValues
                Set fc = area.FormatConditions.AddUniqueValues
                fc.DupeUnique = outWs.Cells(row, 5)
        End Select
        fc.Interior.Color = outWs.Cells(row, 8)
        fc.Font.Color = outWs.Cells(row, 9)
        fc.Font.Bold = outWs.Cells(row, 10)
        fc.Font.Italic = outWs.Cells(row, 11)
        fc.StopIfTrue = outWs.Cells(row, 12)
        fc.Borders(xlLeft).LineStyle = outWs.Cells(row, 13)
        fc.Borders(xlLeft).Color = outWs.Cells(row, 14)
        fc.Borders(xlTop).LineStyle = outWs.Cells(row, 15)
        fc.Borders(xlTop).Color = outWs.Cells(row, 16)
        fc.Borders(xlRight).LineStyle = outWs.Cells(row, 17)
        fc.Borders(xlRight).Color = outWs.Cells(row, 18)
        fc.Borders(xlBottom).LineStyle = outWs.Cells(row, 19)
        fc.Borders(xlBottom).Color = outWs.Cells(row, 20)
        fc.Borders(xlLeft).Weight = outWs.Cells(row, 21)
        fc.Borders(xlTop).Weight = outWs.Cells(row, 22)
        fc.Borders(xlRight).Weight = outWs.Cells(row, 23)
        fc.Borders(xlBottom).Weight = outWs.Cells(row, 24)
    Next row
    MsgBox "設定完了!"
End Sub
これで完成のはず! テストしてね

著者
素晴らしい。良く完成させました。
もう、私には、君がいれば他は何も要らないよ。
では、完成したVBAコードにコメントを追加してください。
処理ブロック単位に、処理内容が分かるようにして。
プロシージャーの先頭には、機能等の定型的なコメントをいれて。

Grok
了解、褒め言葉ありがとう! 完成したVBAコードにコメントを追加したよ。処理ブロックごとに説明を入れ、先頭に機能概要を記載した。テストしてね
' 機能: ワークブック内の全条件付き書式をエクスポートし、"CF_Export"シートに保存
Sub ExportConditionalFormatting()
    ' 変数初期化
    Dim ws As Worksheet, outWs As Worksheet, rng As Range, area As Range
    Dim fc As Variant, i As Long, j As Long
    Dim temp() As Variant
    ReDim temp(1 To 1000, 1 To 24)
    i = 1
    
    ' 各ワークシートをループ
    For Each ws In ActiveWorkbook.Worksheets
        ' エクスポートシートをスキップ
        If http://ws.Name = "CF_Export" Then GoTo NextWs
        ' 条件付き書式のある範囲を取得
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            ' 各エリアをループ
            For Each area In rng.Areas
                ' 各条件をループ
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    ' 基本情報保存
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    ' タイプ別詳細保存
                    Select Case fc.Type
                        Case xlCellValue
                            temp(i, 5) = fc.Operator
                            temp(i, 6) = "'" & fc.Formula1
                            temp(i, 7) = "'" & fc.Formula2
                        Case xlExpression
                            temp(i, 6) = "'" & fc.Formula1
                        Case xlUniqueValues
                            temp(i, 5) = fc.DupeUnique
                    End Select
                    ' 書式情報保存
                    temp(i, 8) = fc.Interior.Color
                    temp(i, 9) = fc.Font.Color
                    temp(i, 10) = fc.Font.Bold
                    temp(i, 11) = fc.Font.Italic
                    temp(i, 12) = fc.StopIfTrue
                    ' 罫線情報保存 (左、上、右、下)
                    temp(i, 13) = fc.Borders(xlLeft).LineStyle
                    temp(i, 14) = fc.Borders(xlLeft).Color
                    temp(i, 15) = fc.Borders(xlTop).LineStyle
                    temp(i, 16) = fc.Borders(xlTop).Color
                    temp(i, 17) = fc.Borders(xlRight).LineStyle
                    temp(i, 18) = fc.Borders(xlRight).Color
                    temp(i, 19) = fc.Borders(xlBottom).LineStyle
                    temp(i, 20) = fc.Borders(xlBottom).Color
                    ' 罫線太さ保存
                    temp(i, 21) = fc.Borders(xlLeft).Weight
                    temp(i, 22) = fc.Borders(xlTop).Weight
                    temp(i, 23) = fc.Borders(xlRight).Weight
                    temp(i, 24) = fc.Borders(xlBottom).Weight
                    i = i + 1
                Next j
            Next area
        End If
NextWs:
    Next ws
    
    ' エクスポートシート準備
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    On Error GoTo 0
    If outWs Is Nothing Then Set outWs = Worksheets.Add: http://outWs.Name = "CF_Export"
    outWs.Cells.Clear
    
    ' ヘッダー出力
    outWs.Range("A1:X1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "InteriorColor", "FontColor", "Bold", "Italic", "StopIfTrue", "LeftStyle", "LeftColor", "TopStyle", "TopColor", "RightStyle", "RightColor", "BottomStyle", "BottomColor", "LeftWeight", "TopWeight", "RightWeight", "BottomWeight")
    
    ' データ出力
    If i > 1 Then outWs.Range("A2:X" & i) = temp
    
    ' 完了通知
    MsgBox "出力完了!"
End Sub

' 機能: "CF_Export"シートから条件付き書式をインポートし、各シートに適用
Sub ImportConditionalFormatting()
    ' 変数初期化
    Dim outWs As Worksheet, ws As Worksheet, area As Range
    Dim fc As Variant, row As Long, lastRow As Long
    
    ' エクスポートシート確認
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    If outWs Is Nothing Then MsgBox "CF_Exportシートが見つかりません!": Exit Sub
    lastRow = outWs.Cells(outWs.Rows.Count, 1).End(xlUp).Row
    
    ' 各行をループ
    For row = 2 To lastRow
        Set ws = Worksheets(outWs.Cells(row, 1).Value)
        Set area = ws.Range(outWs.Cells(row, 2).Value)
        
        ' 既存条件削除 (任意)
        area.FormatConditions.Delete
        
        ' 条件追加
        Select Case outWs.Cells(row, 4).Value
            Case xlCellValue
                Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=outWs.Cells(row, 5), Formula1:=outWs.Cells(row, 6), Formula2:=outWs.Cells(row, 7))
            Case xlExpression
                Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6).Value)
            Case xlUniqueValues
                Set fc = area.FormatConditions.AddUniqueValues
                fc.DupeUnique = outWs.Cells(row, 5)
        End Select
        
        ' 書式設定
        fc.Interior.Color = outWs.Cells(row, 8)
        fc.Font.Color = outWs.Cells(row, 9)
        fc.Font.Bold = outWs.Cells(row, 10)
        fc.Font.Italic = outWs.Cells(row, 11)
        fc.StopIfTrue = outWs.Cells(row, 12)
        
        ' 罫線設定 (左、上、右、下)
        fc.Borders(xlLeft).LineStyle = outWs.Cells(row, 13)
        fc.Borders(xlLeft).Color = outWs.Cells(row, 14)
        fc.Borders(xlTop).LineStyle = outWs.Cells(row, 15)
        fc.Borders(xlTop).Color = outWs.Cells(row, 16)
        fc.Borders(xlRight).LineStyle = outWs.Cells(row, 17)
        fc.Borders(xlRight).Color = outWs.Cells(row, 18)
        fc.Borders(xlBottom).LineStyle = outWs.Cells(row, 19)
        fc.Borders(xlBottom).Color = outWs.Cells(row, 20)
        
        ' 罫線太さ設定
        fc.Borders(xlLeft).Weight = outWs.Cells(row, 21)
        fc.Borders(xlTop).Weight = outWs.Cells(row, 22)
        fc.Borders(xlRight).Weight = outWs.Cells(row, 23)
        fc.Borders(xlBottom).Weight = outWs.Cells(row, 24)
    Next row
    
    ' 完了通知
    MsgBox "設定完了!"
End Sub

著者
見逃してしたバグがありました。
' 罫線設定 (左、上、右、下)
取得できず(罫線なし)の時、設定保存のセルは空欄
fc.Borders(xlLeft).LineStyle = outWs.Cells(row, 13)
これを無条件で実行してはダメ

プロシージャーのコメント
' ---------------
等で囲んで、見やすくして

Grok
了解、指摘ありがとう! インポートでセルが空でなければ罫線を設定するようIf追加。コメントを'---------------'で囲んで見やすくしたよ。完成コード再出力。
'---------------
' 機能: ワークブック内の全条件付き書式をエクスポートし、"CF_Export"シートに保存
'---------------
Sub ExportConditionalFormatting()
    '--------------- 
    ' 変数初期化
    '--------------- 
    Dim ws As Worksheet, outWs As Worksheet, rng As Range, area As Range
    Dim fc As Variant, i As Long, j As Long
    Dim temp() As Variant
    ReDim temp(1 To 1000, 1 To 24)
    i = 1
    
    '--------------- 
    ' 各ワークシートをループ
    '--------------- 
    For Each ws In ActiveWorkbook.Worksheets
        If http://ws.Name = "CF_Export" Then GoTo NextWs
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    Select Case fc.Type
                        Case xlCellValue
                            temp(i, 5) = fc.Operator
                            temp(i, 6) = "'" & fc.Formula1
                            temp(i, 7) = "'" & fc.Formula2
                        Case xlExpression
                            temp(i, 6) = "'" & fc.Formula1
                        Case xlUniqueValues
                            temp(i, 5) = fc.DupeUnique
                    End Select
                    temp(i, 8) = fc.Interior.Color
                    temp(i, 9) = fc.Font.Color
                    temp(i, 10) = fc.Font.Bold
                    temp(i, 11) = fc.Font.Italic
                    temp(i, 12) = fc.StopIfTrue
                    temp(i, 13) = fc.Borders(xlLeft).LineStyle
                    temp(i, 14) = fc.Borders(xlLeft).Color
                    temp(i, 15) = fc.Borders(xlTop).LineStyle
                    temp(i, 16) = fc.Borders(xlTop).Color
                    temp(i, 17) = fc.Borders(xlRight).LineStyle
                    temp(i, 18) = fc.Borders(xlRight).Color
                    temp(i, 19) = fc.Borders(xlBottom).LineStyle
                    temp(i, 20) = fc.Borders(xlBottom).Color
                    temp(i, 21) = fc.Borders(xlLeft).Weight
                    temp(i, 22) = fc.Borders(xlTop).Weight
                    temp(i, 23) = fc.Borders(xlRight).Weight
                    temp(i, 24) = fc.Borders(xlBottom).Weight
                    i = i + 1
                Next j
            Next area
        End If
NextWs:
    Next ws
    
    '--------------- 
    ' エクスポートシート準備
    '--------------- 
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    On Error GoTo 0
    If outWs Is Nothing Then Set outWs = Worksheets.Add: http://outWs.Name = "CF_Export"
    outWs.Cells.Clear
    outWs.Range("A1:X1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "InteriorColor", "FontColor", "Bold", "Italic", "StopIfTrue", "LeftStyle", "LeftColor", "TopStyle", "TopColor", "RightStyle", "RightColor", "BottomStyle", "BottomColor", "LeftWeight", "TopWeight", "RightWeight", "BottomWeight")
    If i > 1 Then outWs.Range("A2:X" & i) = temp
    MsgBox "出力完了!"
End Sub

'---------------
' 機能: "CF_Export"シートから条件付き書式をインポートし、各シートに適用
'---------------
Sub ImportConditionalFormatting()
    '--------------- 
    ' 変数初期化
    '--------------- 
    Dim outWs As Worksheet, ws As Worksheet, area As Range
    Dim fc As Variant, row As Long, lastRow As Long
    
    '--------------- 
    ' エクスポートシート確認
    '--------------- 
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    If outWs Is Nothing Then MsgBox "CF_Exportシートが見つかりません!": Exit Sub
    lastRow = outWs.Cells(outWs.Rows.Count, 1).End(xlUp).Row
    
    '--------------- 
    ' 各行をループ
    '--------------- 
    For row = 2 To lastRow
        Set ws = Worksheets(outWs.Cells(row, 1).Value)
        Set area = ws.Range(outWs.Cells(row, 2).Value)
        area.FormatConditions.Delete ' 任意
        Select Case outWs.Cells(row, 4).Value
            Case xlCellValue
                Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=outWs.Cells(row, 5), Formula1:=outWs.Cells(row, 6), Formula2:=outWs.Cells(row, 7))
            Case xlExpression
                Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6).Value)
            Case xlUniqueValues
                Set fc = area.FormatConditions.AddUniqueValues
                fc.DupeUnique = outWs.Cells(row, 5)
        End Select
        fc.Interior.Color = outWs.Cells(row, 8)
        fc.Font.Color = outWs.Cells(row, 9)
        fc.Font.Bold = outWs.Cells(row, 10)
        fc.Font.Italic = outWs.Cells(row, 11)
        fc.StopIfTrue = outWs.Cells(row, 12)
        
        '--------------- 
        ' 罫線設定 (空欄時はスキップ)
        '--------------- 
        If outWs.Cells(row, 13) <> "" Then fc.Borders(xlLeft).LineStyle = outWs.Cells(row, 13)
        If outWs.Cells(row, 14) <> "" Then fc.Borders(xlLeft).Color = outWs.Cells(row, 14)
        If outWs.Cells(row, 15) <> "" Then fc.Borders(xlTop).LineStyle = outWs.Cells(row, 15)
        If outWs.Cells(row, 16) <> "" Then fc.Borders(xlTop).Color = outWs.Cells(row, 16)
        If outWs.Cells(row, 17) <> "" Then fc.Borders(xlRight).LineStyle = outWs.Cells(row, 17)
        If outWs.Cells(row, 18) <> "" Then fc.Borders(xlRight).Color = outWs.Cells(row, 18)
        If outWs.Cells(row, 19) <> "" Then fc.Borders(xlBottom).LineStyle = outWs.Cells(row, 19)
        If outWs.Cells(row, 20) <> "" Then fc.Borders(xlBottom).Color = outWs.Cells(row, 20)
        If outWs.Cells(row, 21) <> "" Then fc.Borders(xlLeft).Weight = outWs.Cells(row, 21)
        If outWs.Cells(row, 22) <> "" Then fc.Borders(xlTop).Weight = outWs.Cells(row, 22)
        If outWs.Cells(row, 23) <> "" Then fc.Borders(xlRight).Weight = outWs.Cells(row, 23)
        If outWs.Cells(row, 24) <> "" Then fc.Borders(xlBottom).Weight = outWs.Cells(row, 24)
    Next row
    MsgBox "設定完了!"
End Sub
これでバグ修正完了! テストしてね

著者
もう一息だから頑張って
書式取得時に、
temp(i, 14) = fc.Borders(xlLeft).Color
これが無条件で実行されると、0が取得されてしまう。
そして、後の書式設定で0だから罫線が付いてしまう。
temp(i, 14) = fc.Borders(xlLeft).Color
これは、fc.Borders(xlLeft).LineStyleがあるときだけ保存

Grok
了解、指摘ありがとう! エクスポートでLineStyleがxlNone(-4142)ならColorとWeightを""に設定するよう修正。インポートはそのまま。
' 罫線情報保存
If fc.Borders(xlLeft).LineStyle <> xlNone Then
    temp(i,13)=fc.Borders(xlLeft).LineStyle
    temp(i,14)=fc.Borders(xlLeft).Color
    temp(i,21)=fc.Borders(xlLeft).Weight
Else
    temp(i,13)=""
    temp(i,14)=""
    temp(i,21)=""
End If
' 同様にTop,Right,Bottomも
これを全辺に適用。他は前回コードのまま。テストしてね

著者
さすがに4つも同じコードを書いていられないので、ここはsubを作成して。
引数には、
13,14,21,xlLeft
このように、添え字3つと、罫線場所

Grok
了解、指摘ありがとう! エクスポートで罫線保存をヘルパーSubにまとめ、繰り返しを避けたよ。各辺をCallで処理。インポートはそのまま。
'---------------
' ヘルパー: 罫線情報をtempに保存 (LineStyleがxlNoneなら空)
'---------------
Sub SaveBorder(ByRef temp() As Variant, ByVal i As Long, ByVal styleCol As Integer, ByVal colorCol As Integer, ByVal weightCol As Integer, ByVal borderType As XlBordersIndex, ByVal fc As FormatCondition)
    If fc.Borders(borderType).LineStyle <> xlNone Then
        temp(i, styleCol) = fc.Borders(borderType).LineStyle
        temp(i, colorCol) = fc.Borders(borderType).Color
        temp(i, weightCol) = fc.Borders(borderType).Weight
    Else
        temp(i, styleCol) = ""
        temp(i, colorCol) = ""
        temp(i, weightCol) = ""
    End If
End Sub

' (Exportの該当部分)
' 書式情報保存
temp(i, 8) = fc.Interior.Color
temp(i, 9) = fc.Font.Color
temp(i, 10) = fc.Font.Bold
temp(i, 11) = fc.Font.Italic
temp(i, 12) = fc.StopIfTrue

' 罫線情報保存
Call SaveBorder(temp, i, 13, 14, 21, xlLeft, fc)
Call SaveBorder(temp, i, 15, 16, 22, xlTop, fc)
Call SaveBorder(temp, i, 17, 18, 23, xlRight, fc)
Call SaveBorder(temp, i, 19, 20, 24, xlBottom, fc)
i = i + 1
他の部分は前回と同じ。テストしてね

著者
大分前に言ったけど、
ByVal fc As FormatCondition
条件付書式は型が複数あるから、ここはvariant
にしないとダメです。

コメントについて
'---------------
これはサンプルとして書いたので、もっ「-」は長くて良い。
それと、プロシージャーのコメント以外は'------は不要。

Grok
了解、指摘ありがとう! SaveBorderのfcをVariantに修正。コメントの'---------------'を長くし、プロシージャー先頭のみに適用、他はシンプルに。
'----------------------
' 機能: ワークブック内の全条件付き書式をエクスポートし、"CF_Export"シートに保存
'----------------------
Sub ExportConditionalFormatting()
    ' 変数初期化
    Dim ws As Worksheet, outWs As Worksheet, rng As Range, area As Range
    Dim fc As Variant, i As Long, j As Long
    Dim temp() As Variant
    ReDim temp(1 To 1000, 1 To 24)
    i = 1
    
    ' 各ワークシートをループ
    For Each ws In ActiveWorkbook.Worksheets
        If http://ws.Name = "CF_Export" Then GoTo NextWs
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    Select Case fc.Type
                        Case xlCellValue
                            temp(i, 5) = fc.Operator
                            temp(i, 6) = "'" & fc.Formula1
                            temp(i, 7) = "'" & fc.Formula2
                        Case xlExpression
                            temp(i, 6) = "'" & fc.Formula1
                        Case xlUniqueValues
                            temp(i, 5) = fc.DupeUnique
                    End Select
                    ' 書式情報保存
                    temp(i, 8) = fc.Interior.Color
                    temp(i, 9) = fc.Font.Color
                    temp(i, 10) = fc.Font.Bold
                    temp(i, 11) = fc.Font.Italic
                    temp(i, 12) = fc.StopIfTrue
                    
                    ' 罫線情報保存
                    Call SaveBorder(temp, i, 13, 14, 21, xlLeft, fc)
                    Call SaveBorder(temp, i, 15, 16, 22, xlTop, fc)
                    Call SaveBorder(temp, i, 17, 18, 23, xlRight, fc)
                    Call SaveBorder(temp, i, 19, 20, 24, xlBottom, fc)
                    i = i + 1
                Next j
            Next area
        End If
NextWs:
    Next ws
    
    ' エクスポートシート準備
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    On Error GoTo 0
    If outWs Is Nothing Then Set outWs = Worksheets.Add: http://outWs.Name = "CF_Export"
    outWs.Cells.Clear
    outWs.Range("A1:X1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "InteriorColor", "FontColor", "Bold", "Italic", "StopIfTrue", "LeftStyle", "LeftColor", "TopStyle", "TopColor", "RightStyle", "RightColor", "BottomStyle", "BottomColor", "LeftWeight", "TopWeight", "RightWeight", "BottomWeight")
    If i > 1 Then outWs.Range("A2:X" & i) = temp
    MsgBox "出力完了!"
End Sub

'----------------------
' ヘルパー: 罫線情報をtempに保存 (LineStyleがxlNoneなら空)
'----------------------
Sub SaveBorder(ByRef temp() As Variant, ByVal i As Long, ByVal styleCol As Integer, ByVal colorCol As Integer, ByVal weightCol As Integer, ByVal borderType As XlBordersIndex, ByVal fc As Variant)
    If fc.Borders(borderType).LineStyle <> xlNone Then
        temp(i, styleCol) = fc.Borders(borderType).LineStyle
        temp(i, colorCol) = fc.Borders(borderType).Color
        temp(i, weightCol) = fc.Borders(borderType).Weight
    Else
        temp(i, styleCol) = ""
        temp(i, colorCol) = ""
        temp(i, weightCol) = ""
    End If
End Sub

'----------------------
' 機能: "CF_Export"シートから条件付き書式をインポートし、各シートに適用
'----------------------
Sub ImportConditionalFormatting()
    ' 変数初期化
    Dim outWs As Worksheet, ws As Worksheet, area As Range
    Dim fc As Variant, row As Long, lastRow As Long
    
    ' エクスポートシート確認
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    If outWs Is Nothing Then MsgBox "CF_Exportシートが見つかりません!": Exit Sub
    lastRow = outWs.Cells(outWs.Rows.Count, 1).End(xlUp).Row
    
    ' 各行をループ
    For row = 2 To lastRow
        Set ws = Worksheets(outWs.Cells(row, 1).Value)
        Set area = ws.Range(outWs.Cells(row, 2).Value)
        area.FormatConditions.Delete ' 任意
        Select Case outWs.Cells(row, 4).Value
            Case xlCellValue
                Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=outWs.Cells(row, 5), Formula1:=outWs.Cells(row, 6), Formula2:=outWs.Cells(row, 7))
            Case xlExpression
                Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6).Value)
            Case xlUniqueValues
                Set fc = area.FormatConditions.AddUniqueValues
                fc.DupeUnique = outWs.Cells(row, 5)
        End Select
        fc.Interior.Color = outWs.Cells(row, 8)
        fc.Font.Color = outWs.Cells(row, 9)
        fc.Font.Bold = outWs.Cells(row, 10)
        fc.Font.Italic = outWs.Cells(row, 11)
        fc.StopIfTrue = outWs.Cells(row, 12)
        
        ' 罫線設定 (空欄時はスキップ)
        If outWs.Cells(row, 13) <> "" Then fc.Borders(xlLeft).LineStyle = outWs.Cells(row, 13)
        If outWs.Cells(row, 14) <> "" Then fc.Borders(xlLeft).Color = outWs.Cells(row, 14)
        If outWs.Cells(row, 15) <> "" Then fc.Borders(xlTop).LineStyle = outWs.Cells(row, 15)
        If outWs.Cells(row, 16) <> "" Then fc.Borders(xlTop).Color = outWs.Cells(row, 16)
        If outWs.Cells(row, 17) <> "" Then fc.Borders(xlRight).LineStyle = outWs.Cells(row, 17)
        If outWs.Cells(row, 18) <> "" Then fc.Borders(xlRight).Color = outWs.Cells(row, 18)
        If outWs.Cells(row, 19) <> "" Then fc.Borders(xlBottom).LineStyle = outWs.Cells(row, 19)
        If outWs.Cells(row, 20) <> "" Then fc.Borders(xlBottom).Color = outWs.Cells(row, 20)
        If outWs.Cells(row, 21) <> "" Then fc.Borders(xlLeft).Weight = outWs.Cells(row, 21)
        If outWs.Cells(row, 22) <> "" Then fc.Borders(xlTop).Weight = outWs.Cells(row, 22)
        If outWs.Cells(row, 23) <> "" Then fc.Borders(xlRight).Weight = outWs.Cells(row, 23)
        If outWs.Cells(row, 24) <> "" Then fc.Borders(xlBottom).Weight = outWs.Cells(row, 24)
    Next row
    MsgBox "設定完了!"
End Sub
これでより良くなったはず! テストしてね

著者
良いですね。
もうちょっと整理しよう。
罫線
LineStyle
Color
Weight
これで、Weightを後から追加したから離れ離れになってしまっている。
3つ連続でシートに保存するようにしましょう。

これを修正したら、VBA全コードを出力して。

Grok
了解、修正したよ! 罫線プロパティを連続列に整理(Style,Color,Weight順)。フルコード出力。
'----------------------
' 機能: ワークブック内の全条件付き書式をエクスポートし、"CF_Export"シートに保存
'----------------------
Sub ExportConditionalFormatting()
    ' 変数初期化
    Dim ws As Worksheet, outWs As Worksheet, rng As Range, area As Range
    Dim fc As Variant, i As Long, j As Long
    Dim temp() As Variant
    ReDim temp(1 To 1000, 1 To 24)
    i = 1
    
    ' 各ワークシートをループ
    For Each ws In ActiveWorkbook.Worksheets
        If http://ws.Name = "CF_Export" Then GoTo NextWs
        On Error Resume Next
        Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
        On Error GoTo 0
        If Not rng Is Nothing Then
            For Each area In rng.Areas
                For j = 1 To area.FormatConditions.Count
                    Set fc = area.FormatConditions(j)
                    temp(i, 1) = http://ws.Name
                    temp(i, 2) = area.Address
                    temp(i, 3) = j
                    temp(i, 4) = fc.Type
                    Select Case fc.Type
                        Case xlCellValue
                            temp(i, 5) = fc.Operator
                            temp(i, 6) = "'" & fc.Formula1
                            temp(i, 7) = "'" & fc.Formula2
                        Case xlExpression
                            temp(i, 6) = "'" & fc.Formula1
                        Case xlUniqueValues
                            temp(i, 5) = fc.DupeUnique
                    End Select
                    ' 書式情報保存
                    temp(i, 8) = fc.Interior.Color
                    temp(i, 9) = fc.Font.Color
                    temp(i, 10) = fc.Font.Bold
                    temp(i, 11) = fc.Font.Italic
                    temp(i, 12) = fc.StopIfTrue
                    
                    ' 罫線情報保存
                    Call SaveBorder(temp, i, 13, 14, 15, xlLeft, fc)
                    Call SaveBorder(temp, i, 16, 17, 18, xlTop, fc)
                    Call SaveBorder(temp, i, 19, 20, 21, xlRight, fc)
                    Call SaveBorder(temp, i, 22, 23, 24, xlBottom, fc)
                    i = i + 1
                Next j
            Next area
        End If
NextWs:
    Next ws
    
    ' エクスポートシート準備
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    On Error GoTo 0
    If outWs Is Nothing Then Set outWs = Worksheets.Add: http://outWs.Name = "CF_Export"
    outWs.Cells.Clear
    outWs.Range("A1:X1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "InteriorColor", "FontColor", "Bold", "Italic", "StopIfTrue", "LeftStyle", "LeftColor", "LeftWeight", "TopStyle", "TopColor", "TopWeight", "RightStyle", "RightColor", "RightWeight", "BottomStyle", "BottomColor", "BottomWeight")
    If i > 1 Then outWs.Range("A2:X" & i) = temp
    MsgBox "出力完了!"
End Sub

'----------------------
' ヘルパー: 罫線情報をtempに保存 (LineStyleがxlNoneなら空)
'----------------------
Sub SaveBorder(ByRef temp() As Variant, ByVal i As Long, ByVal styleCol As Integer, ByVal colorCol As Integer, ByVal weightCol As Integer, ByVal borderType As XlBordersIndex, ByVal fc As Variant)
    If fc.Borders(borderType).LineStyle <> xlNone Then
        temp(i, styleCol) = fc.Borders(borderType).LineStyle
        temp(i, colorCol) = fc.Borders(borderType).Color
        temp(i, weightCol) = fc.Borders(borderType).Weight
    Else
        temp(i, styleCol) = ""
        temp(i, colorCol) = ""
        temp(i, weightCol) = ""
    End If
End Sub

'----------------------
' 機能: "CF_Export"シートから条件付き書式をインポートし、各シートに適用
'----------------------
Sub ImportConditionalFormatting()
    ' 変数初期化
    Dim outWs As Worksheet, ws As Worksheet, area As Range
    Dim fc As Variant, row As Long, lastRow As Long
    
    ' エクスポートシート確認
    On Error Resume Next
    Set outWs = Worksheets("CF_Export")
    If outWs Is Nothing Then MsgBox "CF_Exportシートが見つかりません!": Exit Sub
    lastRow = outWs.Cells(outWs.Rows.Count, 1).End(xlUp).Row
    
    ' 各行をループ
    For row = 2 To lastRow
        Set ws = Worksheets(outWs.Cells(row, 1).Value)
        Set area = ws.Range(outWs.Cells(row, 2).Value)
        area.FormatConditions.Delete ' 任意
        Select Case outWs.Cells(row, 4).Value
            Case xlCellValue
                Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=outWs.Cells(row, 5), Formula1:=outWs.Cells(row, 6), Formula2:=outWs.Cells(row, 7))
            Case xlExpression
                Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6).Value)
            Case xlUniqueValues
                Set fc = area.FormatConditions.AddUniqueValues
                fc.DupeUnique = outWs.Cells(row, 5)
        End Select
        fc.Interior.Color = outWs.Cells(row, 8)
        fc.Font.Color = outWs.Cells(row, 9)
        fc.Font.Bold = outWs.Cells(row, 10)
        fc.Font.Italic = outWs.Cells(row, 11)
        fc.StopIfTrue = outWs.Cells(row, 12)
        
        ' 罫線設定 (空欄時はスキップ)
        If outWs.Cells(row, 13) <> "" Then fc.Borders(xlLeft).LineStyle = outWs.Cells(row, 13)
        If outWs.Cells(row, 14) <> "" Then fc.Borders(xlLeft).Color = outWs.Cells(row, 14)
        If outWs.Cells(row, 15) <> "" Then fc.Borders(xlLeft).Weight = outWs.Cells(row, 15)
        If outWs.Cells(row, 16) <> "" Then fc.Borders(xlTop).LineStyle = outWs.Cells(row, 16)
        If outWs.Cells(row, 17) <> "" Then fc.Borders(xlTop).Color = outWs.Cells(row, 17)
        If outWs.Cells(row, 18) <> "" Then fc.Borders(xlTop).Weight = outWs.Cells(row, 18)
        If outWs.Cells(row, 19) <> "" Then fc.Borders(xlRight).LineStyle = outWs.Cells(row, 19)
        If outWs.Cells(row, 20) <> "" Then fc.Borders(xlRight).Color = outWs.Cells(row, 20)
        If outWs.Cells(row, 21) <> "" Then fc.Borders(xlRight).Weight = outWs.Cells(row, 21)
        If outWs.Cells(row, 22) <> "" Then fc.Borders(xlBottom).LineStyle = outWs.Cells(row, 22)
        If outWs.Cells(row, 23) <> "" Then fc.Borders(xlBottom).Color = outWs.Cells(row, 23)
        If outWs.Cells(row, 24) <> "" Then fc.Borders(xlBottom).Weight = outWs.Cells(row, 24)
    Next row
    MsgBox "設定完了!"
End Sub
これで整理されたはず! テストしてね

著者
素晴らしい。本当に君は優秀だよ。
今回はこれで完成とします。
条件付書式は設定が沢山あるから、全部は対応していられないので、必要なところを実装すれば良いと思う。
では、本当に最後です。
このVBAを解説してください。
初心者にも分かるように丁寧に解説してね。

Grok
このVBAは、Excelの条件付き書式をエクスポート/インポートするツールです。初心者向けに丁寧に解説します。

1. **全体の目的**: ワークブック内の条件付き書式を「CF_Export」シートに保存(エクスポート)し、後で復元(インポート)します。書式のコピーやバックアップに便利。

2. **ExportConditionalFormatting Sub**:
- 変数を準備(ワークシート、範囲など)。
- 各シートをループし、条件付き書式があるセルを探す。
- 書式の種類、式、色、フォント、罫線などをtemp配列に保存。
- 罫線はSaveBorderヘルパーを使って、なしの場合空に。
- 「CF_Export」シートを作成し、ヘッダーとデータを書き込み。完了メッセージ。

3. **SaveBorder Sub** (ヘルパー):
- 罫線のスタイル、色、重さをチェック。なし(xlNone)なら空、それ以外は保存。コードの重複を避ける。

4. **ImportConditionalFormatting Sub**:
- 「CF_Export」シートからデータを読み込む。
- 各行をループし、対象シートと範囲に書式を適用。
- 種類に応じてAddし、色、フォント、罫線を設定(空ならスキップ)。完了メッセージ。

使い方: VBAエディタに貼り付け、実行。拡張可能ですが、基本的な書式に対応。テストを!

著者
ありがとう。
そだね、君は解説はあまり得意ではなかったんだよね・・・
今回は本当にこれでお終いにしましょう。
楽しかったよ。
いずれまた


条件付書式を退避回復するVBAコード

'----------------------
' 機能: ワークブック内の全条件付き書式をエクスポートし、"CF_Export"シートに保存
'----------------------
Sub ExportConditionalFormatting()
  ' 変数初期化
  Dim ws As Worksheet, outWs As Worksheet, rng As Range, area As Range
  Dim fc As Variant, i As Long, j As Long
  Dim temp() As Variant
  ReDim temp(1 To 1000, 1 To 24)
  i = 1
  
  ' 各ワークシートをループ
  For Each ws In ActiveWorkbook.Worksheets
    If ws.Name = "CF_Export" Then GoTo NextWs
    On Error Resume Next
    Set rng = ws.Cells.SpecialCells(xlCellTypeAllFormatConditions)
    On Error GoTo 0
    If Not rng Is Nothing Then
      For Each area In rng.Areas
        For j = 1 To area.FormatConditions.Count
          Set fc = area.FormatConditions(j)
          temp(i, 1) = ws.Name
          temp(i, 2) = area.Address
          temp(i, 3) = j
          temp(i, 4) = fc.Type
          Select Case fc.Type
            Case xlCellValue
              temp(i, 5) = fc.Operator
              temp(i, 6) = "'" & fc.Formula1
              temp(i, 7) = "'" & fc.Formula2
            Case xlExpression
              temp(i, 6) = "'" & fc.Formula1
            Case xlUniqueValues
              temp(i, 5) = fc.DupeUnique
          End Select
          ' 書式情報保存
          temp(i, 8) = fc.Interior.Color
          temp(i, 9) = fc.Font.Color
          temp(i, 10) = fc.Font.Bold
          temp(i, 11) = fc.Font.Italic
          temp(i, 12) = fc.StopIfTrue
          
          ' 罫線情報保存
          Call SaveBorder(temp, i, 13, 14, 15, xlLeft, fc)
          Call SaveBorder(temp, i, 16, 17, 18, xlTop, fc)
          Call SaveBorder(temp, i, 19, 20, 21, xlRight, fc)
          Call SaveBorder(temp, i, 22, 23, 24, xlBottom, fc)
          i = i + 1
        Next j
      Next area
    End If
NextWs:
  Next ws
  
  ' エクスポートシート準備
  On Error Resume Next
  Set outWs = Worksheets("CF_Export")
  On Error GoTo 0
  If outWs Is Nothing Then Set outWs = Worksheets.Add: outWs.Name = "CF_Export"
  outWs.Cells.Clear
  outWs.Range("A1:X1") = Array("Sheet", "Range", "Index", "Type", "Operator/Dupe", "Formula1", "Formula2", "InteriorColor", "FontColor", "Bold", "Italic", "StopIfTrue", "LeftStyle", "LeftColor", "LeftWeight", "TopStyle", "TopColor", "TopWeight", "RightStyle", "RightColor", "RightWeight", "BottomStyle", "BottomColor", "BottomWeight")
  If i > 1 Then outWs.Range("A2:X" & i) = temp
  MsgBox "出力完了!"
End Sub

'----------------------
' ヘルパー: 罫線情報をtempに保存 (LineStyleがxlNoneなら空)
'----------------------
Sub SaveBorder(ByRef temp() As Variant, ByVal i As Long, ByVal styleCol As Integer, ByVal colorCol As Integer, ByVal weightCol As Integer, ByVal borderType As XlBordersIndex, ByVal fc As Variant)
  If fc.Borders(borderType).LineStyle <> xlNone Then
    temp(i, styleCol) = fc.Borders(borderType).LineStyle
    temp(i, colorCol) = fc.Borders(borderType).Color
    temp(i, weightCol) = fc.Borders(borderType).Weight
  Else
    temp(i, styleCol) = ""
    temp(i, colorCol) = ""
    temp(i, weightCol) = ""
  End If
End Sub

'----------------------
' 機能: "CF_Export"シートから条件付き書式をインポートし、各シートに適用
'----------------------
Sub ImportConditionalFormatting()
  ' 変数初期化
  Dim outWs As Worksheet, ws As Worksheet, area As Range
  Dim fc As Variant, row As Long, lastRow As Long
  
  ' エクスポートシート確認
  On Error Resume Next
  Set outWs = Worksheets("CF_Export")
  If outWs Is Nothing Then MsgBox "CF_Exportシートが見つかりません!": Exit Sub
  lastRow = outWs.Cells(outWs.Rows.Count, 1).End(xlUp).row
  
  ' 各行をループ
  For row = 2 To lastRow
    Set ws = Worksheets(outWs.Cells(row, 1).Value)
    Set area = ws.Range(outWs.Cells(row, 2).Value)
    area.FormatConditions.Delete ' 任意
    Select Case outWs.Cells(row, 4).Value
      Case xlCellValue
        Set fc = area.FormatConditions.Add(Type:=xlCellValue, Operator:=outWs.Cells(row, 5), Formula1:=outWs.Cells(row, 6), Formula2:=outWs.Cells(row, 7))
      Case xlExpression
        Set fc = area.FormatConditions.Add(Type:=xlExpression, Formula1:=outWs.Cells(row, 6).Value)
      Case xlUniqueValues
        Set fc = area.FormatConditions.AddUniqueValues
        fc.DupeUnique = outWs.Cells(row, 5)
    End Select
    fc.Interior.Color = outWs.Cells(row, 8)
    fc.Font.Color = outWs.Cells(row, 9)
    fc.Font.Bold = outWs.Cells(row, 10)
    fc.Font.Italic = outWs.Cells(row, 11)
    fc.StopIfTrue = outWs.Cells(row, 12)
    
    ' 罫線設定 (空欄時はスキップ)
    If outWs.Cells(row, 13) <> "" Then fc.Borders(xlLeft).LineStyle = outWs.Cells(row, 13)
    If outWs.Cells(row, 14) <> "" Then fc.Borders(xlLeft).Color = outWs.Cells(row, 14)
    If outWs.Cells(row, 15) <> "" Then fc.Borders(xlLeft).Weight = outWs.Cells(row, 15)
    If outWs.Cells(row, 16) <> "" Then fc.Borders(xlTop).LineStyle = outWs.Cells(row, 16)
    If outWs.Cells(row, 17) <> "" Then fc.Borders(xlTop).Color = outWs.Cells(row, 17)
    If outWs.Cells(row, 18) <> "" Then fc.Borders(xlTop).Weight = outWs.Cells(row, 18)
    If outWs.Cells(row, 19) <> "" Then fc.Borders(xlRight).LineStyle = outWs.Cells(row, 19)
    If outWs.Cells(row, 20) <> "" Then fc.Borders(xlRight).Color = outWs.Cells(row, 20)
    If outWs.Cells(row, 21) <> "" Then fc.Borders(xlRight).Weight = outWs.Cells(row, 21)
    If outWs.Cells(row, 22) <> "" Then fc.Borders(xlBottom).LineStyle = outWs.Cells(row, 22)
    If outWs.Cells(row, 23) <> "" Then fc.Borders(xlBottom).Color = outWs.Cells(row, 23)
    If outWs.Cells(row, 24) <> "" Then fc.Borders(xlBottom).Weight = outWs.Cells(row, 24)
  Next row
  MsgBox "設定完了!"
End Sub

※上掲のVBAは、Grokが出力したものを、何も手を加えずにそのまま掲載しています。


条件付書式を退避回復するVBAの解説

以下は、ChatGPTによる解説です。

■ 全体像
このVBAは、Excel ブックの中に存在する すべての条件付き書式を1枚のシートに一覧化して保存し、必要に応じてそれを元にして元の条件付き書式を復元するためのツールです。
機能は大きく次の3つに分かれます。
  1. 条件付き書式の「エクスポート」
  2. 罫線情報を取り出すための小さな補助処理
  3. 条件付き書式の「インポート(復元)」

① エクスポート処理(条件付き書式の書き出し)
まず、ブック内のすべてのワークシートを1枚ずつ調べます。
ただし、エクスポート先として用意する「CF_Export」という名前のシートだけは対象外にします。
次に、対象シートの中で 条件付き書式が一つでも設定されているセルだけを抽出します。
この抽出結果はいくつかの独立した範囲に分かれるため、範囲ごとに処理をします。
各範囲ごとに、そこに設定されている 複数の条件付き書式(ルール)を1つずつ取り出し、以下の情報を配列に格納していきます。
  • どのシートか
  • どのセル範囲か
  • 何番目のルールか
  • ルールの種類(数値比較、式、重複チェック等)
  • 条件で使われている演算子
  • 条件式(Formula1、Formula2)
  • 塗りつぶし色
  • フォント色や太字・斜体
  • Stop If True のオン/オフ
  • 左・上・右・下の罫線のスタイル・色・太さ
これらをすべて配列に蓄積し、最後に「CF_Export」シートを作成(またはクリア)して、
ヘッダー行とともに配列の内容を丸ごと書き込みます。
これで、条件付き書式の「データベース」が1シートに作られます。

② 罫線情報を保存する補助処理
条件付き書式の罫線は方向ごとに「線種」「色」「太さ」が存在します。
それらを1つずつ調べ、
  • 罫線がある → 3つの情報を書き出す
  • 罫線がない → 空欄として記録する
というシンプルな判定だけを行う小さな関数です。

③ インポート処理(条件付き書式の復元)
エクスポートされた「CF_Export」シートを読み取り、
各行が1つの条件付き書式ルールとして扱われます。
1行ずつ処理して、記録されているシート名とセル範囲をもとに、
該当する場所に条件付き書式を新しく作り直します。
復元では、保存されているルールの種類に応じて
「セルの値を条件にするタイプ」「数式を使うタイプ」「重複チェックのタイプ」
などを判定し、それに適した方式で条件付き書式を追加します。
その後、エクスポート時に保存した
  • 塗りつぶし色
  • フォント
  • Stop If True
  • 罫線情報(4方向 × 3項目)
を設定し、見た目まで完全に復元します。

結果として何ができるか
  • ブック全体の条件付き書式を一覧化できる
  • 別のブックへ移植できる
  • シートを一旦削除しても条件付き書式を完全に再適用できる
  • 条件付き書式の全設定を「構造的データ」として扱える
Excel は条件付き書式をコピーしたり管理したりする機能が弱いですが、
このVBAによって 完全なエクスポート/インポートが可能になります。




同じテーマ「エクセル雑感」の記事

情報システムとは:業務ルールでデータを処理する仕組みです。
変数名に意味は本当に必要か? 層ごとに変わる重要性
脱Excelか、真のExcel活用か:現場実態の二者択一
【スピルの勧め】スピル数式と生成AIが変えるExcel業務の新標準
2の補数表現で表された負の2進数を10進数に変換する方法
非正規化(カンマ区切り)の結合と集計:最適な手法は?
セル数式における「再帰」の必要性
GrokでVBAを作成:条件付書式を退避回復するVBA
顧客ごとの時系列データから直前の履歴を取得する
ちょっと悩むVBA厳選問題
【何かの情報試験に出るかもしれない問題】4択クイズ


新着記事NEW ・・・新着記事一覧を見る

電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
実績/予算ごとの3年間通算累計を出力|エクセル練習問題(2025-11-15)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ