Está en la página 1de 4

4/2/2018 ----excel y yo

Más Siguiente blog» Crear un blog Acceder

____ Funciones Formatos Datos Macros Varios TusDudas Mapa Yo

<<<<<<-- VER TODAS LAS ENTRADAS POR CATEGORIA -->>>>>>

Regresar a la Pagina de Inicio


19 sept. 2017 Donar
Algo sobre columnas y nombres de rangos ¿Por qué donar?
(PayPal)
Casi que me da vergüenza escribir esta nueva entrada... ya que lo hago luego de dos años sin aparecer por
estos pagos. ¿Excusas? Miles: trabajo, casa, estudio, familia, viajes, mas excusas, mas excusas y mas
excusas. La que mas se adapta a la realidad: demasiados cambios y "quilombos" (como decimos en
News4Mail
Argentina), pero ahora mas asentado y mejor.
Creo, si todo sale bien, que aunque sea una vez por semana subiré ejemplos con las resoluciones a las
Email address... Submit
consultas mas frecuentes... como estas dos que siguen a continuación:

a) Necesito saber qué función utiliza Excel para determinar la


LETRA de una columna.
Bueno, lamento ser el portador de una mala noticia: Excel no posee tal función. Siempre que trabajemos
con columnas VBA solo reconocerá números, no letras. Si ejecuto:
MsgBox ActiveCell.Column
el resultado será:

Es decir: estoy en la columna C y, por lo tanto, el código me devuelve 3 (tercer columna)

Veamos como solucionar este problema. Ahora corramos el siguiente código:


MsgBox ActiveCell.Address
y obtengo:

Facebook

mapa del blog

http://damianexcel.blogspot.com/2017/09/algo-sobre-columnas-y-nombres-de-rangos.html 1/7
4/2/2018 ----excel y yo

Ver Mapa...

Blogs de interes:
David Rey
Pedro Wave

No es lo que estamos buscando... pero ya aparece la columna en cuestión: C


translate it !
Spanish to English
Como podrán observar, hay varias "cosas" que molestan: los $ y el número.
Go !!!!
Existen varias soluciones posibles, pero en lo personal esta es la que considero mas sencilla: hacer uso de la
función Split(Expresión, Delimitador)
Split "divide" una cadena (expresión) en base a un Delimitador que le paso, creando una matriz. Si, suena buscar...
raro y complicado para quienes no están familiarizados con esta función, pero es mas fácil de lo que parece.
Observen:
M = Split(ActiveCell.Address, "$") Buscar

Entonces: como primer argumento le paso el Address de la celda (que en este ejemplo es $C$1), y en
segundo lugar le paso un "$" para indicarle que "corte" la cadena cada vez que encuentre ese "$". ¿Y Temas del Blog
cuántos $ hay en parámetro? Si, hay 2. por cuanto en M quedarán guardados C (en la primer posición) y 1,
en la segunda. Datos (41)
A nosotros nos interesa solo la primer posición de esa matriz, que contiene la letra que tanto estamos Formatos (22)
buscando: Funciones (81)
M = Split(ActiveCell.Address, "$") Macros (113)
MsgBox M(1) TusDudas (1)
Siendo el resultado final:
Varios (36)

compartilo
Share |

favoritos
llevame a tus favoritos

entradas x mes
entradas x mes

Páginas
Página principal
MapaDelBlog
Listo. Yo
¿Por qué donar?
Ya se que esto "sabe a poco" para quienes nunca usaron Split(expresión, delimitador), así que vamos a un
pequeño ejemplo para aclarar dudas y, de paso, aprender esta nueva y extremadamente útil función de
VBA.
Supongamos que necesitamos saber la cantidad de palabras que posee una oración, por ejemplo: estadisticas
"Que bueno es Damian Omar Silva haciendo macros" 237 post
Mas allá de tremenda humildad que encierra la frase, los programadores mas estructurados recorrerían toda 774 comentarios
la cadena en busca de un espacio en blanco y así contarían cada palabra.
Split no ahorrará esa tarea de bucles, x, y, mid(), etc, etc, etc, con este sencillo código: Donar
M=Split("Que bueno es Damian Omar Silva haciendo macros", " ")
Como primer argumento pasé la frase, y con el segundo (un espacio en blanco) le estoy indicando cual es el
"delimitador" y que a partir de él "corte" la frase y la coloque en una matriz, en donde cada posición será
una palabra. El código completo queda:
M=Split("Que bueno es Damian Omar Silva haciendo macros", " ")

http://damianexcel.blogspot.com/2017/09/algo-sobre-columnas-y-nombres-de-rangos.html 2/7
4/2/2018 ----excel y yo
MsgBox UBound(M)
Con UBound obtengo la cantidad de elementos dentro de una matriz. Si ejecuto lo escrito, este es el ¿Por qué donar?
resultado:
You are viewing "Algo
sobre columnas y
nombres de rangos"
No Comment Add your
own!
Filed under Funciones,
Macros Macros
Posted on martes,
septiembre 19, 2017
Subscribe through Atom
feed.

Exacto: la frase contiene 8 palabras divididas por un espacio (recordemos que, por defecto, todas las
matrices empiezan con cero: de 0 a 7 = 8 unidades)

Si queremos ver el resultado de cómo se ubicó cada palabra en la matriz, ahora si utilizaremos un bucle
recorriendo cada posición de dicha matriz y volcando su valor en una planilla:

Y al final podemos comprender mejor todo:

En el ejemplo con la letra de la columna utilicé el $ como delimitador, en el caso de la humilde frase, el
espacio. Y así harán Uds. con los casos que se les presenten de ahora en mas, adecuando los parámetros en
función de las necesidades del problema a resolver.

b) Tengo que saber todos los rangos que poseen nombre


Recordemos que a cada rango (sea una sola celda o un conjunto de ellas) se le puede otorgar un nombre en
particular, desde la izquierda de la barra de fórmulas o bien yendo a la pestaña Fórmulas/Asignar nombre.
No ahondaré mucho en esta cuestión ya que la misma se encuentra detallada en otras entradas de este
blog.
Ya sabemos, también, lo fácil y útil que nos resulta trabajar con el rango "Sueldo" en vez de apuntar a la

http://damianexcel.blogspot.com/2017/09/algo-sobre-columnas-y-nombres-de-rangos.html 3/7
4/2/2018 ----excel y yo
celda "A1", dado que así logramos "setear" rangos con nombres acordes a su función.
En mas de una ocasión necesitamos saber que cantidad de nombres hay definidos en el libro y en donde se
encuentran cada uno de ellos (su respectiva celda).
La cuestión ahora es mas sencilla que el ejemplo anterior, dado que Excel (VBA) sí cuenta con objetos que
nos permitirán llevar a cabo la labor.
El siguiente código se encuentra detalladamente comentado para ir comprendiendo correctamente cada
línea del mismo.
Como observarán, el asunto es bastante fácil: cargo en un objeto (llamado, muy originalmente, "Nombres"),
todos los nombres de rango que existen en el libro. Luego con un bucle recorro desde 1 a Nombres.Count
(con la propiedad Count obtengo la totalidad de ítems) y los voy colocando en las celdas de la planilla de
cálculos creada a tales efectos:

Sub ListarReferencias

Dim Nombres As Object 'declaro la variable objeto

'la seteo, "cargando" en ella todos los nombres existentes

'en el libro

Set Nombres = ActiveWorkbook.Names

'agrego una hoja nueva para colocar allí la info:

Sheets.Add

'y ahora con un simple bucle recorro todos los ítems

'presentes dentro del objeto Nombres:

For x = To Nombres.Count

Cells x, .Value = Nombres x .Name

Cells x, .Value = Nombres x .RefersToRange.Name

Next

'como siempre, destruyos los objetos para liberar memoria:

Set Nombres = Nothing

End Sub

Y el resultado:

En la columna A vamos guardando el nombre del rango, con el uso de la propiedad Name. Y en B le
colocamos a qué celda está haciendo referencia, con la propiedad RefersToRange.Name

http://damianexcel.blogspot.com/2017/09/algo-sobre-columnas-y-nombres-de-rangos.html 4/7

También podría gustarte