Зацикливайся, объединяй ячейки и грани "вниз" - PullRequest
0 голосов
/ 23 сентября 2019

Это мои объединенные ячейки

enter image description here

Я хотел бы зациклить эти объединенные ячейки, найти конец каждой объединенной ячейки и затем Граница вокруг слева с точками (xlDots) до ROW6

Это будет мой вывод

enter image description here

Вот что я пробовал до сих пор

Dim rng As Range

Set rng = Range("A1:I6")

With rng.Borders
    .LineStyle = xlDot
    .Weight = xlThin
End With

Но это ограничивает меня в каждой ячейке, могу ли я дать STEP 2 , как в цикле for?

Ответы [ 3 ]

3 голосов
/ 23 сентября 2019

Вот вариант ответа @JvdV.

For Each cel In ThisWorkbook.Sheets("Sheet1").Range("A3:M3") 'change sheet as needed
    If cel.MergeCells = True Then
        With cel.MergeArea.Offset(1).Resize(3).Borders(xlEdgeLeft)
            .LineStyle = xlDash
        End With
    End If
Next cel
2 голосов
/ 23 сентября 2019

Мое предложение основано на уловке, замеченной здесь

Sub Test()

Dim rng As Range, cl As Range
With Sheet1 'Change appropriately
    Set rng = Intersect(.Cells.SpecialCells(2), .Cells.SpecialCells(4))
    For Each cl In rng
        If cl.MergeArea.Row = 3 Then
            cl.MergeArea.Offset(1).Resize(3, cl.MergeArea.Columns.Count).Borders(xlEdgeLeft).LineStyle = xlDot
        End If
    Next cl
End With

End Sub
  • .Intersect создает диапазон из всех ячеек, которыеявляются частью объединенных областей с использованием .SpecialCells.Я использовал комбинацию констант и пробелов (индексы 2 и 4 соответственно), но если ваши значения являются результатом формул, вы можете изменить это значение на -4123 и 4.

  • Я убедился, что эти ячейки являются частью .MergeArea, который начинается в строке 3.

  • Затем просто .Offset1 строка и .Resize, которые охватывают объект до строки 6 и фактическую ширину объединенной области (с использованием Columns.Count), поскольку вы не можете быть на 100% уверены в ширине столбцов этих объединенных областей.

  • Вы можете установить линейный стиль границы xlEdgeLeft прямо на xlDot.


Очевидно, если ваш диапазонобъединенные ячейки включают только столбец AI, было бы намного проще, хотя это решение немного более динамично в этом смысле.

1 голос
/ 23 сентября 2019

В качестве альтернативы вам не нужен VBA.Вы можете использовать условное форматирование:

Правило:

=AND(A$3<>"",B$3="",C$3="")

Относится к диапазону:

=$C$4:$I$6

И, конечно, просто выберите нужный формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...