Пока вы решили свой вопрос, вы можете ускорить код на
- Использование
SpecialCells
для работы с пробелами вместо проверки каждой ячейки
- Использовать вариантный массив вместо цикла диапазона
Приведенный ниже код использует Join
для объединения последних строк. Если у вас не было манипуляции со строками (часть "a = ''" + cell.Text + "'' "
), вы можете просто присоединиться к диапазону специальных ячеек с шага 1
Обновлен для обработки нескольких областей в коллекции SpecialCells и отдельных ячеек (где вариаты не работают)
Sub Diff()
Dim rng1 As Range
Dim rng2 As Range
Dim varTest
Dim strOut As String
Dim lngrow As Long
On Error Resume Next
With Range("D13:D263")
Set rng1 = .SpecialCells(xlCellTypeConstants)
If Not rng1 Is Nothing Then
Set rng1 = Union(rng1, .SpecialCells(xlCellTypeFormulas))
Else
Set rng1 = .SpecialCells(xlCellTypeFormulas)
End If
End With
On Error GoTo 0
If rng1 Is Nothing Then Exit Sub
For Each rng2 In rng1.Areas
If rng2.Cells.Count > 1 Then
varTest = Application.Transpose(rng2)
For lngrow = 1 To UBound(varTest)
varTest(lngrow) = "a = ''" & varTest(lngrow) & "'' "
Next
strOut = strOut & Join(varTest, ",")
Else
strOut = strOut & "a = ''" & rng2.Value & "'' "
End If
Next
MsgBox strOut
End Sub