Excel - Buscar registros en una tabla, con VBA, a partir de un criterio

 
Vista:
sin imagen de perfil
Val: 89
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar registros en una tabla, con VBA, a partir de un criterio

Publicado por Toni (33 intervenciones) el 21/10/2019 11:22:45
Buenos días,

Quiero programar una rutina VBA que busque registros en una tabla a partir de algun criterio. He encontrado en el web una rutina parecida a lo que busco, que lo que hace es leer los registros de una hoja dentro de un rango concreto:

1
2
3
4
5
For Each Celda In Sheets(«Datos»).Range(«$A$6:$A$232»)
If Celda = Pais Then
...
End If
Next Celda

Parece un buen punto de partida. La pregunta es: puede convertirse este bucle For-Next en un bucle que busque en una tabla, con independencia de los registros que tenga? Podria ser alguna cosa así cómo:

1
2
3
4
5
For Each Celda In Tabla ([NombreTabla]).Range([NombreColumna])
If Celda = Pais Then
...
End If
Next Celda

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 3.841
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar registros en una tabla, con VBA, a partir de un criterio

Publicado por Antoni Masana (1295 intervenciones) el 21/10/2019 20:22:15
Prueba esto;

1
2
3
4
5
6
Sub Macro3()
    Dim c As Range
    For Each c In ActiveCell.CurrentRegion.Cells
        MsgBox c.Value
    Next
End Sub

O busca en Google: excel vba recorrer rango celdas

Saludos
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 89
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar registros en una tabla, con VBA, a partir de un criterio

Publicado por Toni (33 intervenciones) el 24/10/2019 11:13:53
Gracias Antoni,

Por lo que he entendido, esta rutina lee toda la tabla. A mi me interesa sólo comprovar los valores de una columna.

Experimentando, he llegado a esta solución:

1
2
3
4
5
6
7
8
Sheets ("Hoja1").Select
Cells(2, 3).Select
 
For i = 0 To Range("Tabla").Rows.Count
    If ActiveCell.Offset(i, 0).Value = sNom Then
        MsgBox "Duplicado en fila " & i
    End If
Next i

Primero selecciono la hoja y celda donde empieza la columna a comprovar, y luego recorro todos los valores con el For-Next.
A mi me es satisfactoria, però me gustaría conocer tu comentario al respecto.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.567
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar registros en una tabla, con VBA, a partir de un criterio

Publicado por Andres Leonardo (1296 intervenciones) el 24/10/2019 15:27:12
En realidad lo que indica Anthony sirve para lo que tu quieres y para lo que tu indicas... la unica diferencia es que en range tu deberas asignar las celdas de esa columna


1
2
3
4
5
Dim c As Range
C = (A2:A8) ' las celdas de la columna A desde la fila  2 a la  8 
For Each c In ActiveCell.CurrentRegion.Cells
    MsgBox c.Value
Next

SAludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 89
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar registros en una tabla, con VBA, a partir de un criterio

Publicado por Toni (33 intervenciones) el 24/10/2019 16:33:19
Gracias, Andres, por la aclaración.

Ahondando más en el conocimiento de cómo funciona la rutina, la que tu escribes sirve para un rango limitado, siempre fijo (en el caso que pones de ejemplo, A2:a8).

Pero, cómo hacerlo para columnas que crecen? En el caso de las tablas, la definición Tabla1[Columna1], abarca todas las celdas de la Columna1 de la Tabla, independientemente del número de filas.

Me interesaria saber cómo hacer esta misma referencia, pero des de VBA.

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.567
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar registros en una tabla, con VBA, a partir de un criterio

Publicado por Andres Leonardo (1296 intervenciones) el 24/10/2019 17:47:38
Pues es sencillo solo debes primero saber de alguna manera



Pero, cómo hacerlo para columnas que crecen? En el caso de las tablas, la definición Tabla1[Columna1], abarca todas las celdas de la Columna1 de la Tabla, independientemente del número de filas.


1
2
ult = Cells(Rows.Count, 1).End(xlUp).Row
Range("A2:A" & ult)


Con eso es hasta el ultimo donde este llemo en An
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 89
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Buscar registros en una tabla, con VBA, a partir de un criterio

Publicado por Toni (33 intervenciones) el 24/10/2019 22:29:15
Me fue muy bien. Gracias Andres.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar