1 de octubre de 2008

Resultado inesperado

Cuando ingresamos una función sin argumentos ni paréntesis (por ejemplo, "=PROMEDIO"), al aceptarla, Excel nos devolverá el error #¿NOMBRE?, ya que interpreta que quisimos introducir un nombre, el cual no está definido.

¿O no?

Hace poco, estuve trabajando en un modelo con fechas en Excel. Como necesitaba calcular el número de días hábiles entre dos fechas, me dispuse a utilizar la función DIAS.LAB. Sin embargo, al comenzar a escribir la fórmula, presioné (accidentalmente) Enter justo después de escribir el nombre de la función (es decir "=DIAS.LAB", Enter). Inesperadamente Excel devolvió:

840368184

De dónde viene este número, a qué se refiere o por qué se obtiene precisamente este número y no otro, es algo que ignoro completamente. Como este comportamiento fue completamente inesperado, quise reproducirlo en otros equipos. Mismo resultado. Me pregunté también si esto ocurriría con otras funciones, así que ingresé =SUMA, =MIN, =DESREF, =DERECHA, =EXTRAE, entre otras. En todos estos casos obtuve el resultado esperado #¿NOMBRE?. Sin embargo, al probar con =CONVERTIR Excel devolvió:

638844971.

Otros resultados fueron:

=DIA.LAB devuelve 1679294519

=FRAC.AÑO devuelve 734789689

Incluso hay resultados negativos. =NUM.DE.SEMANA devuelve -601489317.

Concluí que esto es un comportamiento exclusivo de las funciones del complemento Herramientas para análisis (para una lista completa de sus funciones y resultados, clic aquí).

Al continuar con esta "experimentación", probé ahora con funciones de otros complementos que he descargado de la red. Por ejemplo, con =COUNTDIFF obtuve: 1769668796. Similar comportamiento observé con el resto de las funciones de mis complementos. Posteriormente, traté con algunas funciones personalizadas. En todos los casos el resultado fue #¿NOMBRE?. Así pues, tuve que modificar mi teoría original: Este comportamiento ocurre con cualquier función perteneciente a cualquier complemento (Herramientas para análisis o cualquier otro). No ocurre con funciones nativas de Excel ni con funciones definidas por el usuario (FDU o UDF).

Dado que todo esto me pareció muy extraño, envié un correo a John Walkenbach sobre esto. Este fue mi mensaje original:

Hi John:

I entered this “formula”:

=CONVERT

Notice that I didn’t put the parenthesis. The cell shows:

638844971

That happens only whit add-in’s functions. With any other Excel built-in function we get #NAME?

Other examples:

=NETWORKDAYS produces 840368184

=WEEKNUM, -601489317

=UNIQUEVALUES, -1451032386

=WORKDAY, 1679294519

Always the syntax =[add-in function] (no parenthesis)

I think this is kind of an oddity. Or, if you may explain me where those numbers came from…

Thank you.

Esta fue su respuesta:


That's pretty strange. It doesn't happen in Excel 2007 because the ATP functions are now built-in.

I have Excel 2003 installed, but I didn't install the ATP. I'll see if I can find the original CD and install the ATP to check it out.

Regards,
John


Si algún lector tiene idea de por qué se producen estos números misteriosos, por favor háganoslo saber. Entre tanto, veré que obtengo de las distintas discusiones que surjan sobre esto para comentarlo aquí.

2 comentarios:

  1. Hola, me hago llamar ckarlanga, y navegando por los foros di con esta info que me pareció bastante curiosa y sobre todo que alguien la mencionara, siendo un curioso del excel, estuve tratando de abrir la funcion de distribución normal, para ello intenté dar con el complemento que en excel lo contenía y me di la lata de abrir uno por uno los complementos, y por ahí di con el paquete que contiene atpvbes.xla atpvben.xla analisys32.xll funcres.xla y procdb.xla, les saque las claves a estos archivos y en los ATP tanto español como ingles, se encuentra la funcion networkdays y dias.lab, este es el codigo



    Function Networkdays(start_date As Variant, end_date As Variant, Optional holidays As Variant) As Variant
    Networkdays = Application.Run(GetMacroRegId("NETWORKDAYS"), start_date, end_date, holidays)
    End Function


    cuando uno ejecuta esa function desde el excel va a esta funcion que ejecuta una funcion base para todas las creadas dentro de este paquete llamada GetMacroRegId

    esta a su vez, si logras convertir el archivo xla a xls, tiene una descripcion de cada una de las funciones hechas dentro del xla


    Private Function GetMacroRegId(FuncText As String) As String
    Debug.Print ("[GetMacroRegId] '" & FuncText & "' <")
    For i = LBound(FunctionIDs) To UBound(FunctionIDs)
    If (LCase(FunctionIDs(i, 0)) = LCase(FuncText)) Then
    If (Not (IsError(FunctionIDs(i, 1)))) Then
    GetMacroRegId = FunctionIDs(i, 1)
    Debug.Print ("[GetMacroRegId] '" & FuncText & "' -> '" & GetMacroRegId & "' >")
    Exit Function
    End If
    End If
    Next i
    Debug.Print ("[GetMacroRegId] Error while finding '" & FuncText & "' >")
    End Function



    dentro del xla covertido a xls tienes esto ...

    Function table
    Labels VBAname Module Procedure Type text Function text Argument text Macro type Category Shortcut text Help topic Help text Arg1 Arg2 Arg3
    HEX2DEC Hex2Dec hex2dec PP# HEX.A.DEC número 1 Ingeniería xlmain10.chm!1929 Convierte un número hexadecimal en decimal es el número hexadecimal que desea convertir

    (encabezados)

    y estos son los datos

    NETWORKDAYS Networkdays networkdays PPPP# DIAS.LAB fecha_inicial;fecha_final;festivos 1 Fecha y hora xlmain10.chm!1963 Devuelve el número total de días laborables entre dos fechas es un número de serie que representa la fecha inicial es un número de serie que representa la fecha final


    el codigo al que haces referencia 840368184, es el id de la macro que tiene adentro la formula de calculo de los dias habiles, apenas tenga una respuesta especifica dentro de que archivo se encuentra ( lo mas probable un dll) te lo informo...


    un saludo...


    perdona lo enredado de la respuestas... pero a esta hora no pienso más...

    ResponderEliminar
  2. Gracias por el aporte. Puedes consultar mi lista de resultados obtenidos en la nota:

    http://lqrexceltotal.blogspot.com/2008/10/lista-de-funciones.html

    Saludos.

    ResponderEliminar

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Excel, Excel 2003, Excel 2007 y el logo XL son marcas registradas de Microsoft Corporation.