VBA-查找第一个带边框的单元格



我有一组工作簿,需要在其中查找值为"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

请注意,如果您要查找的单元格也有上边框,函数将返回该单元格上方的单元格,因为您的单元格的上边框也是上方单元格的下边框。

最新更新