Macro que sume todos los registros de un Item de una hoja y dicha suma me la copie en la fila de ese item en otra hoja

Tengo 3 hojas.
Hoja 1: Visitas
Hoja 2: Cartera
Hoja 3: Clientes
En la hoja 1 en la celda C7 yo escribo un numero de referencia del Item.
La idea es ejecutar una macro que me busque TODOS los registros que coincidan con dicha referencia en la hoja 2. Para localizarlos debe buscar en toda la columna C de la hoja 2 desde la fila 3 hasta el final y cuando vaya encontrando esos registros, vaya tomando el valor de dicha fila y columna M y vaya acumulando esos valores hasta el final. Una vez termine de hacer esa operacion se dirija a la hoja 3 y busque el numero de referencia inicial en la columna C de la hoja 3 y una vez lo encuentre coloque en la columna T de dicha referencia localizada el valor total que se sumó en la anterior operacion y luego vuelva a localizarse en la hoja 1.

Respuesta
4

Prueba lo siguiente:

Sub sum_ref()
  Dim lr As Long, f As Range
  lr = Sheets("Cartera").Range("C" & Rows.Count).End(xlUp).Row
  Set f = Sheets("Clientes").Range("C:C").Find(Sheets("Visitas").Range("C7"), , xlValues, xlWhole)
  If Not f Is Nothing Then
    Sheets("Clientes").Cells(f.Row, "T").Value = Evaluate("=SUMIF(Cartera!C3:C" & lr & ",Visitas!C7,Cartera!M3:M" & lr & ")")
  End If
End Sub

Hola Dante. Probé la macro pero no hace ninguna acción. ¿Me podrías por favor regalar la explicación de cada línea para ver que hace cada línea de instrucción?

Sigue estos ejemplos:

Hoja Visitas:

Hoja Cartera:

Hoja Clientes:

Lo que hace la macro es una fórmula en la hoja clientes como esta:

=SUMAR.SI(Cartera!C3:C16,Visitas!C7,Cartera!M3:M16)

______________________

Puedes poner un ejemplo de cómo están tus datos en las 3 hojas y el resultado que esperas.

Como te puedes dar cuenta la columna C puede estar desordenada.

Igualmente en Clientes la columna C también esta desordenada.

La macro funciona con los datos que pusiste en tus imágenes. Tal vez hay algo en tus datos que no se aprecia con la imagen.

Puedes revisarlo en mi archivo de prueba. Descarga el siguiente archivo, va tu ejemplo con la macro. (No importa si los datos en la columna C están desordeandos)

https://www.dropbox.com/s/1k3x9d3546re9lj/visitas.xlsm?dl=0 

Hola Dante
Encontré el error pero no se es como solucionarlo a ver si me ayudas.
Por ejemplo me di cuenta que en la hoja visitas en la celda C7 coloco el numero ID ejemplo: "91272301" (sin comillas) y ejecuto la macro parece ser que ese numero tal cual es el buscado en la hoja CARTERA en la columna C pero veo que no lo encuentra a pesar de existir. Creo que es por el motivo que en la Hoja CARTERA y en la hoja CLIENTES ya ese numero se encuentra como tipo NUMERO con separador en miles y sin decimales. Creo que es por eso que la macro no se me esta ejecutando como deberia.

Revisa que en ambas hojas sea el mismo valor numérico, no importa el formato, pero debe ser número y no un texto.

Prueba copiando ese número y pégalo en la otra hoja, de esa manera te aseguras de que es le mismo.

1 respuesta más de otro experto

Respuesta
1

Puede compartir imagen de sus datos para hacer un ejemplo más preciso

Hoja Visitas

Hoja Cartera

Clientes

Veo que en la hoja Cartera algunos registros se repiten, supongo que si encuentra 1 o más registros se sumaran todos los que encuentre en la hoja Cartera. ¿Esta situación se repetirá de igual manera en todas las hojas?

Esta macro toma el primer registro de la Hoja Visitas y busca en la hoja cartera y clientes si encuentra los registros pone el resultado en la hoja Clientes Columna T. Esta macro considera que en la hoja Visitas y hoja Clientes son valores únicos es decir que no hay repetidos, en las hojas Cartera pueden haber repetidos. En teoría se supone que la hoja Clientes deberían ser valores únicos, si es así habrá que modificar la macro. Si explica un poco mas a detalle de sus datos para intentar brindar una solución precisa.

Sub suma()
ufVs = Sheets("Visitas").Range("C" & Rows.Count).End(xlUp).Row
ufCr = Sheets("Cartera").Range("C" & Rows.Count).End(xlUp).Row
ufCl = Sheets("Clientes").Range("C" & Rows.Count).End(xlUp).Row
    For i = 3 To ufVs
        idVs = Sheets("Visitas").Cells(i, 3)
        valorVs = Sheets("Visitas").Cells(i, 13)
        ufCr = Sheets("Cartera").Range("C" & Rows.Count).End(xlUp).Row
        valor2 = 0
        valor2 = valorVs
            For ii = 2 To ufCr
                If Sheets("Cartera").Cells(ii, 3) Like idVs Then
                    idCr = Sheets("Cartera").Cells(ii, 3)
                    valorCr = Sheets("Cartera").Cells(ii, 13)
                    valor2 = valor2 + valorCr
                End If
            Next ii
    ufCl = Sheets("Clientes").Range("C" & Rows.Count).End(xlUp).Row
        For iii = 2 To ufCl
            ValorCl = valor2
            If Sheets("Clientes").Cells(iii, 3) = idVs Then
                idCl = Sheets("Clientes").Cells(iii, 3)
                ValorCl = Sheets("Clientes").Cells(iii, 13)
                Sheets("Clientes").Cells(iii, 20).Value = valor2 + ValorCl
            End If
        Next iii
    Next i
End Sub

No funcionó. Aparece un error en la ejecución de la macro y se queda en esta fila

Puede compartir su archivo para corregirlo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas