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