Como comparar una celda concreta de un Libro excel con todas las celdas de una fila de otro Libro Excel

Tengo el siguiente problema estoy creando un documento excel que me permite abrir mediante un botón y una macro otros documentos excel.

La idea es que Necesito Comparar la celda c4 de la segunda hoja, llamada "History_Foup" del excel que estoy creando que se llama "Foup Quota", la debo comparar con la todas las celdas de la Fila 4 del excel que haya decidido abrir a partir de la intentar c4, la página del excel abierto se llama "Foup_History".

Y lo más importante es que necesito un contador para saber cuantas iteraciones hace, para saber cuantas celdas ha recorrido.

2 respuestas

Respuesta
1

Tengo un par de dudas

Quieres buscar el dato en el libro abierto en la fila 4, es decir, ¿quieres qué busque el dato en la celda C4, D4, E4, F4, etc?

¿Quieres saber cuántas veces aparece el dato en la fila 4?

Si es correcto lo anterior, entonces pon la siguiente macro en tu libro origen.

La macro abre el explorador para que puedas seleccionar un archivo de excel, revisa que el archivo de excel abierto tenga una hoja con el nombre "Foup_History" y cuenta cuántas veces aparece el dato.

Sub Comparar_Celda()
'Por Dante Amor
    Application.ScreenUpdating = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("History_Foup")      'nombre hoja origen
    celda = h1.Range("C4").Value
    hoja = "Foup_History"                   'nombre de la hoja donde se realizará la búsqueda
    If celda = "" Then
        MsgBox "Captura un dato en la celda", vbExclamation
        Exit Sub
    End If
    '
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo de excel"
        .Filters.Clear
        .Filters.Add "Archivos excel", "*.xls*"
        .AllowMultiSelect = False
        .InitialFileName = l1.Path & "\"
        If .Show Then
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            existe = False
            For Each h2 In l2.Sheets
                If LCase(h2.Name) = LCase(hoja) Then
                    existe = True
                    Exit For
                End If
            Next
            If existe = False Then
                MsgBox "En el libro seleccionado, no existe la hoja : " & hoja, vbCritical
            Else
                'BUSCA EL DATO
                Set h2 = l2.Sheets(hoja)
                uc = h2.Cells(4, Columns.Count).End(xlToLeft).Column
                Set r = h2.Range(h2.Cells(4, "C"), h2.Cells(4, uc))
                cuenta = WorksheetFunction.CountIf(r, celda)
                MsgBox "Número de datos encontrados: " & cuenta
            End If
            l2.Close False
        End If
    End With
End Sub

Si necesitas otra información, entonces podrías poner una imagen de lo que tienes en tu libro origen y otra imagen de lo que tienes en un libro que abres; y cuál sería el resultado que esperas.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Hola Dante muchísimas gracias por la respuesta, Solo tengo que comprobar la 4 fila, y además se que solo va a haber una coincidencia por eso quiero una variable que me diga cuantas iteraciones ha realizado, quiero decir, si lo que buscamos es "_07AUG" que esta en la celda C4, y lo ha encontrado en la celda F4 del otro archivo, necesito saber que el valor de la variable que cuenta las iteraciones es 4, entiendes, ¿o lo explico de otro modo?

Estoy seguro de que van a existir las hojas con esos nombres en ambos archivos  no te preocupes por las comprobaciones con los nombres, ni crees if para ver si existen, unicamente es que no se como crear el bucle que vaya comparando celdas,  y me diga cuantas iteraciones ha recorrido, el bucle debe parar cuando encuentre que ambas casillas coinciden!

Si no ha quedado claro, te puedo mandar dos imágenes del archivo que yo tengo creado, y puedo inventar uno de como seria el caso al abrir otro nuevo, ¿lo prefieres?

¿Ya probaste la macro?

De hecho esto te pedí:

Si necesitas otra información, entonces podrías poner una imagen de lo que tienes en tu libro origen y otra imagen de lo que tienes en un libro que abres; y cuál sería el resultado que esperas.

Hola de nuevo, lo he probado pero me ha dado algún error, pero tampoco he tenido tiempo de mirarlo más detenidamente, te voy a adjuntar las fotos ahora pero hasta mañana no podre probar lo que me vuelvas a mandar, bueno el caso es, te adjunto la primera imagen. Dicha imagen es el archivo que yo estoy creando, en la página de upload es donde esta el botón mediante el cual tu seleccionas tu documento a subir. Si te fijas realmente son fechas, entonces si voy a subir un archivo y el ultimo se subió hace 1 semana la tabla tendrá 7 columnas más, debido a los 7 días. Por tanto lo que necesito es un bucle que me compare la celca c4 que es la que contiene ¨_07AUG¨ con las del nuevo documento que hemos abierto para saber cuantos días nuevos hay y así poder desplazar las columnas de mi tabla las mismas posiciones hacia la derecha y añadir las nuevas columnas de los nuevos días a mi documento!

Y esta seria la imagen del documento abierto mediante la macro de mi excel , hay nuevas columnas como puedes ver!

Pero no me pusiste qué esperas de resultado.

Como no pusiste qué quieres de resultado, voy a suponer lo que quieres, en la celda c4 tienes esto: "_07AUG",

Ese dato lo busco en el libro que vas a abrir y lo encuentra en la celda N4. ¿Correcto?

De la celda C a la N hay 11 columnas. Quieres que te aparezca un mensaje: diciendo existen 11 columnas.

Pero espero a que tengas tiempo y me explique lo que quieres.

Simplemente quiero que me guarde ese valor como un entero asociado a una variable para luego poder usarla cuando quiera correr las columnas para añadir lass nuevas, unicamente eso, quiero que cuente cuantas nuevas hay comparando con la mas reciente cargada, y que ese valor me lo guarde en una variable entera vale? 

Pero no me pusiste qué esperas de resultado.

Según tus imágenes cuál es el resultado. Un 11 o un 12 o qué?

Prueba con lo siguiente, el dato se almacena en variable

Sub Comparar_Celda()
'Por Dante Amor
    Application.ScreenUpdating = False
    Set l1 = ThisWorkbook
    Set h1 = l1.Sheets("History_Foup")      'nombre hoja origen
    celda = h1.Range("C4").Value
    hoja = "Foup_History"                   'nombre de la hoja donde se realizará la búsqueda
    If celda = "" Then
        MsgBox "Captura un dato en la celda", vbExclamation
        Exit Sub
    End If
    '
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Seleccione archivo de excel"
        .Filters.Clear
        .Filters.Add "Archivos excel", "*.xls*"
        .AllowMultiSelect = False
        .InitialFileName = l1.Path & "\"
        If .Show Then
            Set l2 = Workbooks.Open(.SelectedItems.Item(1))
            existe = False
            For Each h2 In l2.Sheets
                If LCase(h2.Name) = LCase(hoja) Then
                    existe = True
                    Exit For
                End If
            Next
            If existe = False Then
                MsgBox "En el libro seleccionado, no existe la hoja : " & hoja, vbCritical
            Else
                'BUSCA EL DATO
                Set h2 = l2.Sheets(hoja)
                uc = h2.Cells(4, Columns.Count).End(xlToLeft).Column
                'Set r = h2.Range(h2.Cells(4, "C"), h2.Cells(4, uc))
                cini = Columns("C").Column
                For i = cini To uc
                    If h2.Cells(4, i).Value = celda Then
                        cuenta = i
                        Exit For
                    End If
                Next
                'cuenta = WorksheetFunction.CountIf(r, celda)
                variable = cuenta - cini
                MsgBox "Número de columnas añadidas: " & variable
            End If
            l2.Close False
        End If
    End With
End Sub

IMPORTANTE:

Si la macro te envía un error debes decirme el mensaje de error y en qué línea de la macro se detiene. También si modificas la macro, debes decirme qué le cambiaste.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas