Hoja resumen de un libro excel

Tengo un libro de excel con bastantes hojas con la misma estructura, ya que son facturas, con nombres variados como puede ser 130, factura 131, etc..., lo que quiero que haga la macro es que en una hoja llamada resumen me ponga los datos que necesito para hacer un control

Es decir tengo la hoja1 con varios datos y quiero que esos datos me lo lleven a la hoja resumen con el formato que yo quiera, por ejemplo, lo que pone en hoja1 en celda c5, me lo copie como valor en la hoja resumen en la celda k5.

Como siempre muchas gracias por su ayuda

Respuesta
1

Para entender lo que necesitas, debes poner 3 imágenes.

En la imagen 1, debes mostrar lo que tienes en una de las hojas, por ejemplo de la hoja 130.

En esa imagen 1 deben verse claramente las filas y las columnas de excel, y por supuesto, deben verse claramente los datos que quieres copiar. Si son datos confidenciales, reemplázalos por datos genéricos.

En la imagen 2, debes mostrar lo que tienes en una de las hojas, por ejemplo de la hoja 131.

En esa imagen 1 deben verse claramente las filas y las columnas de excel, y por supuesto, deben verse claramente los datos que quieres copiar. Si son datos confidenciales, reemplázalos por datos genéricos.

En la imagen 3, debes mostrar la hoja resumen.

En esa imagen 3 deben verse claramente las filas y las columnas de excel.

En esa imagen 3 deben verse claramente los datos de las hojas 130 y 131.

Y debes explicar 5 datos, por ejemplo:

En la hoja 130 en dónde esta el dato1 y en la hoja resumen en dónde quieres el dato1.

En la hoja 130 en dónde esta el dato2 y en la hoja resumen en dónde quieres el dato2.

En la hoja 130 en dónde esta el dato3 y en la hoja resumen en dónde quieres el dato3.

En la hoja 130 en dónde esta el dato4 y en la hoja resumen en dónde quieres el dato4.

En la hoja 130 en dónde esta el dato5 y en la hoja resumen en dónde quieres el dato5.

Cada uno de esos 5 datos deberá verse claramente en las imágenes 1 y 3.

Buenas tardes,

adjunto documentación solicitada, espero que sea lo que necesita.

primera imagen ==> hoja 130 prueba 

segunda imagen ==> hoja 131

tercera imagen ==> hoja resumen

cuarta imagen ==> explicacion

Muchas gracias

Veo que en tu archivo tienes varias hojas. Para identificar si la hoja corresponde a una factura puse la siguiente condición:

If sh2.Range("B5").Value = "Número" Then

Si la hoja en la celda B5 tiene el texto "Número", entonces es una factura y la macro copia los datos.


Cada que ejecutes la macro, en automático la macro borra todos los registros en la hoja "resumen" desde la fila 2 y hacia abajo. Si no quieres borrar los registros entonces elimina de la macro esta línea:

Sh1.Rows("2:" & Rows. Count). ClearContents

Y si quieres que la macro empiece a poner los registros en la primer fila disponible, entonces cambia esta línea:

i = 2

Por esta:

i = sh1.Range("A" & Rows.Count).End(3).Row + 1

Prueba la siguiente macro:

Sub Resumen_Facturas()
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim i As Long, j As Long
  Dim cells1 As Variant, cells2 As Variant
  '
  Set sh1 = Sheets("resumen")
  cells1 = Array("B ", "C  ", "D  ", "E  ", "F ", "H  ", "I  ", "K  ", "M  ", "N  ", "S")
  cells2 = Array("C6", "C10", "C11", "C13", "C5", "F44", "E48", "F48", "G48", "H49", "H51")
  sh1.Rows("2:" & Rows.Count).ClearContents
  i = 2
  '
  For Each sh2 In Sheets
    If sh2.Range("B5").Value = "Número" Then
      For j = 0 To UBound(cells1)
        sh1.Range(Trim(cells1(j)) & i).Value = sh2.Range(cells2(j)).Value
      Next j
      i = i + 1
    End If
  Next sh2
End Sub

Buenas tardes,

ejecuto la macro, me borra los datos que hay en la hoja resumen, pero no me llevas los datos que necesito de las distintas hojas a la hoja resumen, deja los campos en esta hoja en blanco

Muchas gracias

Revisa que en cada hoja factura tengas esto:

Si la hoja en la celda B5 tiene el texto "Número", entonces es una factura y la macro copia los datos.

Lee mis notas que puse al inicio de mi respuesta.

¡Gracias!

Como siempre esta PERFECTO.

Ya vi el error, es que mi hoja ponía Número: y en la macro ponía Número, por eso daba el error.

Si pone en vez de Número: pone número: o numero: o NUMERO: ¿Qué pasa? Supongo que como no es igual no lo copia, ¿hay alguna manera para solucionar eso?, podría poner esto:

If sh2.Range("B5").Value = "Número:";"numero";"NUMERO" Then

Sr Amor cuando pones "B ","C "... pones espacios en blanco y cuando llegas a la ES pones "S" sin ningún espacio en blanco, ¿tiene algún significado el poner los espacios en blanco?

cells1 = Array("B ", "C  ", "D  ", "E  ", "F ", "H  ", "I  ", "K  ", "M  ", "N  ", "S")

Por ultimo, ¿seria mucho pedir que me pudieras poner que hace cada línea por si lo tengo que adaptar a otro archivo?

MUCHÍSIMAS GRACIAS POR TU AYUDA

Pone número: o numero: o NUMERO:

Sería conveniente que homologues tus facturas, para que todas tengan el mismo formato.

Cambia esta línea:

If sh2.Range("B5").Value = "Número" Then

Por esta:

If LCase(sh2.Range("B5").Value) = LCase("Número") Or LCase(sh2.Range("B5").Value) = LCase("Numero") Then

Con eso revisa mayúsculas, minúsculas y sin acento.



Cuando pones "B ","C "... pones espacios en blanco y cuando llegas a la ES pones "S" sin ningún espacio en blanco, ¿tiene algún significado

Solamente puse los espacios para mostrar cuál columna corresponde a cual celda. Más adelante la macro elimina esos espacios.



Que hace cada línea

Sub Resumen_Facturas()
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim i As Long, j As Long
  Dim cells1 As Variant, cells2 As Variant
  '
  Set sh1 = Sheets("resumen")
  cells1 = Array("B ", "C  ", "D  ", "E  ", "F ", "H  ", "I  ", "K  ", "M  ", "N  ", "S")
  cells2 = Array("C6", "C10", "C11", "C13", "C5", "F44", "E48", "F48", "G48", "H49", "H51")
  sh1.Rows("2:" & Rows.Count).ClearContents
  i = 2
  '
  'para cada hoja
  For Each sh2 In Sheets
    'revisa si es factura
    If LCase(sh2.Range("B5").Value) = LCase("Número") Or LCase(sh2.Range("B5").Value) = LCase("Numero") Then
      'para celda en el arreglo cells1
      For j = 0 To UBound(cells1)
        'pasa el valor de la celda a la columna.
        sh1.Range(Trim(cells1(j)) & i).Value = sh2.Range(cells2(j)).Value
      Next j
      i = i + 1
    End If
  Next sh2
End Sub

¡Gracias!

Muchísimas gracias como siempre

Se podría poner en la columna G de la hoja de resumen esta fórmula:

=(S3/H3)/100

Se podría poner en la columna T de la hoja de resumen esta formula:

=SI(H2+I2+K2+M2+N2-S2=0;"OK";"REVISAR FACTURA")

Buenos días,

Vistes la ultima pregunta que te hice, a lo mejor es que no se puede hacer lo que te pido.

Como siempre muchas gracias por tu ayuda

¿Quieres la fórmula o que la macro realice el cálculo y ponga el resultado?

Te recomiendo poner el resultado.

Si crees que es mejor el resultado, pues el resultado.

Si luego quiere poner alguna celda más lo puedo hacer en la macro ¿?

Muchas gracias de nuevo

"Si luego quiere poner alguna celda más lo puedo hacer en la macro"

¿A qué te refieres?

Buenos días

Me refiero que si tengo esta fórmula en la macro

SI(H2+I2+K2+M2+N2-S2=0;"OK";"REVISAR FACTURA")

luego puedo añadir por ejemplo esto

SI(ab2+ac2+ad2+ae2+H2+I2+K2+M2+N2-S2=0;"perfecto";"REVISAR FACTURA porque no cuadra")

Muchas gracias

No se si te llego la pregunta que enviee el ultimo día, estoy teniendo problemas con internet.

Muchas Gracias como siempre

Se podría poner en la columna G de la hoja de resumen esta fórmula:

=(S3/H3)/100

Se podría poner en la columna T de la hoja de resumen esta formula:

=SI(H2+I2+K2+M2+N2-S2=0;"OK";"REVISAR FACTURA")

Si crees que es mejor el resultado, pues el resultado.

Aquí la macro con los cambios:

Sub Resumen_Facturas()
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim i As Long, j As Long, res As String
  Dim cells1 As Variant, cells2 As Variant
  '
  Set sh1 = Sheets("resumen")
  cells1 = Array("B ", "C ", "D ", "E ", "F ", "H ", "I ", "K ", "M ", "N ", "S")
  cells2 = Array("C6", "C10", "C11", "C13", "C5", "F44", "E48", "F48", "G48", "H49", "H51")
  sh1.Rows("2:" & Rows.Count).ClearContents
  i = 2
  '
  'para cada hoja
  For Each sh2 In Sheets
    'revisa si es factura
    If LCase(sh2.Range("B5").Value) = LCase("Número") Or LCase(sh2.Range("B5").Value) = LCase("Numero") Then
      'para cada celda en el arreglo cells1
      For j = 0 To UBound(cells1)
        'pasa el valor de la celda a la columna.
        sh1.Range(Trim(cells1(j)) & i).Value = sh2.Range(cells2(j)).Value
      Next j
      sh1.Range("G" & i).Value = (sh1.Range("S" & i).Value / sh1.Range("H" & i).Value) / 100
      '
      If sh1.Range("H" & i).Value + sh1.Range("I" & i).Value + sh1.Range("K" & i).Value + _
         sh1.Range("M" & i).Value + sh1.Range("N" & i).Value - sh1.Range("S" & i).Value = 0 Then
        res = "OK"
      Else
        res = "Revisar Factura"
      End If
      sh1.Range("T" & i).Value = res
      i = i + 1
    End If
  Next sh2
End Sub


luego puedo añadir por ejemplo esto

SI(ab2+ac2+ad2+ae2+H2+I2+K2+M2+N2-S2=0;"perfecto";"REVISAR FACTURA porque no cuadra")

Claro que puedes añadir más celdas, solamente sigue la lógica de la suma en la macro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas