Funciones personalizadas de gran utilidad A continuación les presento una lista de funciones personalizadas que pueden ser de gran utilidad en el trabajo diario en Excel. 1. Extraer una palabra de una frase Función publicada por Javier Duckelman puedes ver el blog de Javier aqui Extraer la enésima palabra de una frase o cadena de texto dentro de las funciones incorporadas Excel ofrece la función incorporada “Extrae” la cual devuelve un texto de un largo determinado dentro de otra cadena de texto esta función tiene como argumentos la cadena de texto y la posición inicial y la posición final del texto a extraer. La función a continuación devuelve una palabra de un orden determinado dentro de una cadena de texto: Function extraer_palabra(frase As Range, palabra As Integer) Dim arrFrase As Variant arrFrase = Split(WorksheetFunction.Trim(frase), " ") extraer_palabra = arrFrase(palabra - 1) End Function 2. Extraer mas de una palabra de una frase Función publicada por Javier Duckelman puedes ver el blog de Javier aqui La función a continuación devuelve un número determinado de palabras a partir de la enésima palabra en una frase. El código de la función es: Function extraer_palabra2(frase As Range, palabra1 As Integer, cuantas As Integer) Dim arrFrase As Variant, iX As Long, temp arrFrase = Split(WorksheetFunction.Trim(frase), " ") extraer_palabra2 = arrFrase(palabra1 - 1) For iX = palabra1 + 1 To palabra1 + cuantas - 1 extraer_palabra2 = extraer_palabra2 & " " & arrFrase(iX - 1) Next iX End Function 3. Ubicar una palabra dentro de una frase Función que identifica si una palabra se encuentra en un texto, devuelve Verdadero / Falso Function Palabraexacta(Text As String, Word As String) As Boolean Palabraexacta = " " & UCase(Text) & " " Like "*[!A-Z]" & UCase(Word) & "[!A-Z]*" End Function 4. Escribir un numero de letras Función publicada por Adolfo Aparicio en la Web Excel Avanzado, por medio de esta función transforma un numero en letras: Public Function EnLetras(Valor, Optional ByVal Tipo As Byte = 1) As String 'funcion Principal ' If Not IsNumeric(Valor) Then EnLetras = "¡ La referencia no es valor o... 'excede' la precisión !!!": Exit Function End If: Dim Moneda As String, Fracs As String, Cents As Integer If Int(Abs(Valor)) = 1 Then Moneda = " nuevo sol" Else Moneda = " nuevos soles" If Right(Letras(Abs(Int(Valor))), 6) = "illón " Or _ Right(Letras(Abs(Int(Valor))), 8) = "illones " Then Moneda = "de" & Moneda Cents = Application.Round(Abs(Valor) - Int(Abs(Valor)), 2) * 100 If Cents = 1 Then Fracs = " centimo" Else Fracs = " centimos" If Cents = 0 Then Fracs = "" Else Fracs = " con " & Letras(Cents) & Fracs EnLetras = Letras(Int(Abs(Valor))) & Moneda & Fracs If Valor < 0 Then EnLetras = "menos " & EnLetras If Tipo = 2 Then EnLetras = UCase(EnLetras) ' TODO EN MAYUSCULAS ' If Tipo = 3 Then EnLetras = StrConv(EnLetras, vbProperCase) ' Todo Como Nombre Propio ' If Tipo = 4 Then EnLetras = UCase(Left(EnLetras, 1)) & Mid(EnLetras, 2) 'Primera letra en mayuscula SOLAMENTE ' EnLetras = EnLetras End Function Private Function Letras(Valor) As String ' Función Auxiliar [uso 'exclusivo'de la funcion 'principal'] ' Select Case Int(Valor) Case 0: Letras = "cero" Case 1: Letras = "un" Case 2: Letras = "dos" Case 3: Letras = "tres" Case 4: Letras = "cuatro" Case 5: Letras = "cinco" Case 6: Letras = "seis" Case 7: Letras = "siete" Case 8: Letras = "ocho" Case 9: Letras = "nueve" Case 10: Letras = "diez" Case 11: Letras = "once" Case 12: Letras = "doce" Case 13: Letras = "trece" Case 14: Letras = "catorce" Case 15: Letras = "quince" Case Is < 20: Letras = "dieci" & Letras(Valor - 10) Case 20: Letras = "veinte" Case Is < 30: Letras = "veinti" & Letras(Valor - 20) Case 30: Letras = "treinta" Case 40: Letras = "cuarenta" Case 50: Letras = "cincuenta" Case 60: Letras = "sesenta" Case 70: Letras = "setenta" Case 80: Letras = "ochenta" Case 90: Letras = "noventa" Case Is < 100: Letras = Letras(Int(Valor \ 10) * 10) & " y " & Letras(Valor Mod 10) Case 100: Letras = "cien" Case Is < 200: Letras = "ciento " & Letras(Valor - 100) Case 200, 300, 400, 600, 800: Letras = Letras(Int(Valor \ 100)) & "cientos" Case 500: Letras = "quinientos" Case 700: Letras = "setecientos" Case 900: Letras = "novecientos" Case Is < 1000: Letras = Letras(Int(Valor \ 100) * 100) & " " & Letras(Valor Mod 100) Case 1000: Letras = "mil" Case Is < 2000: Letras = "mil " & Letras(Valor Mod 1000) Case Is < 1000000: Letras = Letras(Int(Valor \ 1000)) & " mil" If Valor Mod 1000 Then Letras = Letras & " " & Letras(Valor Mod 1000) Case 1000000: Letras = "un millón " Case Is < 2000000: Letras = "un millón " & Letras(Valor Mod 1000000) Case Is < 1000000000000#: Letras = Letras(Int(Valor / 1000000)) & " millones " If (Valor - Int(Valor / 1000000) * 1000000) _ Then Letras = Letras & Letras(Valor - Int(Valor / 1000000) * 1000000) Case 1000000000000#: Letras = "un billón " Case Is < 2000000000000# Letras = "un billón " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#) Case Else: Letras = Letras(Int(Valor / 1000000000000#)) & " billones " If (Valor - Int(Valor / 1000000000000#) * 1000000000000#) _ Then Letras = Letras & " " & Letras(Valor - Int(Valor / 1000000000000#) * 1000000000000#) End Select