我有一组工作簿,需要在其中查找值为"LAB#";。在我发现";LAB#";单元格,我需要找到后面的第一个带有底部边框的单元格。边界单元格将总是在同一行中并且总是在"之后;LAB#";单元格,但在不同的工作簿中可能有不同的间距"LAB#";单元格将始终位于不同工作簿中的不同位置。
示例:
WS1:LAB#=P100,边界=S100
WS2:LAB#=AC12,边界=AG12
WS3:LAB#=M111,边界=Q111
等等!
我不能把工作簿本身改得更统一(我希望!(。
我已经有代码来查找和引用";LAB#";细胞,但很难找到正确的边界细胞。
我的想法是创建一种循环,通过"细胞"中的每个细胞;LAB#";行,并针对底部边界对每个行进行测试;如果它找到了边界,我需要循环来设置变量(BorderCell=我们刚刚找到的单元格(并结束循环。否则我们需要去下一个牢房。
我的VBA知识是非常非正式的,也是我多年来学到的,所以我在这方面很吃力。
我用来查找";LAB#";cell(出于整体目的,我必须使用ActiveSheet,它是更大目标的一部分,在这方面运行良好(:
Dim LabCell As Range
Dim BorderCell As Range
With ActiveSheet
Set LabCell = .Cells.Find(what:="LAB #", LookIn:=xlValues, LookAt:=xlWhole)
If LabCell Is Nothing Then
MsgBox "'LAB #' not found"
Else
'this is where I need code for finding border cell and declaring it
End If
End With
下面的函数将返回带有底部边框的特定单元格下面的第一个单元格。如果找不到单元格,它会在一定数量的单元格后停止(并返回nothing
(。
Function FindCellWithBorder(startCell As Range, Optional MaxRows As Long = 100) As Range
Dim offset As Long
For offset = 1 To MaxRows
If startCell.offset(offset, 0).Borders(xlEdgeBottom).LineStyle <> xlNone Then
Set FindCellWithBorder = startCell.offset(offset, 0)
Exit Function
End If
Next
End Function
这样称呼它:
If LabCell Is Nothing Then
MsgBox "'LAB #' not found"
Else
Dim borderCell as range
Set borderCell = FindCellWithBorder(LabCell)
If borderCell Is Nothing Then
MsgBox "No cell with border found..."
Else
(...)
End If
End If
请注意,如果您要查找的单元格也有上边框,函数将返回该单元格上方的单元格,因为您的单元格的上边框也是上方单元格的下边框。