"hernancho" me dejó una consulta en la sección "
TusDudas", la cual es muy interesante y necesita una entrada para desarrollarla correctamente.
Como bien describe el título, necesita contar la cantidad de palabras que existen dentro de una frase. No me explica para que la quiere, aunque intuyo que quizás su tarea se circunscriba al ambito de algun examen o redacción que deba contener un nro "x" de palabras.
Voy a plantear la solución mediante macros (a traves de una UDF-funcion definida por el usuario), ya que llevarla a la práctica con las fórmulas tradicionales es muy complicado y tenemos siempre el problema que el uso intensivo de funciones matriciales podrían ralentizar bastante nuestra aplicación.
[+/-] Ver el resto / Ocultar
Para comenzar con el tema, vamos por el principio.=)
Supongamos que un usuario ingresa la frase: QUE HERMOSA ES LA MUSICA CLASICA.
Aquí nos encontramos con 6 palabras, claramente identificables. Por que son "claramente identificables"?
Por que a cada una de ellas las separa un espacio (" "). Y allí es el "punto débil" del problema, ya que trabajaremos con esos espacios, resolviendo la cuestión con un par de líneas de código.
Antes de ir a VBA necesitamos plantear bien las cosas, así evitamos sobre/reescribir lo realizado.
Que sucedería con nuestra macro si, por ejemplo, el usuario (sin quererlo y por error) comienza la frase con un espacio o bien tipea dos o tres espacios entre algunas letras? Parecen cuestiones sencillas y de poca monta, pero si no las preveemos seguro nuestro código arrojará error en algún punto, obligándonos a rehacer nuestro trabajo (lógico y práctico).
Comencemos con el trabajo. En B3 daré al usuario la opcion para ingresar su frase.
La codificación es la siguiente, la cual se encuentra debidamente comentada para su mejor entendimiento:
Public Function ContarPalabras(rango)
'defino las variables de uso local
Dim Matrix() As String
Dim Frase As String
Dim X, Cont As Integer
'tomo el rango pasado como argumento y le aplico
'la función Trim(), para eliminar los espacios
'en blanco al principio y fin de la frase
Frase = Trim(rango)
'ahora utilizamos a Split(), que toma una cadena
'de texto y la carga en una matriz. El primer ar
'gumento es la cadena y el segundo el caracter
'separador presente en dicha frase. En este caso
'es un espacion en blanco, pero bien podría ser
'cualquier otro (coma, punto y coma, etc)
Matrix = Split(Frase, " ")
'ya tenemos a nuestra frase en una matriz. la re
'corremos con un bucle for:
For X = 0 To UBound(Matrix())
'noten que a cada posicion de la matriz le
'aplico, x las dudas, un trim. Si el resul
'tado es distinto a nada (""), aumento a
'Cont en 1, ya que me encuentro ante una
'palabra:
If Trim(Matrix(X)) <> "" Then
Cont = Cont + 1
End If
Next X
ContarPalabras = Cont
Set rango = Nothing
End Function
Como estamos frente a una UDF y si nuestra versión de Excel está actualizada, al ingresar la función en la celda nos aparecerá la clásica lista desplegable, con nuestra formula personalizada:
Y una vez introducida, vemos el resultado. Observen que, a propósito y un poco exagerado, dejé espacios entre las palabras, para que analicen como igualmente contó 6 palabras, gracias a la condición If... dentro del bucle:
seis palabras, sin contar cuantos caracteres en blanco existan entre cada una.
Damian Omar: Cordial saludo, no sabes lo que he disfrutando tu blog, No solo puedo felicitarte. sino agradecerte por su contenido .... para quienes nos gusta el tema y lo aplicamos es una exelente ayuda.
ResponderEliminarManuel Antonio Arboleda
gracias a vos Manuel, que siempre tenés muy buenos comentarios para mis post. es una alegría saber que los ejemplos y ayudas son de utilidad.
ResponderEliminarpor cuestiones laborales no tengo mucho tiempo para dedicarle, me gustaría levantar mas entradas, pero bueno, de a poco vamos haciendo.
un abrazo