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また、すべてのセルをループするわけではないため、非常に非効率的です。

この関数は、数値ではなく列文字を返します。番号が必要な場合は、上記のダニエルのコードを参照してください。

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 に答える