Copiar datos de una pestaña a otra con macro

No domino para nada las macros y necesito su ayuda, tengo un archivo con varias pestañas con igual formato y una pestaña más que llamaré "Total" donde pienso concentrar lo contenido en esas pestañas. Necesito copiar el texto de 2 columnas de cada pestaña en "Total" siempre y cuando cumplan una condición, es decir, si en una tercera columna aparece la letra "F" me ponga el contenido de esas 2 columnas en "Total" y si no es "F" que siga buscan hasta volver a encontrar la "F", pero quiero ir explorando cada una de las pestañas que en total son 9.
Cada pestaña tiene su propio nombre.

1 respuesta

Respuesta
1
Q+ Tuza,
Utiliza la fórmula =Sumar.si(a;b;c)
Esta fórmula la colocas en tu pestaña "Total"
El valor (a) se refiere a lo que se va a comparar en las nueve pestañas
el valor (b) es lo que se debe verificar; en ti caso es "F"
El valor (c) es lo que se va a sumar en las nueve pestañas
La fórmula la puedes poner en en un Código de VB (ALT+F11)
Menú Insertar - Módulo
Alli puedes pegar este código para que hagas pruebas. Te recomiendo que Abras un libro nuevo con cuatro pestañas (Para hacer las pruebas). Hoja1, Hoja2, Hoja3 y Total
En las hojas 1, 2 y 3 colocas letras en las columnas A (incluye la F) y números en las columnas B
En la Hota Total ejecutas la Macro
El código es este:
Sub MiSuma()
'
' MiSuma Macro
' Macro grabada el 25/08/2008 por Richard Chacón
' Funciona pulsando CTRL+i
Dim Pest1, Pest2, Pest3, Total
' ActiveCell.FormulaR1C1 = "=+VLOOKUP(RC[-1],Hoja1!RC[-1]:R[5]C,2)"
Pest1 = "=+SUMIF(Hoja1!a1:a6,""F"",Hoja1!b1:b6)"
Pest2 = "+SUMIF(Hoja2!a1:a6,""F"",Hoja2!b1:b6)"
Pest3 = "+SUMIF(Hoja3!a1:a6,""F"",Hoja3!b1:b6)"
Total = Pest1 + Pest2 + Pest3
Range("B1") = Total
End Sub

Me dices si necesitas más orientación...
Hola, muchas gracias por atender mi pregunta, pero no me expliqué bien y quiero mostrarte un poquito lo que necesito, espero me puedas ayudar, tengo 9 pestañas idénticas que contienen esta información distribuida en las columnas B, C y DE respectivamente:
                      QUESTION DESCRIPTION FINDINGS
¿Están los roles y resp bien definidos? Comentarios a esta pregunta F
¿Tu inf. está bien documentada? Comentarios a esta pregunta N
¿Calculaste bien tus estimados? Comentarios a esta pregunta F
Ahora, en una nueva pestaña, quiero concentrar las preguntas que tuvieron "F" en la columna DE pero de las 9 pestañas, a esta nueva pestaña la llamaré "Action" y ahí necesito copiar las 3 columnas de cada pestaña pero necesito una macro que recorra cada pestaña buscando las veces que la "F" aparece en cada pregunta, tengo pestañas que contienen 5 preguntas y otras que contienen 25, pero solo me sirven las que contestaron "F"
Espero haber sido un poquito más explicita y espero que me puedas apoyar, es para mi trabajo y te agradecería mucho tu orientación.
Saludos!
Acá te va una Macro para que la pegues en un Módulo de Visual Basic
1.- Pulsas ALT+F11
2.- Menú - Insertar - Módulo
Alli pegas este código de VB:
Sub MisEfes()
'
' Macro MisEfes' grabada el 26/08/2008 por Richard Chacón
' Para filtrar los FINDINGS que contengan la letra F

' y pasar los datos a la Hoja Action

Range("C2").Select
DeNuevo1:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Sheets("Hoja1").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo1
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo1
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja2").Select
Range("C2").Select
DeNuevo2:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Sheets("Hoja2").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo2
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo2
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja3").Select
Range("C2").Select
DeNuevo3:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Sheets("Hoja3").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo3
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo3
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja4").Select
Range("C2").Select
DeNuevo4:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Sheets("Hoja4").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo4
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo4
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja5").Select
Range("C2").Select
DeNuevo5:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Sheets("Hoja5").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo5
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo5
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja6").Select
Range("C2").Select
DeNuevo6:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Sheets("Hoja6").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo6
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo6
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja7").Select
Range("C2").Select
DeNuevo7:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Sheets("Hoja7").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo7
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo7
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja8").Select
Range("C2").Select
DeNuevo8:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Sheets("Hoja8").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo8
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo8
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja9").Select
Range("C2").Select
DeNuevo9:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste
Sheets("Hoja9").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo9
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo9
End If
Range("A1").Select
Worksheets("Action").Select
Range("C2").Select
End Sub

Un besote grandote...
Richard muchísimas gracias, disculpa la demora en contestar, lo que pasa es que hubo algunos detallitos que no permitían que la macro funcionara al 100%, y eso me entretuvo checando cada instrucción, me super ayudaste como no tienes una idea, ya hasta me volví a enamorar de la programación jajaja.
Quiero mostrarte las modificaciones que le hice al código que me mandaste por si en futuras ocasiones lo necesitas, trabajé con ejemplo de 3 hojas pegando las "F" en Action... en verdad gracias otra vez :-)
Saludos y un beso fuerte!
Sub MisEfes()
'
' Macro MisEfes grabada el 26/08/2008 por Richard Chacón
' Para filtrar los FINDINGS que contengan la letra F
' y pasar los datos a la Hoja Action
Dim x As Integer
x = 1
Worksheets("Hoja1").Select
Range("C2").Select
DeNuevo1:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Do
If Range("A" & Format(x)).Select <> "" Then
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Then
ActiveSheet.Paste
End If
End If
x = x + 1
Loop Until ActiveCell.Value <> ""
Sheets("Hoja1").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo1
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo1
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja2").Select
Range("C2").Select
DeNuevo2:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Do
If Range("A" & Format(x)).Select <> "" Then
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Then
ActiveSheet.Paste
End If
End If
x = x + 1
Loop Until ActiveCell.Value <> ""
Sheets("Hoja2").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo2
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo2
End If
Range("A1").Select
'Ahora con la siguiente hoja
Worksheets("Hoja3").Select
Range("C2").Select
DeNuevo3:
If ActiveCell.Value = "F" Then
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
Sheets("Action").Select
Range("A1").Select
Do
If Range("A" & Format(x)).Select <> "" Then
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Then
ActiveSheet.Paste
End If
End If
x = x + 1
Loop Until ActiveCell.Value <> ""
Sheets("Hoja3").Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.End(xlToRight).Select
GoTo DeNuevo3
ElseIf ActiveCell.Value <> "" Then
ActiveCell.Offset(1, 0).Range("A1").Select
GoTo DeNuevo3
End If
Range("A1").Select
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas