Excel: encontrar hipervínculos coincidentes

0

Después de pasar un tiempo buscando en la red una respuesta sin éxito, esta es mi pregunta:

Tengo dos libros de trabajo, llamémoslos 'perfiles' y 'resultados'.

En 'perfiles' tengo una hoja que tiene hipervínculos en A3 a A2000. Los nombres aparecen en estas celdas, como 'Jim', 'Dave', 'Anne', etc. Los hipervínculos subyacentes difieren solo por la identificación de un nombre en particular, como 'www.destinationwebsite.com/nameID'. nameID es diferente en cada caso.

En 'resultados' tengo una hoja y una sola instancia de cualquiera de estos nombres / hipervínculos podría aparecer en cualquier lugar de C3 a Cx.

En este momento solo estoy haciendo una comparación básica entre los nombres en los dos libros de trabajo, y esto funciona informándome si el nombre en 'perfiles' está en 'resultados'. Sin embargo, si hay dos o más resultados de 'Jim' en '(con diferentes ID), entonces no funciona. La única forma de evitar esto es verificar los hipervínculos coincidentes ('nameID') para asegurarse de que estoy haciendo referencia al 'Jim' correcto.

Después de pasar un tiempo en esto, tuve que admitir la derrota; seguramente hacer algo tan básico debería ser fácil de hacer en Excel.

Cualquier ayuda sería apreciada para superar este obstáculo.

Znook
fuente
La hoja de resultados tiene el mismo formato: ¿un nombre con un hipervínculo adjunto? Y quieres ... ¿comprobar si faltan? Eliminar duplicados? ¿Y cómo se crearon los hipervínculos? No vas a poder hacer esto con una fórmula simple, no creo.
Raystafarian
Si, mismo formato. La hoja de trabajo de perfil contiene los nombres de casi 2000 personas en las celdas A3 a A2000. Cada una de estas celdas es un hipervínculo, cada URL es diferente debido al 'nombreID'. Estas celdas nunca cambian, pueden insertarse nuevas si una nueva persona necesita agregarse. Lo que estoy buscando hacer es poner una fórmula en la celda B3 que verifique la hoja de trabajo de resultados en otro libro de trabajo para encontrar coincidencias con el hipervínculo en A3. Si hay una coincidencia, devuelve verdadero, falso si no lo es.
Znook
Esto necesitará VBA: trabajar con direcciones de hipervínculos es bastante difícil con VBA, ni siquiera sé si es posible hacerlo con una fórmula que no sea crear un hipervínculo.
Raystafarian

Respuestas:

0

Esto debería funcionar

Sub CheckLinks()
Dim WBprofiles As Workbook
Set WBprofiles = ThisWorkbook
Dim WBresults As Workbook
Set WBresults = Workbooks.Open("C:\Users\path\to\results.xlsx")

Dim WSprofiles As Worksheet
Set WSprofiles = WBprofiles.Sheets("profiles")
Dim WSresults As Worksheet
Set WSresults = WBresults.Sheets("results")

Dim DictResults As Object
Set DictResults = CreateObject("Scripting.Dictionary")

Dim lastrow As Integer
lastrow = WSresults.Cells(Rows.Count, "A").End(xlUp).Row

Dim strKey As String
For d = 1 To lastrow
    strKey = Cells(d, 1).Hyperlinks(1).Address
    DictResults(strKey) = 1
Next

Dim vResult() As Variant
ReDim vResult(DictResults.Count - 1, 1)
Dim x As Integer

For Each Key In DictResults.keys
    vResult(x, 0) = Key
    x = x + 1
Next

lastrow = WSprofiles.Cells(Rows.Count, "A").End(xlUp).Row
Dim strLoc As String
Dim i As Integer
For Each link In WSprofiles.Range("A1:A" & lastrow).Hyperlinks
    strLoc = link.Address
    For i = LBound(vResult) To UBound(vResult)
        If vResult(i, 0) = strLoc Then
            link.Range.Offset(, 1) = "Found"
        End If
    Next
Next

End Sub
Raystafarian
fuente
Gracias Raystafarian por tomarse el tiempo para hacer esto, lo intentaré mañana y veré qué pasa.
Znook
Esto usa un diccionario para evitar duplicados, si no hay duplicados, no hay necesidad del diccionario. No sé por qué pensé que había duplicados.
Raystafarian