Ayuda con macro para eliminar celdas

27/02/2008 - 20:22 por Citronio | Informe spam
Buenas tardes.
Estoy intentando crear una macro que elimine las celdas vacías de un rango,
desplazando hacia la izquierda las que tengan datos.
Ejemplo. Supongamos que queremos agrupar todos los cuadros negros de un
tablero de ajedrez (8x8 celdas), en la izquierda del tablero, eliminando los
blancos, y de forma que nos quedaría un tablero de 8 filas y sólo 4
columnas.
Creo que me he explicado bien.
El problema es que el rango no es de 8x8 sino bastante más grande 4500 x 36
aproximadamente
Lo he intentado pero me hago un lío con los rangos y los desplazamientos.
Muchas gracias y un saludo


Por cierto, he estado leyendo los mensajes del último mes y no he encontrado
nada que me sirviera para esto, pero sí para otras macros.
Buen trabajo de los "profes", si señor.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
28/02/2008 - 00:13 | Informe spam
hola, (...) ???

Estoy intentando crear una macro que elimine las celdas vacias de un rango, desplazando hacia la izquierda las que tengan datos.
Ejemplo. Supongamos que queremos agrupar todos los cuadros negros de un tablero de ajedrez (8x8 celdas)
en la izquierda del tablero, eliminando los blancos, y de forma que nos quedaria un tablero de 8 filas y sólo 4 columnas.
Creo que me he explicado bien.
El problema es que el rango no es de 8x8 sino bastante mas grande 4500 x 36 aproximadamente
Lo he intentado pero me hago un lío con los rangos y los desplazamientos...



el siguiente ejemplo lo puedes ejecutar desde la ventana de inmediato (atajo: ctfl+G) en el editor de vba y pulsas {enter}
-> solo corrige el rango de las 4500 x 36 (yo probe con un rango "ligeramemte" mas corto: 10 x 6) :))

[a1:f10].specialcells(xlcelltypeblanks).delete shift:=xltoleft

saludos,
hector.
Respuesta Responder a este mensaje
#2 Citronio
28/02/2008 - 01:10 | Informe spam
"Héctor Miguel" escribió en el mensaje de
noticias news:e$
hola, (...) ???

Estoy intentando crear una macro que elimine las celdas vacias de un
rango, desplazando hacia la izquierda las que tengan datos.
Ejemplo. Supongamos que queremos agrupar todos los cuadros negros de un
tablero de ajedrez (8x8 celdas)
en la izquierda del tablero, eliminando los blancos, y de forma que nos
quedaria un tablero de 8 filas y sólo 4 columnas.
Creo que me he explicado bien.
El problema es que el rango no es de 8x8 sino bastante mas grande 4500 x
36 aproximadamente
Lo he intentado pero me hago un lío con los rangos y los
desplazamientos...



el siguiente ejemplo lo puedes ejecutar desde la ventana de inmediato
(atajo: ctfl+G) en el editor de vba y pulsas {enter}
-> solo corrige el rango de las 4500 x 36 (yo probe con un rango
"ligeramemte" mas corto: 10 x 6) :))

[a1:f10].specialcells(xlcelltypeblanks).delete shift:=xltoleft




Muchas gracias por tu respuesta
Funciona perfectamente siempre y cuando la celda esté completamente vacía,
pero el caso es que las celdas a eliminar son un pega-valor de otras celdas
que contenían "" (una cadena vacía) y al buscarlas, tu algoritmo no las
encuentra porque lo que busca son celdas vacías.
Eso sí, si hago F2 y enter en cualquiera de ellas, la encuentra y la elimina
sin problemas. (No escribo ni borro nada en la celda, sólo hago F2 y pulso
enter)
Pero claro, eso no me sirve, porque hacerlo con todas las que tengo, es peor
que hacerlo a mano.
Pues eso, muchas gracias, y si se te ocurre algo más, seguiré leyendo.

Un saludo





saludos,
hector.


Respuesta Responder a este mensaje
#3 Héctor Miguel
28/02/2008 - 04:12 | Informe spam
hola, (...) ?

Funciona perfectamente siempre y cuando la celda este completamente vacia
pero el caso es que las celdas a eliminar son un pega-valor de otras celdas que contenian "" (una cadena vacia)
y al buscarlas, tu algoritmo no las encuentra porque lo que busca son celdas vacias.
Eso si, si hago F2 y enter en cualquiera de ellas, la encuentra y la elimina sin problemas.
(No escribo ni borro nada en la celda, sólo hago F2 y pulso enter)
Pero claro, eso no me sirve, porque hacerlo con todas las que tengo, es peor que hacerlo a mano.
Pues eso, muchas gracias, y si se te ocurre algo mas, seguire leyendo.



(hasta donde se)... eso que comentas pasa (regularmente) cuando se dejan "ciertos detalles en el tintero" :))
inicialmente solicitabas eliminar celdas (expresamente) "vacias" (que no es lo mismo que "con cadenas vacias")
para el caso que (ahora) expones, intenta con una instruccion previa y luego la misma de la propuesta anterior...
(solo "ajusta" el rango a tu caso real)

(primero)
[a1:f20] = evaluate("transpose(transpose(a1:f20))")

(despues)
[a1:f20].specialcells(xlcelltypeblanks).delete shift:=xltoleft

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

__ las consultas anteriores __
Estoy intentando crear una macro que elimine las celdas vacias de un rango, desplazando hacia la izquierda las que tengan datos.
Ejemplo. Supongamos que queremos agrupar todos los cuadros negros de un tablero de ajedrez (8x8 celdas)
en la izquierda del tablero, eliminando los blancos, y de forma que nos quedaria un tablero de 8 filas y sólo 4 columnas.
Creo que me he explicado bien.
El problema es que el rango no es de 8x8 sino bastante mas grande 4500 x 36 aproximadamente
Lo he intentado pero me hago un lío con los rangos y los desplazamientos...



el siguiente ejemplo lo puedes ejecutar desde la ventana de inmediato (atajo: ctfl+G) en el editor de vba y pulsas {enter}
-> solo corrige el rango de las 4500 x 36 (yo probe con un rango "ligeramemte" mas corto: 10 x 6) :))

[a1:f10].specialcells(xlcelltypeblanks).delete shift:=xltoleft
Respuesta Responder a este mensaje
#4 Citronio
02/03/2008 - 10:29 | Informe spam
Muchas gracias Héctor, me has sido de gran ayuda


Un saludo



"Héctor Miguel" escribió en el mensaje de
noticias news:
hola, (...) ?

Funciona perfectamente siempre y cuando la celda este completamente vacia
pero el caso es que las celdas a eliminar son un pega-valor de otras
celdas que contenian "" (una cadena vacia)
y al buscarlas, tu algoritmo no las encuentra porque lo que busca son
celdas vacias.
Eso si, si hago F2 y enter en cualquiera de ellas, la encuentra y la
elimina sin problemas.
(No escribo ni borro nada en la celda, sólo hago F2 y pulso enter)
Pero claro, eso no me sirve, porque hacerlo con todas las que tengo, es
peor que hacerlo a mano.
Pues eso, muchas gracias, y si se te ocurre algo mas, seguire leyendo.



(hasta donde se)... eso que comentas pasa (regularmente) cuando se dejan
"ciertos detalles en el tintero" :))
inicialmente solicitabas eliminar celdas (expresamente) "vacias" (que no
es lo mismo que "con cadenas vacias")
para el caso que (ahora) expones, intenta con una instruccion previa y
luego la misma de la propuesta anterior...
(solo "ajusta" el rango a tu caso real)

(primero)
[a1:f20] = evaluate("transpose(transpose(a1:f20))")

(despues)
[a1:f20].specialcells(xlcelltypeblanks).delete shift:=xltoleft

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

__ las consultas anteriores __
Estoy intentando crear una macro que elimine las celdas vacias de un
rango, desplazando hacia la izquierda las que tengan datos.
Ejemplo. Supongamos que queremos agrupar todos los cuadros negros de un
tablero de ajedrez (8x8 celdas)
en la izquierda del tablero, eliminando los blancos, y de forma que nos
quedaria un tablero de 8 filas y sólo 4 columnas.
Creo que me he explicado bien.
El problema es que el rango no es de 8x8 sino bastante mas grande 4500
x 36 aproximadamente
Lo he intentado pero me hago un lío con los rangos y los
desplazamientos...



el siguiente ejemplo lo puedes ejecutar desde la ventana de inmediato
(atajo: ctfl+G) en el editor de vba y pulsas {enter}
-> solo corrige el rango de las 4500 x 36 (yo probe con un rango
"ligeramemte" mas corto: 10 x 6) :))

[a1:f10].specialcells(xlcelltypeblanks).delete shift:=xltoleft






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