Vba 根据各种可能的标题名称选择列
根据各种可能的标题名称选择列的最有效方法是什么?例如,下面给出了标题为“学校”的列:Vba 根据各种可能的标题名称选择列,vba,excel,Vba,Excel,根据各种可能的标题名称选择列的最有效方法是什么?例如,下面给出了标题为“学校”的列: 然而,“学校”可以是另一个工作簿中的“学院”,也可以是另一个工作簿中的“机构”。我应该把上面的代码放在if-then-else语句中,并用其他可能性替换“school”,还是有更有效的方法?是的,这假设在同一工作簿中没有任何可能的标题名称共存 查找已经非常有效了。效率低下的是那些选择的 我建议您将Find头逻辑封装到函数中,并重构代码以避免选择 Private Function GetColumn(Header
然而,“学校”可以是另一个工作簿中的“学院”,也可以是另一个工作簿中的“机构”。我应该把上面的代码放在if-then-else语句中,并用其他可能性替换“school”,还是有更有效的方法?是的,这假设在同一工作簿中没有任何可能的标题名称共存
查找
已经非常有效了。效率低下的是那些选择的
我建议您将Find头逻辑封装到函数中
,并重构代码以避免选择
Private Function GetColumn(Header() As Variant, _
Optional NumRows As Long = 0, _
Optional ws As Worksheet = Nothing, _
Optional wb As Workbook = Nothing) As Range
Dim rng As Range, cl As Range
Dim i As Long
If wb Is Nothing Then
Set wb = ActiveWorkbook
End If
If ws Is Nothing Then
Set ws = wb.ActiveSheet
End If
Set rng = ws.UsedRange.Rows(1)
For i = LBound(Header) To UBound(Header)
Set cl = rng.Find(What:=Header(i), _
After:=rng.Cells(1, 1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not cl Is Nothing Then
With ws
If NumRows = 0 Then
Set GetColumn = Range(cl, .Cells(.Rows.Count, cl.Column).End(xlUp))
Else
Set GetColumn = Range(cl, .Cells(NumRows, cl.Column))
End If
Exit Function
End With
End If
Next
Set GetColumn = Nothing
End Function
这样说吧
Dim rng As Range
Dim Headers() As Variant
Headers = Array("School", "Institution", "College")
' Active Workbook, Active Sheet
Set rng = GetColumn(Headers, 6536)
' All rows in specified column
' Specified sheet in Active workbook
Set rng = GetColumn(Headers, , Worksheets("SomeSheetName"))
我可以,但我正在清理很多数据集,这些数据集都有不同的结构,所以这样做需要一些时间。如果你在循环中打开/搜索工作簿(例如For循环),然后将搜索值存储在数组中,在循环中只需将“School”
替换为sayAR(I)
Dim rng As Range
Dim Headers() As Variant
Headers = Array("School", "Institution", "College")
' Active Workbook, Active Sheet
Set rng = GetColumn(Headers, 6536)
' All rows in specified column
' Specified sheet in Active workbook
Set rng = GetColumn(Headers, , Worksheets("SomeSheetName"))