使用VBA在Excel中select多个可变单元格区域以绘制边框

我有一个标签,自动接收从电子表格的另一部分提取的数据。 总是有三列数据用于报告:列A具有任务描述,列B具有人工编号,列C具有费用编号。 Col F有一个数字,表示该部分的行数(每次都会有所不同,但它是随着提取而来的 – 不需要计算)。

我只是想在每个部分周围绘制边框。 所以如果我手动做,我selectA2:A7并select外部边界。 然后我selectB2:B7并做同样的事情。 然后C2:C7重复。 我知道有多less行,因为这个数字在F列。

然后我进入下一节并做同样的事情,但是行数可能会不同,但在F列中标识。

该过程将被重复,直到所有部分都被概述为止。 可能有3个部分,或20个。我想我可以根据列F中的数据条目的计数循环序列。

这里是之前和之后的链接:

Excel边界自动化 – 之前

Excel边界自动化 – 之后

不要为此使用VBA – 而是使用条件格式。 转到条件格式 – >添加新规则 – >自定义公式,并select列A,B和C,键入以下公式:

=NOT(ISBLANK(A1)) 

这将查看这些列中的每个单元格。 如果这些单元格中的任何一个具有任何值,则上面的公式将parsing为TRUE。 这意味着您指定的条件格式规则将适用。 然后在规则中添加格式,以便在单元的右侧和左侧都有一个边框。

然后添加另一个规则,说:

 =AND(NOT(ISBLANK(A1)),ISBLANK(A2)) 

这将parsing为TRUE,当一个特定的单元格有一个值,但下面的一个没有。 添加一个使底部边框可见的格式。

一探究竟。 这是一个示例工作簿

 Sub Button1_Click() Dim findrow As Long, findrow2 As Long Dim rw1 As Long, rw2 As Long, i As Integer Dim Brng As Range On Error GoTo errhandler x = WorksheetFunction.CountIf(Range("A:A"), "*Phase*") rw1 = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To x + 1 If findrow <> 0 Then findrow = findrow2 Else findrow = Range("A1:A" & rw1 + findrow2).Find("*Phase*", lookat:=xlWhole).Row + rw2 End If rw2 = findrow + 1 If i = x + 1 Then findrow2 = rw1 + 1 Else findrow2 = Range("A" & rw2 & ":A" & rw1).Find("*Phase*", lookat:=xlWhole).Row End If Set Brng = Range("A" & findrow & ":A" & findrow2 - 1) With Brng .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous End With With Brng.Offset(0, 1) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous End With With Brng.Offset(0, 2) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous End With Next i Exit Sub errhandler: MsgBox "No Cells containing specified text found" End Sub