0

私はExcel用のVBAに次のコードの最初のバージョンを持っています

Function findCell(celda As String, rnc As String) As String

    Dim cell As Range
    Dim pos As String

    Range("A2").Select

    Set cell = Cells.Find(What:=celda, After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False)

    If cell Is Nothing Then
        pos = 0
    Else
        pos = cell.row
    End If

    findCell = pos

End Function

関数は文字列を受け取り、列の番号の位置を返しますが、セルの完全な包含を見つける必要があるため、パラメーターを変更した後。そして、値lookAtをx1Partからx1Wholeに変更ます

    Set cell = Cells.Find(What:=celda, After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False)

マクロを実行しようとすると、時々機能せず、その値x1Wholeが表示されますが、エディターから実行すると機能します。

4

1 に答える 1

1

数式でxlPartとして文字列を検索する場合は、常に関数自体から文字列を取得します(良いアイデアです)。xlWholeには問題があります。一致するものがない場合があります(そして、数式がシート内の唯一のものである場合はそうです)。Find何も見つからない場合はエラーが発生し、数式の結果は#N/Aになります。以下はエラー処理のあるコードで、一致しない場合は0になります。

Function findCell(celda As String, rnc As String) As String

    Dim cell As Range
    Dim pos As String

On Error GoTo Nomatch

    Set cell = Cells.Find(What:=celda, After:=Range("A2"), LookIn:= _
        xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False)

Nomatch:

    If cell Is Nothing Then
        pos = 0
    Else
        pos = cell.Row
    End If

    findCell = pos

End Function

また、を削除Select("A2")してに移動しましたAfter:=Range("A2")

于 2012-11-26T20:50:01.647 に答える