0

我构建了一个函数来查找列:

Function findColumn(NameSheet As String, ColName As String)
findColumn = 0
Worksheets(NameSheet).Select
Sheets(NameSheet).Range("A1").Select
Do Until ActiveCell.Value = ""
    searchTerm = ActiveCell.Value
    If (LCase(ActiveCell.Value) = LCase(ColName)) Then
           findColumn = Mid(ActiveCell.Address, 2, 1)
           Exit Do
    End If
    ActiveCell.Offset(0, 1).Activate
Loop 
End Function

这个功能有效!但它会激活其他工作表,我必须返回上一张工作表。结果不是无缝的,因为在函数搜索列地址时存在工作表转换故障。

有没有更好的方法来做到这一点?因为我多次使用这种方法,当每次点击单元格时出现故障时,我的搭档并不满意。

请帮忙

4

2 回答 2

4

我相信这是一个可以按照您的建议工作的功能,因为它永远不会.Selects.Activates您正在搜索的工作表,同时带回您想要的列字母。它也不会循环每个单元格,这可能非常低效。

此函数将返回列字母,而不是数字。如果你想要这个数字,请参阅上面 Daniel 的代码。

Function findColumn(NameSheet As String, ColName As String)

With Worksheets(NameSheet)

    Dim myRng As Range
    Set myRng = .Rows(1).Find(ColName, lookat:=xlWhole)

    If Not myRng Is Nothing Then

        findColumn = Split(myRng.Address, "$")(1)

    Else

        findColumn = "Column Not Found"

    End If

End With


End Function
于 2012-10-01T15:53:40.567 回答
3

这是一种可能的方法,重要的是它根本不会改变工作簿的重点。假设它在第一行,这将返回搜索词的列号,如果没有找到则返回 0。如果NameSheet无效,弹出窗口会通知您并返回 0。

Function findColumn(NameSheet As String, ColName As String) As Long
    'Add Error checking to see if sheet Exists
    On Error Resume Next
        Dim sheetTest As String
        'Copy sheet name, just to see if the sheet is valid
         sheetTest = Sheets(NameSheet).Name
    'Check if sheet was found.
    If Err.Number <> 0 Then
        MsgBox "Sheet does not exist"
        Exit Function
    End If
        'Search the first column in the NameSheet for the ColName, and return 
        'the column number.
        findColumn = Sheets(NameSheet).Rows(1).Find(What:=ColName, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Column
End Function
于 2012-10-01T15:50:08.683 回答