Sub ReplaceColumnNames()
    Dim ws As Worksheet
    Dim lastRowZ As Long
    Dim lastRowA As Long
    Dim i As Long, j As Long
    Dim specText As String
    Dim beforeText As String
    Dim afterText As String
    Dim sortRange As Range
    
    ' 現在のアクティブシートを設定
    Set ws = ActiveSheet
    
    ' Z列とAA列の最終行を取得
    lastRowZ = ws.Cells(ws.Rows.Count, "Z").End(xlUp).Row
    
    ' A列の仕様書の最終行を取得
    lastRowA = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' Z列とAA列のデータを降順ソート(Z列基準)
    If lastRowZ > 2 Then
        Set sortRange = ws.Range("Z2:AA" & lastRowZ)
        sortRange.Sort Key1:=ws.Range("Z2"), Order1:=xlDescending, Header:=xlNo
    End If
    
    ' A列の仕様書を行ごとに処理
    For j = 2 To lastRowA
        ' 仕様書のテキストを取得
        specText = ws.Cells(j, 1).Value
        
        ' 空のセルはスキップ
        If specText <> "" Then
            ' Z列(置換前)とAA列(置換後)のデータを順次処理
            For i = 2 To lastRowZ
                ' 置換前と置換後の文字列を取得
                beforeText = "[" & ws.Cells(i, "Z").Value & "列]"
                afterText = "[" & ws.Cells(i, "AA").Value & "列]"
                
                ' 置換前の文字列が空でない場合のみ置換実行
                If ws.Cells(i, "Z").Value <> "" Then
                    ' 仕様書内の文字列を置換
                    specText = Replace(specText, beforeText, afterText)
                End If
            Next i
            
            ' 置換結果をA列に書き戻し
            ws.Cells(j, 1).Value = specText
        End If
    Next j
    
    ' 完了メッセージ
    MsgBox "列名の置換が完了しました。", vbInformation
End Sub