Доброго вечера всем. Столкнулся с проблемой при написании макроса: есть массив из 2 столбцов, в которых есть пустые строки, нужно их удалить. Помогите встроить код на Удалением "пустых строк" из массива оптимальным образом. Оптимально полученный в результате работы моего макроса массив прогнать через функцию, а потом выгрузить массив на лист экселя. Как я ни пытался этого сделать - не выходит.
Макрос и входные данные в прикрепленном файле. Если этот пост читает автор функции, то ему привет и большое спасибо :D . Не первый раз пользуюсь его макросами. Ниже код моего макроса.
Скрытый текст
Код
'Включаем обязательное объявление переменных
Option Explicit
Private Sub CommandButton1_Click()
'Отключаем некоторые функции экселя для ускорения работы
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
'Объявляем переменные
Dim a, b, bord1, bord2, i, ii, lwr, t, ic, narr, j, arr2, n As Variant
bord1 = "*#*#*"
lwr = Cells(Rows.Count, 1).End(xlUp).Row
Set b = Range(Cells(3, 1), Cells(lwr, 2))
a = Range(Cells(3, 1), Cells(lwr, 2)).Value
With CreateObject("scripting.dictionary")
'Удаляем пробелы, плюсы, дубликаты
For i = 1 To UBound(a)
a(i, 2) = Replace(a(i, 2), " ", "")
t = Replace(a(i, 1), "+", "")
If Not .exists(t) Then
.Item(t) = ""
ii = ii + 1
a(ii, 1) = t: a(ii, 2) = a(i, 2)
End If
Next
'Удаляем статистику, цифры
For i = 1 To UBound(a)
If a(i, 1) = "Статистика по словам" Or a(i, 1) Like bord1 Then
a(i, 1) = ""
a(i, 2) = ""
End If
Next
End With
With b
.Clear
.Resize(ii, 2).Value = a
End With
Set b = Nothing
Set a = Nothing
'Включаем функции экселя
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
End Sub
'Включаем обязательное объявление переменных
Option Explicit
Private Sub CommandButton1_Click()
'Отключаем некоторые функции экселя для ускорения работы
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
'Объявляем переменные
Dim a(), a1(), b As Range, bord1$, i&, ii&, lwr&, t$
bord1 = "*#*#*"
lwr = Cells(Rows.Count, 1).End(xlUp).Row
Set b = Range(Cells(3, 1), Cells(lwr, 2))
'a = Range(Cells(3, 1), Cells(lwr, 2)).Value лучше так
a = b.Value
ReDim a1(1 To UBound(a), 1 To 2)
With CreateObject("scripting.dictionary")
'Удаляем пробелы, плюсы, дубликаты
For i = 1 To UBound(a)
a(i, 2) = Replace(a(i, 2), " ", "")
t = Replace(a(i, 1), "+", "")
If Not .exists(t) Then
.Item(t) = ""
ii = ii + 1
a1(ii, 1) = t: a1(ii, 2) = a(i, 2)
End If
Next
'Удаляем статистику, цифры
For i = 1 To UBound(a)
If a(i, 1) = "Статистика по словам" Or a(i, 1) Like bord1 Then
a(i, 1) = ""
a(i, 2) = ""
End If
Next
End With
With b
.Clear
.Resize(ii, 2).Value = a1
End With
Set b = Nothing
Erase a
Erase a1
'Включаем функции экселя
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
End Sub
как я понял, задача немного в другом - удалить лишние знаки и строки из текста. Оригинал текста на "2".
Чуть переработанный код
Код
Private Sub CommandButton1_Click()
'Отключаем некоторые функции экселя для ускорения работы
Application.ScreenUpdating = False
'Объявляем переменные
Dim a(), b As Range, bord1$, i&, lwr&, t$
bord1 = "*#*#*"
lwr = Cells(Rows.Count, 1).End(xlUp).Row
Set b = Range(Cells(3, 1), Cells(lwr, 2))
a = b.Value
With CreateObject("scripting.dictionary"
'Удаляем пробелы, плюсы, дубликаты
For i = 1 To UBound(a)
a(i, 2) = Replace(a(i, 2), " ", ""
t = Replace(a(i, 1), "+", ""
If Not (a(i, 1) = "Статистика по словам" Or a(i, 1) Like bord1) Then
If Not .exists(t) Then
.Item(t) = a(i, 2)
' ii = ii + 1
' a1(ii, 1) = t: a1(ii, 2) = a(i, 2)
End If
End If
Next
b.Clear
a = .keys
b.Cells(1, 1).Resize(.Count) = WorksheetFunction.Transpose(a)
a = .Items
b.Cells(1, 2).Resize(.Count) = WorksheetFunction.Transpose(a)
End With
Set b = Nothing
Erase a
'Включаем функции экселя
Application.ScreenUpdating = True
End Sub