使用VBA在Excel中选择多个可变单元格范围以绘制边框

时间:2015-10-15 17:02:35

标签: excel vba excel-vba

我有一个标签,可以自动接收从电子表格的其他部分提取的数据。报告的数据总是有三列:col A有任务描述,col B有人工编号,col C有费用编号。 Col F有一个数字代表该部分中的行数(每次都会有所不同,但它会随着提取而进行 - 无需计算)。

我只是想按列绘制每个部分的边框。因此,如果我手动操作,我选择A2:A7并选择外边框。然后我选择B2:B7并做同样的事情。然后C2:C7并重复。我知道涉及多少行,因为该数字在F列中。

然后我转到下一部分并做同样的事情,但行数可能会有所不同,但在F列中确定。

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

以下是之前和之后的链接:

Excel border automation - before

Excel border automation - after

2 个答案:

答案 0 :(得分:1)

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

=NOT(ISBLANK(A1))

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

然后添加另一条规则:

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

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

答案 1 :(得分:0)

检查出来。 这是一个sample workbook

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