Contar las sílabas de una celda

Contar sílabas en una celda de Calc

¿Cuántas sílabas contiene la palabra o frase escrita en una celda? Más o menos es lo que ha solicitado el usuario quan en el Foro Oficial en Español.

Escapando de los tecnicismos, hemos querido suponer que una sílaba se define por la existencia de una vocal, acompañada o no de consonantes. Así, la palabra Hola tiene dos sílabas, pues tiene dos vocales.

Existen a veces agrupaciones de dos o tres vocales (diptongos y triptongos) que cuando se presentan solo se cuenta como una sílaba. Por ejemplo, Huerto, contiene el diptongo ue, y por tanto, la palabra la forman dos sílabas. Huésped no forma diptongo, por lo que la palabra está formada por tres sílabas.

¿Podemos entonces contar las sílabas que contiene una celda de Calc conociendo estos datos? La respuesta nos la da la siguiente macro, con la que hemos creado una función definida por el usuario (UDF)

El libro de OpenOffice Calc que puedes descargar al final de este tema contiene una UDF que nos permite calcular el número de sílabas que contiene una celda cualquiera de nuestra hoja de cálculo.

Siempre que la macro sea visible para Calc (para lo cual además de en el documento es aconsejable copiarla al contenedor Mis macros como aconsejamos en el artículo enlazado), con insertar la fórmula =CUENTASILABAS( ReferenciaACelda ) bastará para obtener el resultado deseado.

Esta es la macro que hemos creado. Esperamos vuestros comentarios para mejorarla. La macro también es válida para LibreOffice Calc.

 

Function CuentaSilabas( cCelda As String ) As Long
Dim cVocales As String, cConsonantes As String, c As String
Dim n As Long, cTexto as String
Dim aDipTriptongos(), aDescartar()

On Local Error GoTo error_CuentaSilabas

cTexto = LCase(cStr(cCelda))

' diptongos y triptongos se cuentan como una sola sílaba
aDipTriptongos() = array("iau", "iai", "uai", "uau", "ieu",_
"iei", "uei", "ueu", "iou", "ioi", "uoi", "uou", "ai","au",_
"ei","eu","oi","ou","ia","ie","io","iu","ua","ue","ui","uo")

For n=0 To UBound(aDipTriptongos())
cTexto = Replace(cTexto, aDipTriptongos(n), "â") ' reemplazo el diptongo-triptongo por una vocal que no existe en castellano
cTexto = Replace(cTexto, aDipTriptongos(n), "â") ' replace sólo reemplaza uno. Por si hay más
cTexto = Replace(cTexto, aDipTriptongos(n), "â") ' ídem
Next

' palabras o claves a descartar
aDescartar = array( "#-", "#+", "#shit" )

For n=0 To UBound(aDescartar())
cTexto = Replace(cTexto, aDescartar(n), "") ' elimino lo que descarto
cTexto = Replace(cTexto, aDescartar(n), "") ' replace sólo reemplaza uno. Por si hay más
cTexto = Replace(cTexto, aDescartar(n), "") ' ídem
Next   

cVocales=""
cConsonantes=""
For n=1 To Len(cTexto)
c = Mid(cTexto,n,1)
Select Case c
Case "@","#","+","-","¡"
' descartamos estos carácteres
Case "a","e","i","o","u","á","é","í","ó","ú","â" ' incluye la que representa al diptongo
cVocales=cVocales & c
Case Else
' cConsonantes = cConsonantes & c
End Select
Next

CuentaSilabas=Len(cVocales)

On Local Error GoTo 0
Exit Function

error_CuentaSilabas:
CuentaSilabas = "#Error:CuentaSilabas#"

End Function

 

La macro sustituye diptongos y triptongos por una letra que no existe en el alfabeto castellano (la â) ; elimina determinadas claves que pueda contener la celda y que se enumeran en el array aDescartar. Finalmente, cuenta el número de vocales existentes en la celda, incluyendo los diptongos y triptongos sustituidos. Ese valor es el que devuelve a la celda donde escribimos la fórmula.

Esperamos que con esta solución, quan (y quien lo necesite) se sienta un poco menos apurado.

 

Descargar libro de calc Contar-sílabas.ods

2 comentarios

Comentario De: Marco Damián [Visitante]

Por alguna razón no cuenta la "y" como una sílaba. ¿Qué podríamos hacer?

¡Mil gracias por el código!

Comentario De: Marco [Visitante]

Hola, se puede exportar a Excel esta función?
Como puedo hacerlo?
Gracias

17.12.21 @ 21:37 Reply to this comment


Form is loading...