powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос удаления пустых строк из списка
4 сообщений из 4, страница 1 из 1
Макрос удаления пустых строк из списка
    #38617839
Tigran81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень прошу помочь!
Есть такой макрос(см.ниже).
Макрос убирает пустые строки в списке в пределах диапазона ячеек arr.

Но изначально диапазон ячеек неизвестен, т.к. размер списка может быть разным.
Как можно узнать верхнюю и нижнюю границу списка, и присвоить эти границы массиву ARR?
Чтобы в пределах этих границ макрос убрал пустые строки из списка.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Sub deleterows()
    On Error Resume Next
    arr = [a1:d15]
    arr2 = DeleteBlankRows(arr, [1])
    
    [A1].Resize(UBound(arr2, 1), UBound(arr2, 2)).Value = arr2
End Sub

Function DeleteBlankRows(ByVal arr As Variant, ByVal col As Long) As Variant
    If Not IsArray(arr) Then MsgBox "Это не массив!", vbCritical: Exit Function
    If col > UBound(arr, 2) Then MsgBox "Нет такой строки в массиве!", vbCritical: Exit Function
    If col < LBound(arr, 2) Then MsgBox "Нет такой строки в массиве!", vbCritical: Exit Function

   [A1:D15].clearcontents

    Dim iCount As Long
    For i = LBound(arr) To UBound(arr)
        iCount = iCount - (arr(i, col) <> "")
    Next i

    ReDim narr(LBound(arr, 1) To iCount + LBound(arr, 1) - 1, LBound(arr, 2) To UBound(arr, 2))

    iCount = LBound(narr)
    For i = LBound(arr, 1) To UBound(arr, 1)
        If arr(i, col) <> "" Then
            For j = LBound(arr, 2) To UBound(arr, 2)
                narr(iCount, j) = arr(i, j)
            Next j
            iCount = iCount + 1
        End If
    Next i

    DeleteBlankRows = narr
End Function


Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
Макрос удаления пустых строк из списка
    #38618115
Фотография alex77755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак можно узнать верхнюю и нижнюю границу списка
Трудно ответить на этот вопрос!
Судя по макросу он на листе ексел в диапазоне [a1:d15]
Ну, допустим, нижнюю границу списка можно уснать как-то так (навскидку):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
iRow = Range("A1").End(xlDown)
iRow = Cells(Rows.Count, 1).End(xlUp).Row
iRow = wsList.Range("A:A").Find("").Row
iRow = wsList.UsedRange.End(xlDown).Row + 1
iRow = wsList.Range("A:A").SpecialCells(xlCellTypeLastCell).Row + 1
iRow = Лист1.[c65536].End(xlUp).Offset(1)
iRow = Cells.Find("*", , , , xlByRows, xlPrevious).Row


А вот с верхней....
...
Рейтинг: 0 / 0
Макрос удаления пустых строк из списка
    #38618180
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tigran81,
я так понял, что нужно удалить строки, у которых первая ячейка пустая. Это делается проще:
Код: vbnet
1.
columns(1).specialcells(xlcelltypeblanks).entirerow.delete
...
Рейтинг: 0 / 0
Макрос удаления пустых строк из списка
    #38618284
Tigran81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казанский,

Оказывается все было намного проще....спасибо, Ваш код очень помог!То что надо.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос удаления пустых строк из списка
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]