Saltar al contenido

¿Cómo puedo generar GUID en Excel?

Esta duda se puede solucionar de diversas formas, pero en este caso te enseñamos la que en nuestra opinión es la respuesta más completa.

Solución:

La siguiente expresión de Excel se evalúa como un GUID V4:

=CONCATENATE(DEC2HEX(RANDBETWEEN(0,4294967295),8),"-",DEC2HEX(RANDBETWEEN(0,6553‌​5),4),"-",DEC2HEX(RANDBETWEEN(16384,20479),4),"-",DEC2HEX(RANDBETWEEN(32768,49151‌​),4),"-",DEC2HEX(RANDBETWEEN(0,65535),4),DEC2HEX(RANDBETWEEN(0,4294967295),8))

-o (según la configuración regional/separadores decimales y de lista)-

=CONCATENATE(DEC2HEX(RANDBETWEEN(0;4294967295);8);"-";DEC2HEX(RANDBETWEEN(0;65535);4);"-";DEC2HEX(RANDBETWEEN(16384;20479);4);"-";DEC2HEX(RANDBETWEEN(32768;49151);4);"-";DEC2HEX(RANDBETWEEN(0;65535);4);DEC2HEX(RANDBETWEEN(0;4294967295);8))

Tenga en cuenta que el primer carácter del tercer grupo siempre es 4 para indicar un GUID/UUID V4 (número pseudoaleatorio generado) según RFC 4122, sección 4.4.

También tenga en cuenta que el primer carácter del cuarto grupo siempre está entre 8 y B según el mismo RFC.

Descargo de responsabilidad estándar: los GUID/UUID resultantes no son criptográficamente fuertes.

Usé la siguiente función en v.2013 excel vba para crear un GUID y funciona bien.

Public Function GetGUID() As String 
    GetGUID = Mid$(CreateObject("Scriptlet.TypeLib").GUID, 2, 36) 
End Function 

Sé que esta pregunta está respondida, pero creo que el código en cuestión debería parecerse a lo que hay en esta página: http://snipplr.com/view/37940/

No lo he probado, pero este código parece aprovechar la API de Windows para obtener sus GUID. Intentaría poner eso en un módulo público y escribir =GetGUId() en una celda de Excel para ver lo que obtendría. Si funciona en VB6, tiene muchas posibilidades de que también funcione en VBA:

Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type

Private Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As GUID) As Long

Public Function GetGUID() As String
'(c) 2000 Gus Molina

    Dim udtGUID As GUID

    If (CoCreateGuid(udtGUID) = 0) Then

        GetGUID = _
            String(8 - Len(Hex$(udtGUID.Data1)), "0") & Hex$(udtGUID.Data1) & _
            String(4 - Len(Hex$(udtGUID.Data2)), "0") & Hex$(udtGUID.Data2) & _
            String(4 - Len(Hex$(udtGUID.Data3)), "0") & Hex$(udtGUID.Data3) & _
            IIf((udtGUID.Data4(0) < &H10), "0", "") & Hex$(udtGUID.Data4(0)) & _
            IIf((udtGUID.Data4(1) < &H10), "0", "") & Hex$(udtGUID.Data4(1)) & _
            IIf((udtGUID.Data4(2) < &H10), "0", "") & Hex$(udtGUID.Data4(2)) & _
            IIf((udtGUID.Data4(3) < &H10), "0", "") & Hex$(udtGUID.Data4(3)) & _
            IIf((udtGUID.Data4(4) < &H10), "0", "") & Hex$(udtGUID.Data4(4)) & _
            IIf((udtGUID.Data4(5) < &H10), "0", "") & Hex$(udtGUID.Data4(5)) & _
            IIf((udtGUID.Data4(6) < &H10), "0", "") & Hex$(udtGUID.Data4(6)) & _
            IIf((udtGUID.Data4(7) < &H10), "0", "") & Hex$(udtGUID.Data4(7))
    End If

End Function

¡Gracias Gus Molina!

Si este código funciona (que no lo dudo), creo que obtendrá un nuevo conjunto de GUID cada vez que se evalúe la función, lo que significa que cada vez que se calcule la hoja, cuando esté guardando el libro de trabajo, por ejemplo. Asegúrese de copiar y pegar valores especiales si necesita los GUID para su uso posterior... lo cual es algo probable.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *