Nombre Calificación Materia
Juan 10 Química
Juan 8 Español
Juan 7 Ciencias Sociales
Pedro 6 Química
Pedro 6 Español
Pedro 10 Ciencias Sociales
Martha 10 Química
Martha 10 Español
Martha 10 Ciencias Sociales
Juana 6 Química
Juana 7 Español
Juana 8 Ciencias Sociales
Es probable que sólo queremos tener las calificaciones de Juan y Juana. Es decir, esto:
Nombre Calificación Materia
Juan 10 Química
Juan 8 Español
Juan 7 Ciencias Sociales
Juana 6 Química
Juana 7 Español
Juana 8 Ciencias Sociales
Para ello se puede hacer una macro. Pondremos un ejemplo más complicado. Tenemos un listado de municipios con su clave (en columna A) que son los únicos que queremos que queden en un listado. Queremos que los municipios que no son alguno de ellos, sean borrados.
Es decir, tenemos algo como esto:
Pero no queremos el 15002, por ejemplo. Al final quisieramos que un filtro nos mostrara no esto:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx0ZUlpZoeueVOZ_QDV_81Zqi3n3IT5zY_gYEBviKSER0chVuyRujoc9c7LQT12bQOlHj1A6ECaE7_-3fLG_gK1uMXFR-6G1EciGqIbOM9ll9EbwfiQcBcpFg51sr5-RFSrkIS3ctOrkFC/s320/ListadoBorra4.jpg)
Sino esto:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtWDQldwCEveMUOg8Zf9yl_kD1TfzigcavTUkBoJjFLMWPDsAWS7uhYb3jL_e3h5OAEAE9X4raDl-5z_ayWOhMhGCfXuCfPqY7-1agZF11RpQbLx2GNeL1_u1FTnl-9n2m-pY3o0RyA9rF/s320/ListadoBorra3.jpg)
-------------------------------------
Sub BorraCasosAjenos()
'
' Macro1 Macro
'
For N = 1 To 190490
'
Valor = ActiveCell.Value
'Adelante los casos que SI queremos
'15002
'15011
'15013
'15020
'15023
'15024
'15025
'15028
'15029
'15030
'15031
'15033
'15037
'15039
'15044
'15053
'15057
'15058
'15059
'15060
'15069
'15070
'15081
'15091
'15092
'15093
'15095
'15099
'15100
'15104
'15108
'15109
'15120
'15121
'15122
'15125
Select Case Valor
Case "15002", "15011", "15013", "15020", "15023", "15024", "15025", "15028", "15029", "15030", "15031", "15033", "15037"
Borra = "NO"
Case "15039", "15044", "15053", "15057", "15058", "15059", "15060", "15069", "15070", "15081", "15091", "15092", "15093"
Borra = "NO"
Case "15095", "15099", "15100", 15104, "15108", "15109", "15120", "15121", "15122", "15125"
Borra = "NO"
Case Else
Borra = "SI"
End Select
If Borra = "SI" Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Range("A1").Select
End If
Next
End Sub
-----------------------------------------------
1. Primero con el for decimos cuantas veces se repetirá todo l oque está entre For y Next, es decir 190490 veces,
2. La instrucción Valor=ActiveCell.Value, almacena en la variable Valor, lo que esté en ese momento en la celda activa (la que parpadea)
3. Select Case Valor, lo que hace es decirle al programa que tomará en cuenta el lo que está contenido en la variable Valor para comparar los siguientes casos y tomar decisiones con respecto a ello.
4.
Case "15002", "15011", "15013", "15020", "15023", "15024", "15025", "15028", "15029", "15030", "15031", "15033", "15037"
Borra = "NO"
Lo que hace es decir que en caso de que valor valga "15002", "15011",...,"15037" entonces una variable llamada Borra va a valer "NO".
Esto de Case se repite para todos los casos que queremos conservar, podrían estár en el mismo Case pero se haría más confuso.
5. Case Else, hace que cualquier otro caso no previsto haga que Borra="SI"
6.
If Borra = "SI" Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Range("A1").Select
End If
Estas instrucciones lo que hacen es que si Valor ocaiona que Borra sea "SI", es decir, si el valor no es de la lista, lo borre. De lo contrario (luego de Else) la celda activa baja a la casilla inferior.
Al terminar tenemos una base con sólo los valores que nos interesan. Es importante señalar que se debe correr la macro a partir de la casilla de la columna que contiene los valores a comparar.
No hay comentarios:
Publicar un comentario