Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос удаления пустых строк из списка / 4 сообщений из 4, страница 1 из 1
17.04.2014, 17:25
    #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
17.04.2014, 22:21
    #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
18.04.2014, 00:35
    #38618180
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос удаления пустых строк из списка
Tigran81,
я так понял, что нужно удалить строки, у которых первая ячейка пустая. Это делается проще:
Код: vbnet
1.
columns(1).specialcells(xlcelltypeblanks).entirerow.delete
...
Рейтинг: 0 / 0
18.04.2014, 09:02
    #38618284
Tigran81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос удаления пустых строк из списка
Казанский,

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


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