Динамическое добавление границы на основе оставшихся строк в каждом разделе (Excel VBA)

Я создал макрос, который извлекает данные из другого листа и вставляет их в новую электронную таблицу. Он извлекает 3 основных раздела данных. Он вставляет все это, выполняет ВПР в соответствующих столбцах, ему нужна информация, основанная на том, что он извлек. После этого у меня есть макрос «Удалить», который удаляет пустые строки, поэтому интервалы между ними обрезаются. Теперь мне нужно добавить границу вокруг этих трех разных секций. Проблема в том, что у меня нет опыта работы с макросами/VBA, поэтому я изо всех сил стараюсь собрать это вместе, но если я создам макрос, чтобы поместить границу вокруг того, что осталось после удаления пустых пространств, он не будет динамическим. Таким образом, если бы я сделал это для другой электронной таблицы, в каждой секции которой было бы больше строк, граница вокруг нужных областей не поместилась бы. Мне нужно, чтобы он динамически просматривал каждый из трех моих разделов и видел, где находится последняя строка с информацией, а затем помещал вокруг нее рамку.

Итак, вот краткий пример: скажем, у меня есть три пустых раздела до того, как я загрузил свои данные. Первый раздел начинается с ячеек B1:K50. Второй раздел находится в диапазоне от B52:K100. Третий раздел варьируется от B105: K150. Как только я нажму макрос «вытащить данные», он автоматически заполнит эти ячейки, но допустим, что все те дополнительные строки, которые у меня есть для каждого раздела, не использовались, мой макрос «Удалить» удалит эти лишние. Итак, скажем, после того, как он удалит эти лишние строки, он сдвинется вверх, где были мои разделы 2 и 3. Затем последним шагом будет поиск, чтобы увидеть, где начинаются и заканчиваются разделы, и добавить границу вокруг каждого из этих разделов. Я могу вставить свой код, и мы можем продолжить, так как я решил, что это будет лучше всего, поскольку я на самом деле не полностью понимаю синтаксис.

Я был бы очень признателен за любую помощь!


person Ahmad A.    schedule 24.08.2015    source источник
comment
Лучше добавь свой код.   -  person Tim Williams    schedule 24.08.2015
comment
[Добавить границы ячеек](xlorate.com/excel-questions.html#Adding Границы ячеек)   -  person Davesexcel    schedule 24.08.2015
comment
Добавить границы ячеек   -  person Davesexcel    schedule 24.08.2015


Ответы (1)


Это будет работать:

Sub borders()

Dim lastRow As Long
Dim startOfNextSection As Range

'Section 1

'Check if there is only 1 row of data in Section 1
If IsEmpty(Range("b2")) Then
    lastRow = 1
Else
    lastRow = Range("b1").End(xlDown).Row
End If

With Range("B1", Cells(lastRow, 11))
    .borders(xlEdgeLeft).LineStyle = xlContinuous
    .borders(xlEdgeRight).LineStyle = xlContinuous
    .borders(xlEdgeBottom).LineStyle = xlContinuous
    .borders(xlEdgeTop).LineStyle = xlContinuous
End With

'Section 2

Set startOfNextSection = Cells(lastRow, 2).End(xlDown)

'Check if there is only 1 row of data in Section 2
If IsEmpty(startOfNextSection.Offset(1, 0)) Then
    lastRow = startOfNextSection.Row
Else
    lastRow = startOfNextSection.End(xlDown).Row
End If

With Range(startOfNextSection, Cells(lastRow, 11))
    .borders(xlEdgeLeft).LineStyle = xlContinuous
    .borders(xlEdgeRight).LineStyle = xlContinuous
    .borders(xlEdgeBottom).LineStyle = xlContinuous
    .borders(xlEdgeTop).LineStyle = xlContinuous
End With

'Section 3

Set startOfNextSection = Cells(lastRow, 2).End(xlDown)

'Check if there is only 1 row of data in Section 3
If IsEmpty(startOfNextSection.Offset(1, 0)) Then
    lastRow = startOfNextSection.Row
Else
    lastRow = startOfNextSection.End(xlDown).Row
End If

With Range(startOfNextSection, Cells(lastRow, 11))
    .borders(xlEdgeLeft).LineStyle = xlContinuous
    .borders(xlEdgeRight).LineStyle = xlContinuous
    .borders(xlEdgeBottom).LineStyle = xlContinuous
    .borders(xlEdgeTop).LineStyle = xlContinuous
End With

Конец сабвуфера

person Bahamas    schedule 24.08.2015
comment
Вот лишь примеры того, что я имею в виду для пояснения: 1) после получения данных: postimg.org/image/gxyl8o7mv 2) после удаления лишних строк: postimg.org/image/c0fnbjvuf 3) цель того, как я хочу, чтобы это выглядело: postimg.org/image/islexxtw3 Будет ли код, который вы написал выше работа? Удалить код: postimg.org/image/sgo3va513 Я попробовал ваш код выше, но ничего не произошло. - person Ahmad A.; 25.08.2015