La función ID.REGISTRO en Excel es una función avanzada, perteneciente al antiguo lenguaje de macros de Excel 4.0 (XLM), que se utiliza para obtener el número de identificación de registro de una función específica dentro de una biblioteca de vínculos dinámicos (DLL) o un recurso de código. Este ID es necesario para poder llamar a dicha función externa utilizando la función LLAMAR.
Es una función heredada, principalmente por compatibilidad con hojas de cálculo antiguas. En versiones modernas de Excel, la interacción con bibliotecas externas se gestiona de forma más robusta y segura a través de Visual Basic para Aplicaciones (VBA) con la instrucción Declare.
Sintaxis
=ID.REGISTRO(módulo; procedimiento; [tipo_argumento])
La función ID.REGISTRO utiliza los siguientes argumentos:
- módulo: El nombre de la biblioteca de vínculos dinámicos (DLL) que contiene la función que se desea utilizar. Se debe proporcionar como una cadena de texto. Obligatorio.
 - procedimiento: El nombre de la función dentro de la DLL que se quiere registrar. También se proporciona como una cadena de texto. Obligatorio.
 - tipo_argumento: Una cadena de texto opcional que especifica los tipos de datos de todos los argumentos de la función, incluyendo el tipo de valor que devuelve. Cada tipo se representa con una letra. Opcional.
 
El primer carácter del tipo_argumento corresponde al tipo de dato que devuelve la función. El resto de caracteres corresponden a los tipos de datos de cada uno de los argumentos que la función del DLL necesita. Por ejemplo, "JJB" indica que la función devuelve un entero (J), y acepta dos argumentos: un entero (J) y un número de punto flotante (B).
Ejemplos
Ejemplo 1: Registrar una función simple sin argumentos
Supongamos que queremos registrar la función GetActiveWindow de la librería user32.dll de Windows. Esta función no toma argumentos y devuelve un identificador (un número entero) de la ventana activa.
=ID.REGISTRO("user32.dll"; "GetActiveWindow"; "J")
Esta fórmula devolverá un número único que es el ID de registro para la función GetActiveWindow. Este ID puede ser usado posteriormente por la función LLAMAR para ejecutarla y obtener el identificador de la ventana activa.
Ejemplo 2: Registrar una función con argumentos
Imaginemos que queremos registrar la función MessageBoxA de user32.dll para mostrar un cuadro de mensaje. Esta función toma varios argumentos, como el identificador de la ventana, el texto del mensaje, el título y el tipo de cuadro de mensaje.
Su sintaxis en C++ es: int MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);. Esto se traduce en cuatro argumentos numéricos (los punteros a texto se pasan como números en este contexto).
=ID.REGISTRO("user32.dll"; "MessageBoxA"; "JJCCJ")
En este caso, "JJCCJ" especifica que:
- El primer 
Jindica que la función devuelve un entero. - El segundo 
Jes para el primer argumento (hWnd). - Los dos 
Cson para los argumentos de texto (lpTextylpCaption). - El último 
Jes para el argumento final (uType). 
Una vez obtenido el ID, se podría usar LLAMAR para mostrar un mensaje, por ejemplo: =LLAMAR(id_registro; 0; "Hola Mundo"; "Título"; 0).
Observaciones
ID.REGISTRO es una función que opera a bajo nivel y su uso incorrecto puede causar inestabilidad en Excel o incluso bloquear la aplicación. Es fundamental conocer la firma exacta de la función DLL que se está registrando, incluyendo los tipos de datos de sus argumentos y del valor devuelto.
Esta función no se puede usar en una celda de una hoja de cálculo por sí sola para obtener un resultado final útil; su propósito es obtener un identificador para ser usado por otras funciones de macro XLM como LLAMAR. Además, es necesario usar ANULAR.REGISTRO para liberar el recurso cuando ya no se necesite.
Errores comunes
- #¡VALOR!: Ocurre si uno de los argumentos no es válido. Por ejemplo, si el nombre del módulo o del procedimiento es incorrecto, la DLL no se puede encontrar, la función no existe en esa DLL, o el texto de 
tipo_argumentoes inválido. - #N/A: Puede ocurrir si Excel no puede registrar la función por alguna razón, como falta de memoria o problemas de permisos.
 
Disponibilidad por versión de Excel
Esta función ha estado disponible desde versiones muy antiguas de Excel (Excel 4.0) como parte del conjunto de funciones de macro (XLM). Sigue estando presente en las versiones modernas de Excel, incluyendo Microsoft 365, principalmente para garantizar la compatibilidad con archivos más antiguos que utilizan macros XLM.
Compatibilidad
| Software | Compatibilidad | Notas | Alternativa | 
|---|---|---|---|
| Microsoft Excel | ✔️ | Funciona en todas las versiones, pero es una tecnología heredada. | Uso de la instrucción Declare en VBA. | 
| Google Sheets | ❌ | No es compatible con macros XLM ni tiene acceso directo a DLLs locales. | Google Apps Script para interactuar con APIs externas. | 
| LibreOffice Calc | ❌ | No soporta esta función. | Uso de macros en LibreOffice Basic. | 
| OpenOffice Calc | ❌ | No soporta esta función. | Uso de macros en OpenOffice Basic. | 
| WPS Office Spreadsheets | ❌ | No confirmado, pero es altamente improbable que soporte funciones de macro XLM. | Uso de macros VBA (si la compatibilidad es completa). | 
| Apple Numbers | ❌ | No dispone de un sistema de macros equivalente a XLM o VBA. | AppleScript para la automatización del sistema. | 
Funciones Relacionadas
- LLAMAR: Utiliza el ID devuelto por ID.REGISTRO para ejecutar la función externa desde la DLL.
 - ANULAR.REGISTRO: Libera el ID de registro de una función previamente registrada, liberando memoria y recursos. Es la función opuesta a ID.REGISTRO.
 
