Попробуйте это ( ПРОВЕРЕНО И ИСПЫТАНО )
Sub Sample()
Dim LastCol As Long
Dim i As Long
LastCol = Sheets("Sheet1").Cells.Find(What:="*", _
After:=Sheets("Sheet1").Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Column
For i = LastCol To 1 Step -1
If Application.WorksheetFunction.CountA(Sheets("Sheet1").Columns(i)) = 0 Then _
Sheets("Sheet1").Columns(i).Delete
Next i
End Sub
Followup
Я бы рекомендовал способ Адама (это более эффективно) для подготовки данных для Pivot в соответствии с вашими требованиями. Мой код не удастся, если есть пустая ячейка с пробелом. Возможно, вы захотите использовать
Len(Trim(ws.Cells(start_row, col).Value)) = 0
вместо
ws.Cells(start_row, col).Value = ""
в коде Адама.
Если вы уверены, что не будет пробела, вы также можете использовать мой код:)
Sid