Compartir a través de


Método Range.FindNext (Excel)

Continúa una búsqueda iniciada con el método Find . Busca la siguiente celda que coincida con las mismas condiciones y devuelve un objeto Range que representa dicha celda. Esto no afecta a la selección ni a la celda activa.

Sintaxis

expresión. FindNext (después)

expresión Variable que representa un objeto Range.

Parameters

Nombre Obligatorio/opcional Tipo de datos Descripción
After Opcional Variant La celda después de la que quiere que se inicie la búsqueda. Se corresponde a la posición de la celda activa cuando se realiza una búsqueda desde la interfaz de usuario. Tenga en cuenta que After debe ser una sola celda del intervalo.
Recuerde que la búsqueda comienza después de esta celda; no se buscará en la celda especificada hasta que el método regrese a esta celda. Si no especifica este argumento, la búsqueda empieza después de la celda en la esquina superior izquierda del rango.

Valor devuelto

Rango

Observaciones

Cuando la búsqueda llega al final del rango de búsqueda especificado, vuelve al principio del rango. Para detener una búsqueda cuando se produzca esta situación, guarde la dirección de la primera celda que se encuentre y, después, pruebe la dirección de cada celda sucesiva que se haya encontrado con esta dirección guardada.

Ejemplo:

En este ejemplo se buscan todas las celdas del rango A1:A500 de la hoja de cálculo uno que contiene el valor 2 y se cambia todo el valor de celda a 5. Es decir, los dos valores 1234 y 99299 contienen un 2, y ambos valores de celda se convertirán en 5.

Sub FindValue()
    
    Dim c As Range
    Dim firstAddress As String
    
    With Worksheets(1).Range("A1:A500") 
        Set c = .Find(2, lookin:=xlValues) 
        If Not c Is Nothing Then 
            firstAddress = c.Address 
            Do 
                c.Value = 5 
                Set c = .FindNext(c) 
            Loop While Not c Is Nothing
        End If 
    End With
    
End Sub

En este ejemplo se buscan todas las celdas de las cuatro primeras columnas que contienen una constante X y se oculta la columna que contiene la X.

Sub Hide_Columns()

    'Excel objects.
    Dim m_wbBook As Workbook
    Dim m_wsSheet As Worksheet
    Dim m_rnCheck As Range
    Dim m_rnFind As Range
    Dim m_stAddress As String

    'Initialize the Excel objects.
    Set m_wbBook = ThisWorkbook
    Set m_wsSheet = m_wbBook.Worksheets("Sheet1")
    
    'Search the four columns for any constants.
    Set m_rnCheck = m_wsSheet.Range("A1:D1").SpecialCells(xlCellTypeConstants)
    
    'Retrieve all columns that contain an X. If there is at least one, begin the DO/WHILE loop.
    With m_rnCheck
        Set m_rnFind = .Find(What:="X")
        If Not m_rnFind Is Nothing Then
            m_stAddress = m_rnFind.Address
             
            'Hide the column, and then find the next X.
            Do
                m_rnFind.EntireColumn.Hidden = True
                Set m_rnFind = .FindNext(m_rnFind)
            Loop While Not m_rnFind Is Nothing And m_rnFind.Address <> m_stAddress
        End If
    End With

End Sub

En este ejemplo se buscan todas las celdas de las cuatro primeras columnas que contienen una constante X y se muestra la columna que contiene la X.

Sub Unhide_Columns()
    'Excel objects.
    Dim m_wbBook As Workbook
    Dim m_wsSheet As Worksheet
    Dim m_rnCheck As Range
    Dim m_rnFind As Range
    Dim m_stAddress As String
    
    'Initialize the Excel objects.
    Set m_wbBook = ThisWorkbook
    Set m_wsSheet = m_wbBook.Worksheets("Sheet1")
    
    'Search the four columns for any constants.
    Set m_rnCheck = m_wsSheet.Range("A1:D1").SpecialCells(xlCellTypeConstants)
    
    'Retrieve all columns that contain X. If there is at least one, begin the DO/WHILE loop.
    With m_rnCheck
        Set m_rnFind = .Find(What:="X", LookIn:=xlFormulas)
        If Not m_rnFind Is Nothing Then
            m_stAddress = m_rnFind.Address
            
            'Unhide the column, and then find the next X.
            Do
                m_rnFind.EntireColumn.Hidden = False
                Set m_rnFind = .FindNext(m_rnFind)
            Loop While Not m_rnFind Is Nothing And m_rnFind.Address <> m_stAddress
        End If
    End With

End Sub

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.