Contar palabras en Excel VBA
A continuación vamos a ver un programa en Excel VBA que cuenta el número de palabras de un intervalo seleccionado. Uno o más espacios se supone que palabras separadas.
Situación:
-
En primer lugar, declaramos dos objetos Range y tres variables. Llamamos a la gama de objetos RNG y celular. Una variable entera que llamamos cellWords, una variable entera que llamamos totalWords, y una variable de cadena que llamamos contenido.
Dim rng As Range, cell As Range Dim cellWords, totalWords As Integer, content As String
-
Inicializar el rng objeto Range con la gama seleccionada y las dos variables de tipo entero con valor 0.
Set rng = Selection cellWords = 0 totalWords = 0
-
Queremos comprobar cada celda de un rango seleccionado al azar (de este intervalo puede ser de cualquier tamaño). En Excel VBA, puede utilizar el siguiente bucle For Each para esto. Añadir las siguientes líneas de código:
For Each cell In rng Next cell
Nota: RNG y la célula se eligen al azar aquí, se puede usar cualquier nombre.
Recuerde hacer referencia a estos nombres en el resto de su código.
-
A continuación, se determina para cada celda en este rango de cuántas palabras contiene. Hacer caso omiso de una celda que contiene una fórmula, añada la siguiente línea de código para cada uno y entre siguiente (sólo si es falsa cell.HasFormula seguimos).
If Not cell.HasFormula Then End If
-
En primer lugar, se escribe el contenido de la celda con el contenido variable.
A continuación, quitar los espacios al principio y al final (si los hay). En Excel VBA, puede utilizar la función Recortar para esto. Por ejemplo, «Excel VBA» se convertirá en «Excel VBA». Añadir las siguientes líneas de código en su estado de cuenta Si.
content = cell.Value content = Trim(content)
Nota: la función de cortar en Excel VBA no quita espacios adicionales entre palabras, pero está bien en este ejemplo.
-
En este punto, una célula todavía puede estar vacío. Si la celda está vacía, se asigna el valor 0 a los cellWords variables. Si no es así, que contiene al menos una palabra y se le asigna el valor 1 a los cellWords variables. Añadir las siguientes líneas de código en su estado de cuenta Si.
If content = "" Then cellWords = 0 Else cellWords = 1 End If
Una celda puede contener más de una palabra, por supuesto. Eso es exactamente lo que queremos averiguar ahora. Como ejemplo tenemos: «Excel VBA». Si una celda contiene al menos un espacio en esta etapa, que contiene al menos una palabra más. Puede utilizar la función Instr en Excel VBA para buscar un espacio.
Instr (contenido, » «) encuentra la posición del primer espacio en el contenido.
-
Vamos a hacer uso de la estructura de bucle Do While. Código coloca entre estas palabras (en el paso 8, 9 y 10) se repite mientras la parte después Do Mientras que es cierto. Queremos repetir estos pasos, siempre y cuando Instr (contenido, » «)> 0 es verdadera (siempre y cuando el contenido contiene un espacio y por lo tanto más palabras). Añadir el bucle Do While en su estado de cuenta Si.
Do While InStr(content, " ") > 0 Loop
-
A continuación, tomamos la parte de contenido de partida en la posición del primer espacio. Utilizamos la función Mid para esto.
content = Mid(content, InStr(content, " "))
Por ejemplo: Mid ( «Excel VBA», InStr ( «Excel VBA», » «)) dará» VBA».
-
Nos ajustamos la cadena de nuevo.
content = Trim(content)
Resultado: «VBA»
-
cellWords Nos incremento de 1.
cellWords = cellWords + 1
Este bucle Do While se repetirá siempre y cuando el contenido contiene un espacio y por lo tanto más palabras. En nuestro ejemplo, salimos del bucle Do While ya que «VBA» no contiene un espacio más! Resultado: esta célula contiene 2 palabras.
-
Después de haber comprobado una célula, se añade a los cellWords totalWords variables. Esta línea de código debe ser colocado fuera del bucle Do While, pero en la sentencia if.
totalWords = totalWords + cellWords
Todo el proceso comienza de nuevo para la siguiente celda hasta que se hayan comprobado todas las células.
-
Por último, se muestra el valor de totalWords utilizando un MsgBox. Esta línea de código debe ser colocado fuera del bucle For Each Siguiente.
MsgBox totalWords & " words found in the selected range."
Prueba 13. el programa.
Resultado: