Cómo seleccionar una columna entera en una macro

23/01/2005 - 21:01 por Teletreks | Informe spam
Hola a todos, mi problema es el siguiente:

tengo una base de datos que obtengo mediante una consulta sobre un programa
de contablidad. Desués la "pormateo" con una makro, pero siempre tengo dos
columnas (cuyo tamaño nunca serà igual) en las que existen celdas en blanco.
Cómo puedo hacer para que la macro seleccione las dos columnas (que siempre
estarán en el mismo sitio) con independencia de las filas que contengan?

Muchas gracias por anticipado.

Preguntas similare

Leer las respuestas

#6 Teletreks
24/01/2005 - 16:01 | Informe spam
Hola de nuevo KL

Siento ser tan pesado , pero antes que nada he de decirte que hoy hace una
semana que consegui crear mi primer macro, con lo que te puedes imaginar que
mi nivel es infimo.

Te exlico de nuevo el problema pq la primera vez no me expresé bien, En las
columnas K y M tengo unos datos cuyo número de filas nunca será igual, ya qu
tengo muchas bases de datos de idéntico formato pero con nºs de filas
diferentes.
En estas columnas (debido a la tipologia del programa de origen) existen
celdas que están en blanco. Normalmente yo seleccionaba todas las celdas de
las dos columnas y con "ir a" iba a las celdas en blanco y les ponía un 0 con
mediante control + enter.
Lo que yo quisera saber es como autmatizar este proceso, ya que cuando creo
la macro (mediante el grabador) se me queda con el nº de filas de la bse de
datos que uso en ese momento.

De nuevo muchisimas gracias por las molestias que te estas tomando y perdona
mi ineptitud, de ahí que también solicitara libros para ir aprendiendo.


"KL" escribió:

Bueno, ya me estoy durmiendo :-) - el ultimo codigo q postee tenia un pequno
problema y debe sustituirse con el siguiente.

Saludos,
KL

'-Inicio Codigo-
Sub Test3()
Dim rng As Range
Dim uFila As Long
Dim uCol As Integer
Dim rngUsado As Range

With ActiveSheet
On Error Resume Next

'Encontramos la Ultima Fila usada en la columna A
uFila = .Cells(.Rows.Count, 1).End(xlUp).Row

'Encontramos la Ultima Columna usada en la fila 1
uCol = .Cells(1, .Columns.Count).End(xlToLeft).Column

'Asumiendo q la tabla empieza en la celda A2 y
'usando la Ultima Fila y la Ultima Columna
'determinamos el Rango Usado.
Set rngUsado = .Range(.Cells(2, 1), .Cells(uFila, uCol))

'Reducimos el Rango Usado a la inteseccion de ese,
'las columnas K,L,M y las celdas vacias.
Set rng = Intersect(.Range("K:M"), rngUsado, _
.Cells.SpecialCells(xlCellTypeBlanks))
On Error GoTo 0
End With

'Si la interseccion resulta en un rango valido
'asignamos el valor 0 a todas las celdas del rango.
If Not rng Is Nothing Then rng = 0
End Sub
'-Fin Codigo-


"KL" wrote in message
news:%
> Teletreks,
>
> Se me olvido mencionar q existe otra forma de detectar las dimensiones del
> Rango usado. El siguiente codigo asume q la fila 1 de tu hoja no puede
> tener celdas vacias intercaladas (p.ej.encabezados de columnas) ni la
> columna A tampoco (p.ej. encabezados de filas o codigos de
> empleado/producto/factura, etc.).
>
> Saludos,
> KL
>
> '-Inicio Codigo-
> Sub Test3()
> Dim rng As Range
> Dim uFila As Long
> Dim uCol As Integer
> Dim rngUsado As Range
>
> With ActiveSheet
> On Error Resume Next
>
> 'Encontramos la Ultima Fila usada en la columna A
> uFila = .Cells(.Rows.Count, 1).End(xlUp).Row
>
> 'Encontramos la Ultima Columna usada en la fila 1
> uCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
>
> 'Asumiendo q la tabla empieza en la celda A2 y
> 'usando la Ultima Fila y la Ultima Columna
> 'determinamos el Rango Usado.
> Set rngUsado = .Range(Cells(2, 1), Cells(uFila, uCol))
>
> 'Reducimos el Rango Usado a la inteseccion de ese,
> 'las columnas K,L,M y las celdas vacias.
> Set rng = Intersect(.Range("A:I"), rngUsado, _
> .Cells.SpecialCells(xlCellTypeBlanks))
> On Error GoTo 0
> End With
>
> 'Si la interseccion resulta en un rango valido
> 'asignamos el valor 0 a todas las celdas del rango.
> If Not rng Is Nothing Then rng = 0
> End Sub
> '-Fin Codigo-
>
>
>
>
> "Teletreks" wrote in message
> news:
>> Gracias por tu interes KL, he probado con esto (en base a tu respuesta),
>> pero
>> el problema es que no me selecciona adecuadamente todas las filas de las
>> columnas K..M que continen datos, a veces se pasa o se queda corto.
>>
>> ' ActiveSheet.Range("K:M").Select
>> Selection.SpecialCells(xlCellTypeBlanks).Select
>> Selection.FormulaR1C1 = "0"
>> End Sub
>>
>> Te agradezco tu interes, de paso (si no es abusar) me podrias recomendar
>> algun sitio o libro para aprender a manejarme en esto de las macros (en
>> realidad esta es mi primera eperiencia).
>>
>> Gracias
>>
>>
>> "KL" escribio:
>>
>>> Hola Teletreks,
>>>
>>> Para seleccionar una columna entera hay varias formas, p. ej:
>>>
>>> ActiveSheet.Columns(1).Select
>>> o
>>> ActiveSheet.Columns("A:B").Select
>>> o
>>> ActiveSheet.Range("A:B").Select
>>> o
>>> ActiveSheet.Range("A1:B1").EntireColumn.Select
>>> etc.
>>>
>>> Por otro lado, por lo q intuyo de tu mensaje a lo mejor estas
>>> seleccionando
>>> columnas donde no es estrictamente necesario. Si expones el codigo aqui,
>>> procuraremos ayudarte a depurarlo.
>>>
>>> Saludos,
>>> KL
>>>
>>>
>>>
>>> "Teletreks" wrote in message
>>> news:
>>> > Hola a todos, mi problema es el siguiente:
>>> >
>>> > tengo una base de datos que obtengo mediante una consulta sobre un
>>> > programa
>>> > de contablidad. Desues la "pormateo" con una makro, pero siempre tengo
>>> > dos
>>> > columnas (cuyo tamano nunca sera igual) en las que existen celdas en
>>> > blanco.
>>> > Como puedo hacer para que la macro seleccione las dos columnas (que
>>> > siempre
>>> > estaran en el mismo sitio) con independencia de las filas que
>>> > contengan?
>>> >
>>> > Muchas gracias por anticipado.
>>>
>>>
>>>
>
>



Respuesta Responder a este mensaje
#7 KL
24/01/2005 - 17:03 | Informe spam
Hola Teletreks,

"Teletreks" wrote in message...
Te exlico de nuevo el problema pq la primera vez no me exprese bien, En
las
columnas K y M tengo unos datos cuyo numero de filas nunca sera igual, ya
qu
tengo muchas bases de datos de identico formato pero con n?s de filas
diferentes.
En estas columnas (debido a la tipologia del programa de origen) existen
celdas que estan en blanco. Normalmente yo seleccionaba todas las celdas
de
las dos columnas y con "ir a" iba a las celdas en blanco y les ponia un 0
con
mediante control + enter.
Lo que yo quisera saber es como autmatizar este proceso, ya que cuando
creo
la macro (mediante el grabador) se me queda con el n? de filas de la bse
de
datos que uso en ese momento.



Perdona q te responda con una pregunta, pero...?has probado los macros q te
habia posteado antes? ?Que es lo que falla exactamente? Estos macros estan
disenados para captar el numero de filas dinamicamente. El unico tema q veo
pendiente aqui es excluir la columna L,?no? Mira tambien los
comentarios/explicaciones q he incluido dentro de los macros para q se
entiendan mejor.
Dime algo.

De nuevo muchisimas gracias por las molestias que te estas tomando y
perdona
mi ineptitud, de ahi que tambien solicitara libros para ir aprendiendo.



no es ninguna molestia, ni tampoco tienes por q pedir perdon por preguntar
cosas aqui - de alguna manera todos hemos tenido q empezar desde 0 en algun
momento y creo q este es un buen sitio para empezar.

Saludos,
KL
Respuesta Responder a este mensaje
#8 Teletreks
24/01/2005 - 19:17 | Informe spam
Mil perdones y mil gracias, efectivamente las siguientes isntrucciones
funcionan perfectamente.

Gracias por todo ha sido un buen ejercicio para empezar.

'-Inicio Codigo-
Sub Test3()
Dim rng As Range
Dim uFila As Long
Dim uCol As Integer
Dim rngUsado As Range

With ActiveSheet
On Error Resume Next

'Encontramos la Ultima Fila usada en la columna A
uFila = .Cells(.Rows.Count, 1).End(xlUp).Row

'Encontramos la Ultima Columna usada en la fila 1
uCol = .Cells(1, .Columns.Count).End(xlToLeft).Column

'Asumiendo q la tabla empieza en la celda A2 y
'usando la Ultima Fila y la Ultima Columna
'determinamos el Rango Usado.
Set rngUsado = .Range(.Cells(2, 1), .Cells(uFila, uCol))

'Reducimos el Rango Usado a la inteseccion de ese,
'las columnas K,L,M y las celdas vacias.
Set rng = Intersect(.Range("K:M"), rngUsado, _
.Cells.SpecialCells(xlCellTypeBlanks))
On Error GoTo 0
End With

'Si la interseccion resulta en un rango valido
'asignamos el valor 0 a todas las celdas del rango.
If Not rng Is Nothing Then rng = 0
End Sub
'-Fin Codigo-

"KL" escribió:

Hola Teletreks,

"Teletreks" wrote in message...
> Te exlico de nuevo el problema pq la primera vez no me exprese bien, En
> las
> columnas K y M tengo unos datos cuyo numero de filas nunca sera igual, ya
> qu
> tengo muchas bases de datos de identico formato pero con n?s de filas
> diferentes.
> En estas columnas (debido a la tipologia del programa de origen) existen
> celdas que estan en blanco. Normalmente yo seleccionaba todas las celdas
> de
> las dos columnas y con "ir a" iba a las celdas en blanco y les ponia un 0
> con
> mediante control + enter.
> Lo que yo quisera saber es como autmatizar este proceso, ya que cuando
> creo
> la macro (mediante el grabador) se me queda con el n? de filas de la bse
> de
> datos que uso en ese momento.

Perdona q te responda con una pregunta, pero...?has probado los macros q te
habia posteado antes? ?Que es lo que falla exactamente? Estos macros estan
disenados para captar el numero de filas dinamicamente. El unico tema q veo
pendiente aqui es excluir la columna L,?no? Mira tambien los
comentarios/explicaciones q he incluido dentro de los macros para q se
entiendan mejor.
Dime algo.

> De nuevo muchisimas gracias por las molestias que te estas tomando y
> perdona
> mi ineptitud, de ahi que tambien solicitara libros para ir aprendiendo.

no es ninguna molestia, ni tampoco tienes por q pedir perdon por preguntar
cosas aqui - de alguna manera todos hemos tenido q empezar desde 0 en algun
momento y creo q este es un buen sitio para empezar.

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