我有一个标签,可以自动接收从电子表格的其他部分提取的数据。报告的数据总是有三列:col A有任务描述,col B有人工编号,col C有费用编号。 Col F有一个数字代表该部分中的行数(每次都会有所不同,但它会随着提取而进行 - 无需计算)。
我只是想按列绘制每个部分的边框。因此,如果我手动操作,我选择A2:A7并选择外边框。然后我选择B2:B7并做同样的事情。然后C2:C7并重复。我知道涉及多少行,因为该数字在F列中。
然后我转到下一部分并做同样的事情,但行数可能会有所不同,但在F列中确定。
将重复该过程,直到概述了所有部分。可能有3个部分,或者20个。我想我可以根据F列中的数据条目计数来循环序列。
以下是之前和之后的链接:
答案 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