VBA Excel: Mover entre pestañas filas que cumplan ciertas características

08/11/2008 - 15:47 por Alex | Informe spam
Hola:

Soy un inexperto en el manejo de VBA para Excel. Suelo grabar mis
macros con ratón y personalizarlas un poco luego con el editor de VB.

Estoy en la siguiente situación. Tengo una pestaña en la cual tengo
una matriz muy grande. Cada línea pertenece a un individuo distinto, y
en la cabecera de la matriz (esto es, en la primera fila de la matriz)
aparecen los títulos.

Imaginemos que los títulos son: Nombre, Edad, Población.

Lo que quiero es que los individuos que cumplan la condición de Edad 30 (esto es, que en la línea de dicho individuo aparezca el número 30
en la celda de la columna Edad), se borren de la matriz original y se
copien en otra pestaña que se llama Edad_30. Dicha pestaña Edad_30 ya
tiene copiada en ella el cabecero de la original (Nombre, Edad,
Población).

Para afrontar el problema de forma manual suelo aplicar filtros
automáticos en la cabecera de la matriz original, filtro los de Edad 30 y luego corto la matriz resultante y la pego en la pestaña Edad_30.
No he podido automatizar esto ya que en cada matriz de datos el primer
elemento que cumple la característica está una línea distinta.

¿Sabéis cómo se puede automatizar el proceso, ya sea con autofiltros o
con otro sistema?

Gracias de antemano
 

Leer las respuestas

#1 Héctor Miguel
09/11/2008 - 03:16 | Informe spam
hola, Alex !

"imaginemos" que trabajas sobre la "hoja activa" y que el listado se inicia en la celda [A1]
"imaginamos" que el cabecero de "Edad" se encuentra en la celda [B1] (esto es, el segundo elemento de filtros)

te serviria una macro +/- como la siguiente:

Sub Mover_a_Otra_hoja()
Dim Edad As Byte
Edad = 30
Application.ScreenUpdating = False
With ActiveSheet
If Application.CountIf(Range("b:b"), Edad) Then
.Range("a1").AutoFilter 2, Edad
With .AutoFilter.Range
With .Offset(1).Resize(.Rows.Count - 1)
.Copy Worksheets("edad_" & Edad).Range("a65536").End(xlUp).Offset(1)
.EntireRow.Delete
End With
End With
.AutoFilterMode = False
Else
MsgBox "No existen elementos de: " & Edad
End If
End With
End Sub

si cualquier duda (o informacion adiiconal)... comentas ?
saludos,
hector.

__ OP __
... Tengo una pestana en la cual tengo una matriz muy grande.
Cada linea pertenece a un individuo distinto, y en la cabecera de la matriz (esto es, en la primera fila de la matriz) aparecen los titulos.
Imaginemos que los titulos son: Nombre, Edad, Poblacion.
Lo que quiero es que los individuos que cumplan la condición de Edad = 30
(esto es, que en la linea de dicho individuo aparezca el numero 30 en la celda de la columna Edad)
se borren de la matriz original y se copien en otra pestana que se llama Edad_30.
Dicha pestana Edad_30 ya tiene copiada en ella el cabecero de la original (Nombre, Edad, Poblacion).
Para afrontar el problema de forma manual suelo aplicar filtros automaticos en la cabecera de la matriz original
filtro los de Edad = 30 y luego corto la matriz resultante y la pego en la pestana Edad_30.
No he podido automatizar esto ya que en cada matriz de datos el primer elemento que cumple la caracteristica esta una linea distinta.
Sabeis como se puede automatizar el proceso, ya sea con autofiltros o con otro sistema?

Preguntas similares