Eliminar Celdas vacias

03/06/2007 - 19:15 por Carmen | Informe spam
Hola, quería preguntaros como se pueden eliminar las filas que no tienen
nada. Pongo un ejemplo en la Fila B tengo muchas celdas utilizadas, hasta la
7100, pero muchas no tienen nada, por ejemplo en
B1 hay el valor 5
B2 hay el valor 3
B3 hay el valor (no hay nada)
B4 hay el valor 1
B5 hay el valor (no hay nada)
etc...
Quisiera eliminar las celdas de la columna B donde no hay nada
¿podéis decirme como hacerlo?
Un saludo y gracias

Preguntas similare

Leer las respuestas

#6 Ivan
04/06/2007 - 00:39 | Informe spam
hola chicos,

disculpad la intromision pero, tras revisar los enlaces facilitados
por KL (muy interesantes, al menos para mi), me ha surgido una duda
con el siguiente comentario =>

'Invocamos el rango usado para evitar el problema
'descrito en este articulo:http://support.microsoft.com/kb/231007
ActiveSheet.UsedRange



cual es el motivo (o por que/como evita el problema ) de 'invocar'
Usedrange aunque luego no 'participe' en la fiesta. He estado leyendo
el link y no he conseguido aclararme en este punto

bueno, gracias en cualquier caso, son dos datos interesantes de
controlar

un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#7 KL
04/06/2007 - 01:48 | Informe spam
Hola Ivan,

cual es el motivo (o por que/como evita el problema ) de 'invocar'
Usedrange aunque luego no 'participe' en la fiesta. He estado leyendo
el link y no he conseguido aclararme en este punto



1) El problema es que al eliminar filas en una hoja, tanto la propiedad UsedRange como SpecialCells(xlCellTypeLastCell) no se
actualizan automaticamente (tampoco el menu Edicion>Ir a..., opcion Ultima celda, etc.).

2) El realizar una llamada a la propiedad UsedRange si lo hace: http://www.contextures.com/xlfaqApp.html#Unused

3) El metodo SpecialCells(xlCellTypeBlanks) solo busca las celdas vacias en la interseccion del rango usado y el rango [B:B]

4) Si no incorporamos la instruccion ActiveSheet.UsedRange en nuestro codigo, al ejecutarlo por segunda vez (una vez eliminadas las
filas con celdas vacias en la columna [B]), seguira encontrando celdas vacias en la columna [B] ya que el rango usado no se ha
actualizado mientras que las celdas vacias de abajo se han desplazado hacia arriba para reemplazar las ya eliminadas.

Saludos,
KL
Respuesta Responder a este mensaje
#8 Ivan
04/06/2007 - 02:33 | Informe spam
hola KL, muchas gracias

la verdad es que aunque hace tiempo que no lo uso tanto, si habia
tenido bastantes sorpresas con UsedRange, que intentaba solucionar de
diversas formas.

si se me hubiera ocurrido que con la simple invocacion lo actualizaba,
me hubiera ahorrado mas de un dolor de cabeza

mirando el articulo mas despacio, si veo que realmente esta
actualizando usedrange continuamente, pero lo que me llamaba la
atencion en tu codigo era el 'no uso' del rango usado a pesar de
llamarlo. Con tu explicacion queda claro

en cuanto a los rangos discontinuos, creo que tambien me va a ser muy
util la informacion

lo dicho, muchas gracias y disculpad la intromision

un saludo
Ivan
Respuesta Responder a este mensaje
#9 JRod
05/06/2007 - 17:29 | Informe spam
Ola Kl,

Si, tienes razon, pero escribi lo codigo sin testar nada, solo al correr de
la pena, escusa los errores.

Por supuesto que tu codigo es lo correcto, mas que tal este otro?

Sub FindAndDelete()

Dim myRange As Range

On Error Resume Next
Set myRange = Range("B1:B100")

If Application.CountA(myRange) = 100 Then
MsgBox "No hay celdas vacias en el rango"
Else
myRange.SpecialCells(xlBlanks).EntireRow.Delete
End If

End Sub


Gracias.
JRod

__________________________________________
"KL" escreveu na mensagem
news:OS4q$
Hola chicos,

"JRod" escribio:



Sub FindAndDelete()

Dim myRange As Range

On Error Resume Next
Set myRange = Range("B:B").SpecialCells(xlCellTypeBlanks)(1)
On Error GoTo 0

If myRange Is Nothing Then
MsgBox "No hay celdas vacias en el Range!" ' mi espanhol es muy
malo... escusa me.
Else
For Each cell In myRange
cell.EntireRow.Delete
Next cell
End If

End Sub





Me temo que el codigo de Jorge tiene algunos problemas:

1) La siguiente linea reduce 'a priori' myRange a una celda haciendo que
siempre solo se elimine la primera fila que tenga la celda vacia en la
columna [B]

Set myRange = Range("B:B").SpecialCells(xlCellTypeBlanks)(1)

2) Aunque corrijamos el primer problema, tenemos el siguiente fragmento
que intentara eliminar las filas con celda vacia una por una desde arriba
hacia abajo.

For Each cell In myRange
cell.EntireRow.Delete
Next cell

El problema esta en que al eliminar la primera cambiaran las coordenadas
del resto de las celdas que estan mas abajo y nuestro codigo perdera
completamente los nortes.

3) El procedimiento usa un bucle donde no tal es necesario

4) Finalmente, y esto puede que no sea tan grave para este caso concreto,
el metodo SpecialCells tiene un pequeno [pero muy traidor] problema con
las areas no contiguas: http://support.microsoft.com/kb/832293

Asumiendo que es poco probable que se de el caso descrito en el punto 4),
probad el siguiente codigo:

Sub FindAndDelete()
Dim rng As Range
'Invocamos el rango usado para evitar el problema
'descrito en este articulo: http://support.microsoft.com/kb/231007
ActiveSheet.UsedRange
On Error Resume Next
Set rng = Range("B:B").SpecialCells(xlCellTypeBlanks)
If Err.Number <> 0 Then
MsgBox "No hay celdas vacias en el rango!"
Exit Sub
ElseIf rng.Rows.Count = Range("B:B").Rows.Count Then
MsgBox "Demasiadas areas no contiguas!"
Exit Sub
End If
rng.EntireRow.Delete
End Sub

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