A continuación veremos un programa en Excel VBA que cuenta el número de palabras en un rango seleccionado. Se supone que uno o más espacios separan las palabras.
Situación:
1. Primero, declaramos dos objetos de rango y tres variables. Llamamos a los objetos Range rng y cell. Una variable entera que llamamos cellWords, una variable entera que llamamos totalWords, y una variable String que llamamos content.
Dim rng As Range, cell As Range Palabras de celda oscura, totalPalabras como entero, contenido como cadena
2. Inicializamos el objeto Rango rng con el rango seleccionado y las dos variables de tipo Entero con valor 0.
Set rng = Selección cellWords = 0 totalWords = 0
3. Queremos comprobar cada célula en un rango seleccionado al azar (este rango puede ser de cualquier tamaño). En Excel VBA, puedes usar el bucle For Each Next para esto. Añade las siguientes líneas de código:
Para cada célula en el rng La siguiente celda
Nota: el rng y la celda son elegidos al azar aquí, puedes usar cualquier nombre. Recuerda referirte a estos nombres en el resto de tu código.
4. A continuación, determinamos para cada célula de este rango cuántas palabras contiene. Para ignorar una celda que contiene una fórmula, añadimos la siguiente línea de código entre Para cada uno y Siguiente (sólo si la celda.HasFormula es falsa continuamos).
Si no es una célula, tiene una fórmula, entonces… Finalizar si
5. Primero, escribimos el contenido de la célula al contenido variable. Luego, quitamos los espacios del principio y del final (si los hay). En Excel VBA, puede usar la función de recorte para esto. Por ejemplo, «excel vba» se convertirá en «excel vba». Añada las siguientes líneas de código en su declaración If.
contenido = celda.Valor contenido = Trim(contenido)
Nota: la función de recorte en Excel VBA no elimina los espacios extra entre las palabras, pero eso está bien en este ejemplo.
6. En este punto, una celda puede estar todavía vacía. Si la celda está vacía, asignamos el valor 0 a la variable cellWords. Si no, contiene al menos una palabra y asignamos el valor 1 a la variable cellWords. Añade las siguientes líneas de código en tu declaración If.
Si el contenido = «» entonces cellWords = 0 Else cellWords = 1 Finalizar si
Una célula puede contener más de una palabra, por supuesto. Eso es exactamente lo que queremos averiguar ahora. Como ejemplo tomamos: «Excel vba». Si una célula contiene al menos un espacio en esta etapa, contiene al menos una palabra más. Puedes usar la función Instr en Excel VBA para buscar un espacio. Instr(content, » «) encuentra la posición del primer espacio en el contenido.
7. Utilizaremos la estructura del bucle Do While. El código colocado entre estas palabras (en los pasos 8, 9 y 10) se repetirá siempre y cuando la parte después del Do While sea verdadera. Queremos repetir estos pasos siempre y cuando Instr(content, » «); 0 sea verdadero (siempre y cuando el contenido contenga un espacio y por lo tanto más palabras). Añada el bucle Do While en su declaración If.
Do While InStr(content, » «); 0 Bucle
8. A continuación, tomamos la parte del contenido que comienza en la posición del primer espacio. Usamos la función Mid para esto.
content = Mid(content, InStr(content, » «))
Por ejemplo: Mid(«excel vba», InStr(«excel vba», » «)) dará «vba».
9. Recortamos la cuerda de nuevo.
contenido = Trim(contenido)
Resultado: «vba»
10. Incrementamos las palabras de la celda en 1.
cellWords = cellWords + 1
Este bucle Do While se repetirá mientras el contenido contenga un espacio y por lo tanto más palabras. En nuestro ejemplo, salimos del Bucle de Mientras, ya que «vba» ya no contiene un espacio! Resultado: esta celda contiene 2 palabras.
11. Después de haber marcado una celda, añadimos las palabras de la celda a la variable totalWords. Esta línea de código debe colocarse fuera del bucle Do While pero en la sentencia If.
totalWords = totalWords + cellWords
Todo el proceso comienza de nuevo para la siguiente célula hasta que todas las células hayan sido revisadas.
12. Finalmente, mostramos el valor de TotalWords usando un msgbox. Esta línea de código debe ser colocada fuera del bucle For Each Next.
MsgBox totalWords & «palabras encontradas en el rango seleccionado».
13. Pruebe el programa.
Resultado: