Macro para filtrar y eliminar valores de columna

09/07/2005 - 20:13 por Mk | Informe spam
Llevo tiempo leyendo el grupo y estoy impresionado por la cantidad de
conocimientos que uno puede aprender gracias a la ayuda desinteresada de
otras personas, por ello, gracias de antemano.

Centrandome en la consulta; deseo crear una macro para que en una
columna determinada de una hoja, que por otra parte solo contiene 3
valores diferentes (A,B,C) me elimine por defecto dos de ellos (por
ejemplo A y C). La longitud de dicha columna es variable, pero no creo
que este sea un dato importante.

¿Alguna pista de como puede ser ó como puede ser la instrucción que
tengo que añadir a la macro?.

Gracias

Mk



avast! Antivirus: Mensaje saliente limpio.
Base de datos de Virus (VPS): 0527-2, 08/07/2005
Comprobado el: 09/07/2005 20:13:29
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com

Preguntas similare

Leer las respuestas

#1 carloshernandezy
09/07/2005 - 20:27 | Informe spam
Prueba con este código, creo que te puede servir, modifica la columna
y el valor a eliminar

Sub Example1()
Dim Firstrow As Long
Dim Lastrow As Long
Dim Lrow As Long
Dim CalcMode As Long

With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With

Firstrow = ActiveSheet.UsedRange.Cells(1).Row
Lastrow = ActiveSheet.UsedRange.Rows.Count + Firstrow - 1
With ActiveSheet
.DisplayPageBreaks = False
For Lrow = Lastrow To Firstrow Step -1
If IsError(.Cells(Lrow, "A").Value) Then
'Do nothing, This avoid a error if there is a error in
the cell

ElseIf .Cells(Lrow, "A").Value = "ron" Then
.Rows(Lrow).Delete
'This will delete each row with the Value "ron" in
Column A, case sensitive.

End If
Next
End With
With Application
.ScreenUpdating = True
.Calculation = CalcMode
End With
End Sub
Respuesta Responder a este mensaje
#2 KL
09/07/2005 - 20:29 | Informe spam
Hola Mk,

?Que tal esto?:

Sub test()
With Sheet1.Range("A:A")
.Replace "A", "", xlWhole
.Replace "C", "", xlWhole
End With
End Sub

o bien

Sub test()
With Sheet1.Range("A:A")
.Replace 33, "", xlWhole
.Replace 44, "", xlWhole
End With
End Sub

Saludos,
KL


"Mk" wrote in message
news:
Llevo tiempo leyendo el grupo y estoy impresionado por la cantidad de
conocimientos que uno puede aprender gracias a la ayuda desinteresada de
otras personas, por ello, gracias de antemano.

Centrandome en la consulta; deseo crear una macro para que en una columna
determinada de una hoja, que por otra parte solo contiene 3 valores
diferentes (A,B,C) me elimine por defecto dos de ellos (por ejemplo A y
C). La longitud de dicha columna es variable, pero no creo que este sea un
dato importante.

¿Alguna pista de como puede ser ó como puede ser la instrucción que tengo
que añadir a la macro?.

Gracias

Mk



avast! Antivirus: Mensaje saliente limpio.
Base de datos de Virus (VPS): 0527-2, 08/07/2005
Comprobado el: 09/07/2005 20:13:29
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com



Respuesta Responder a este mensaje
#3 KL
09/07/2005 - 20:42 | Informe spam
...o si hay que eliminar las filas:

Sub test()
Col="A" 'la letra de la columna a escanear
With Sheet1
With .Range(.Cells(2, Col), _
.Cells(.Rows.Count, Col).End(xlUp))
.Replace 33, "", xlWhole
.Replace 44, "", xlWhole
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End With
End Sub

Nota: este codigo es veces mas rapido que el propuesto por Carlos, pero
tiene una limitacion: solo funcionara correctamente si el numero de celdas
vacias NO CONTIGUAS en el rango en cuestion no supera 8,000. Es decir, si el
numero de registros en tu hoja es menor o igual a 16,000 entonces funcionara
seguro. Si no, depende de cuantos areas aisladas forman todas las celdas
vacias en el rango en cuestion.

Saludos,
KL



"KL" wrote in message
news:%
Hola Mk,

?Que tal esto?:

Sub test()
With Sheet1.Range("A:A")
.Replace "A", "", xlWhole
.Replace "C", "", xlWhole
End With
End Sub

o bien

Sub test()
With Sheet1.Range("A:A")
.Replace 33, "", xlWhole
.Replace 44, "", xlWhole
End With
End Sub

Saludos,
KL


"Mk" wrote in message
news:
Llevo tiempo leyendo el grupo y estoy impresionado por la cantidad de
conocimientos que uno puede aprender gracias a la ayuda desinteresada de
otras personas, por ello, gracias de antemano.

Centrandome en la consulta; deseo crear una macro para que en una columna
determinada de una hoja, que por otra parte solo contiene 3 valores
diferentes (A,B,C) me elimine por defecto dos de ellos (por ejemplo A y
C). La longitud de dicha columna es variable, pero no creo que este sea
un dato importante.

¿Alguna pista de como puede ser ó como puede ser la instrucción que tengo
que añadir a la macro?.

Gracias

Mk



avast! Antivirus: Mensaje saliente limpio.
Base de datos de Virus (VPS): 0527-2, 08/07/2005
Comprobado el: 09/07/2005 20:13:29
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com







Respuesta Responder a este mensaje
#4 Mk
12/07/2005 - 00:15 | Informe spam
El 09/07/2005 20:42 KL quiso que supiesemos que:
...o si hay que eliminar las filas:

Sub test()
Col="A" 'la letra de la columna a escanear
With Sheet1
With .Range(.Cells(2, Col), _
.Cells(.Rows.Count, Col).End(xlUp))
.Replace 33, "", xlWhole
.Replace 44, "", xlWhole
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End With
End Sub

Nota: este codigo es veces mas rapido que el propuesto por Carlos, pero
tiene una limitacion: solo funcionara correctamente si el numero de celdas
vacias NO CONTIGUAS en el rango en cuestion no supera 8,000. Es decir, si el
numero de registros en tu hoja es menor o igual a 16,000 entonces funcionara
seguro. Si no, depende de cuantos areas aisladas forman todas las celdas
vacias en el rango en cuestion.

Saludos,
KL



Muchas gracias por la respuesta. He probado el código pero no me
funcionaba, supongo que soy muy torpe.

Al final lo he solucionado de una manera un poco tosca pero válida:

Selection.AutoFilter Field:, Criteria1:="a"
Range("A2:L1000").Select
Selection.EntireRow.Delete
' Seleccionamos metodo de venta 0 y eliminamos todos los registros

Selection.AutoFilter Field:, Criteria1:="c"
Range("A2:L1000").Select
Selection.EntireRow.Delete
' Seleccionamos metodo de venta 2 y eliminamos todos los registros

Nunca voy a tener mas de 1000 filas :-D.

Ahora tengo otro problemilla que me tiene atascado...

Tengo otra hoja de excell en otro fichero con una matriz que contiene
una columna que necesito vincular (mediante buscarv) a la hoja en la que
estoy trabajando pero lo he intentado mediante el código siguiente

Range("I2").Select
ActiveCell.FormulaR1C1 =
"=VLOOKUP(RC[-7],[PROGRAMA_Report1_MV1_110705.xls]Data!R2C2:R1313C26,14,FALSE)"

Y no me funciona, ¿alguna idea?

Gracias otra vez



avast! Antivirus: Mensaje saliente limpio.
Base de datos de Virus (VPS): 0528-1, 11/07/2005
Comprobado el: 12/07/2005 0:15:20
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com
Respuesta Responder a este mensaje
#5 KL
12/07/2005 - 00:46 | Informe spam
Hola Mk,

Muchas gracias por la respuesta. He probado el código pero no me
funcionaba



Como no comentas que clase de error te da, nunca sabremos por que no te ha
funcionado. Tu mismo :-)

Tengo otra hoja de excell en otro fichero con una matriz que contiene una
columna que necesito vincular (mediante buscarv) a la hoja en la que estoy
trabajando pero lo he intentado mediante el código siguiente
Range("I2").Select
ActiveCell.FormulaR1C1 =
"=VLOOKUP(RC[-7],[PROGRAMA_Report1_MV1_110705.xls]Data!R2C2:R1313C26,14,FALSE)"



Tampoco dices en que se expresa el "no funciona".

1) Si el archivo "PROGRAMA_Report1_MV1_110705.xls" esta abierto a la hora de
ejecutar el codigo, deberia funcionar si los nombres del archivo y de la
hoja son correctos. Comprueba los nombres en la formula.
2) Si el archivo "PROGRAMA_Report1_MV1_110705.xls" esta cerrado, deberas
incluir expresamente la ruta completa hacia el archivo. P.ej.:

"=VLOOKUP(RC[-7],'C:\Documents and
Settings\MK\Desktop\[PROGRAMA_Report1_MV1_110705.xls]Data'!R2C2:R1313C26,14,0)"

Toma nota de que en esta formula el nombre de archivo y de hoja estan
comprendidos entre los apostrofes (').

3) No es necesario seleccionar la celda [I2] para poder introducir la
formula, basta con lo siguiente:

Range("I2").FormulaR1C1 = _
"=VLOOKUP(RC[-7],'C:\TEMP\MK\[PROGRAMA_Report1_MV1_110705.xls]Data'!R2C2:R1313C26,14,0)"

4) El cuarto argumento de la funcion VLOOKUP puede sustituirse con 0 si es
FALSE u omitirse si es TRUE (lo mismo aplica en espanol).

Saludos,
KL
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida