С таким Vba
Sub PullBlanks()
Dim StartRow As Long, LastRow As Long, GoodColumnName As String, CompareColumnName As String
Dim Col1 As Long, Col2 As Long
Dim wb As Workbook, ws As Worksheet, wsName As String
Set wb = ThisWorkbook
' Properties, change that
GoodColumnName = "A"
CompareColumnName = "B"
StartRow = 2
wsName = "Sheet1"
'# End Properties
Set ws = wb.Worksheets(wsName)
Col1 = Range(GoodColumnName & 1).Column
Col2 = Range(CompareColumnName & 1).Column
LastRow = ws.Cells(ws.Rows.Count, GoodColumnName).End(xlUp).Row
For i = StartRow To LastRow
If ws.Cells(i, Col2).Value <> "" Then
ws.Cells(i, Col2 + 1).Value = "Good"
Else
ws.Cells(i, Col2).Value = ws.Cells(i, Col1).Value ' Value from GoodColumn
ws.Cells(i, Col2 + 1).Value = "Changed"
End If
Next
End Sub
С формулами вы должны использовать дополнительный столбец при удалении плохого столбца.