¿Cómo recorrer bucles anidados VBA Excel?

Tengo dos rangos el RANGO A contiene los datos que se van a buscar en el RANGO B. El objetivo es encontrarlos y en base a ello determinar ciertas condiciones.
El recorrido se hace en el rango A se realiza hasta la ultima celda con datos pero en el Rango B no avanza, se queda en la primer celda con datos.

Option Explicit
Sub BuscarEnVariasHojas()
Dim CeldaAux As Range, RangoAux As Range  'Para comparar los registros encontrados
Dim Hoja As Worksheet 'Para desplazarse entre hojas
Dim UltimaFila As Range ' define total de rango
Dim i As Integer 'contador para rango auxiliar
Dim cuentafila As Long 'cuenta total de filas en rango auxiliar
'------------------------------------
'RANGO A
Set UltimaFila = Hoja1.Cells(Rows.Count, 1).End(xlUp)
Set Rango = Hoja1.Range("A3:" & UltimaFila.Address)
'MsgBox Rango.Address
'------------------------------------
For Each Hoja In ActiveWorkbook.Worksheets
    If Hoja.Name <> "tabla" Then
            'cuentafila = Hoja.Range(Cells(2, 3), Cells(2, 3).End(xlDown)).Cells.Count 'cuenta total de filas en rango
            'Debug.Print cuentafila
        For Each Celda In Rango
        'Debug.Print Celda
        Celda.Offset(0, 2) = Celda.Value
           'RANGO B
            Set RangoAux = Hoja.Range(Cells(2, 3), Cells(2, 3).End(xlDown))
            For Each CeldaAux In RangoAux
            Debug.Print CeldaAux
            Celda.Offset(0, 3) = CeldaAux
            Next CeldaAux
            'Exit For
Findebusqueda:
        Next Celda
    End If
Next Hoja
End Sub

1 respuesta

Respuesta
1

[Hola

Tu variable "Rango" tienen asignada solo una hoja cuyo módulo se llama "Hoja1", así que por más que esto esté dentro de un bucle:

For Each Celda In Rango

Siempre dará "vueltas" sobre las mismas celdas de la hoja cuyo módulo es "Hoja1".

Supongo que lo que querías hacer es colocar esto después del IF:

Set UltimaFila = Hoja.Cells(Rows.Count, 1).End(xlUp)

Set Rango = Hoja.Range("A3:" & UltimaFila.Address)

Hola, Abraham intenté como me lo comentaste, te muestro e intento explicarme de manera gráfica.

En el rango A de la hoja "tablas" de A2:A15 se tienen las celdas que se buscarán en el rango B.

  

Option Explicit
Sub BuscarEnVariasHojas()
Dim Celda As Range, Rango As Range 'Celda y rango buscado
Dim CeldaAux As Range, RangoAux As Range  'Para comparar los registros encontrados
Dim Hoja As Worksheet 'Para desplazarse entre hojas
Dim UltimaFila As Range ' define total de rango
Application.ScreenUpdating = False
Application.StatusBar = "Buscando... espere."
Hoja1.Activate
    If Hoja1.Cells(3, 1) = Empty Then
        MsgBox "no hay datos para buscar", vbCritical, "Error"
        Exit Sub
    End If
Set UltimaFila = Hoja1.Cells(Rows.Count, 1).End(xlUp)
Set Rango = Hoja1.Range("A3:" & UltimaFila.Address)
MsgBox Rango.Address
For Each Hoja In ActiveWorkbook.Worksheets
    If Hoja.Name <> "tabla" Then
    Hoja.Activate
        For Each Celda In Rango
        'Debug.Print Celda
        Celda.Offset(0, 2) = Celda.Value
           'RANGO B
            Set RangoAux = Hoja.Range(Cells(2, 1), Cells(2, 1).End(xlDown))
            For Each CeldaAux In RangoAux
            Debug.Print CeldaAux
            Celda.Offset(0, 3) = CeldaAux
            Next CeldaAux
            'Exit For
Findebusqueda:
        Next Celda
    End If
Next Hoja
Hoja1.Activate
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub

En el rango B de otra hoja del mismo libro están los datos

 

El objetivo es que me valide si los datos del rango A esten en el B, algo como una manera alternativa de un buscarV, con rangos que pueden llegar a variar de tamaño.
A manera de ejemplo hice que me imprima lo que encuentre en el rango A en la columna C y lo que encuentre en el rango B en la columna D, pero como notarás, no encuentra nada porque no avanza de la primera celda del rango B.

Coloco el código nuevamente con unas ligeras modificaciones:

[Hola nuevamente

Si puede coloca, mejor, el archivo en algún Drive de tal modo que se puede hacer pruebas directamente. No olvides compartir por aquí el enlace.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas