Copiar la misma celda de varias pestañas
Resuelto
dyueo
Mensajes publicados
5
Fecha de registro
Estado
Miembro
-
Groquick Mensajes publicados 17 Estado Miembro -
Groquick Mensajes publicados 17 Estado Miembro -
Hola,
Aquí tienes una respuesta que no he encontrado en los diferentes foros que he visitado.
Tengo 98 pestañas (97 + 1 pestaña resumen)
Quiero que la hoja resumen muestre las 97 celdas R6 (ubicadas en las 97 pestañas)
No importa cómo se muestren estas 97 celdas R6 (en una misma fila o en una misma columna)
No puedo hacer manualmente 97 copias/pegados (además tengo 6 archivos más que tratar con el mismo problema)
Hacer una fórmula simple del tipo A1=Hoja2!R6, A2=Hoja3!R6 es imposible dado que los nombres de las pestañas son muy diferentes.
Gracias
Aquí tienes una respuesta que no he encontrado en los diferentes foros que he visitado.
Tengo 98 pestañas (97 + 1 pestaña resumen)
Quiero que la hoja resumen muestre las 97 celdas R6 (ubicadas en las 97 pestañas)
No importa cómo se muestren estas 97 celdas R6 (en una misma fila o en una misma columna)
No puedo hacer manualmente 97 copias/pegados (además tengo 6 archivos más que tratar con el mismo problema)
Hacer una fórmula simple del tipo A1=Hoja2!R6, A2=Hoja3!R6 es imposible dado que los nombres de las pestañas son muy diferentes.
Gracias
Configuración: Windows XP Internet Explorer 7.0
6 respuestas
-
Hola,
Una pequeña sub que podría hacerte eso...Sub RappelR6() Dim Lig As Long, Col As Integer Dim Wk As Worksheet Lig = 2 'Primera línea donde copiar Col = 5 'Columna donde copiar For Each Wk In Worksheets If Wk.Name <> "récap" Then Sheets("Récap").Cells(Lig, Col) = Wk.Range("R6") Lig = Lig + 1 End If Next Wk End Sub
¡Hasta luego!
--
La experiencia instruye más seguro que el consejo. (André Gide)
Si te das un golpe con una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio) -
Hola.
La fórmula es en efecto muy simple: A1=SUMA(Hoja1:Hoja97!R6)
Sin embargo, tengo una duda, ya que no entendí lo que querías decir con "No importa la manera en que se muestren estas 97 celdas R6 (en una misma fila o en una misma columna)"!
La fórmula solo funciona si en cada una de las 98 pestañas se suma el valor de la celda R26...
--
¡Bien, la jubilación! Especialmente en las Antillas... :-)
☻ Raymond ♂-
Gracias por la respuesta, pero no se corresponde con lo que estoy buscando. Explico (mejor) ;-)
De hecho, esta celda contiene texto.
Está (en 197 pestañas) llena de nombres diversos.
Quiero mostrar los 197 nombres en una hoja resumen (de ahí el "en una misma línea o en una misma columna")
No queriendo hacer 197 copiar/pegar, pregunto si existe una fórmula, una macro... que permita copiar 197 veces la celda R6 de las 197 pestañas y mostrar todo en una sola página.
-
-
¡Ah! No había entendido nada...
Quizás haya una solución que utilice la función DESREF; pero necesitarías más bien una macro; y lamentablemente eso excede mis capacidades...
¡Otros miembros del foro estarán encantados de ayudarte, no te preocupes!
--
¡Es genial, la jubilación! Sobre todo en las Antillas... :-)
☻ Raymond ♂ -
Gracias Raymond y un gran agradecimiento a lermite222, ¡ya que la macro funciona más que bien!
-
Hola,
Introducción
Primero me presento, Técnico-comercial, me siento más cómodo con el teléfono y temas de mecánica que con las macros, a menos que estén en la barbacoa acompañadas de Vino Verde (para los más lusitanos entre nosotros).
Así que: para hacer una macro, donde inicio la grabación de lo que hago para repetirlo después: Check.
Pero hacer una macro donde hay programación pura y dura... todavía no lo domino... seamos honestos: ¡para nada!
He intentado buscar un foro donde alguien tuviera exactamente mi problema... pero no he logrado encontrarlo. He tratado de improvisar con las diferentes respuestas, pero entre los bucles, All Worksheet y la sintaxis... es un poco (mucho, (apasionadamente), locamente) difícil y no muy intuitivo. He intentado ver lo que ofrecen los cursos en línea de macros, pero hay que hacer todo un curso, seguramente muy interesante, pero me llevaría 3 semanas reunir todas las competencias para realizar mi macro. ¡Y esta mañana, me encuentro con este mensaje! Es prácticamente lo que quiero... pero... pero no del todo...
Entonces déjenme presentarles mi:
Problemática:
Tengo un libro con X pestañas:
las Y (=10) primeras no me interesan aquí,
Las diferentes pestañas Z siguientes, están dedicadas a cada uno de mis clientes. Por supuesto, cada pestaña lleva el nombre del cliente correspondiente. No se llama Z1, luego Z2, luego Z3, etc.
En la pestaña A -nombrada: "To Do Clients" y directamente después de las pestañas de clientes (Z)- quisiera compilar el contenido de ciertas celdas de las diferentes pestañas Z (ver § "objetivo" abajo)
La pestaña B -nombrada: "To Do prospect" y directamente después de la pestaña A- es donde compilo la información de mis prospectos. La macro fue creada utilizando la función "grabadora" de macros de Excel.
Nota que ni A ni B devuelven resultados para las celdas cuando buscamos los valores en todas las pestañas.
Objetivo:
En la pestaña A, comenzando desde la celda A2, me gustaría que la macro copie los resultados de 3 celdas de cada una de las pestañas Z.
A2 para el primer valor del primer cliente, B2 para el segundo valor del primer cliente, y C2 para el tercer valor del primer cliente.
Luego A3 para el primer valor del segundo cliente, B3, etc.
Para simplificar la macro y partir de la de Lermite222, he copiado para todas las pestañas.
Luego, elimino las filas 2 a 11 para retirar la información devuelta por las Y primeras pestañas.
Las celdas a devolver son respectivamente: I3, B1, J3.
Límites de mis competencias:
Primero, no sé nada y ese es mi mayor problema.
Además, el código de lermite222 es lo más cercano que he encontrado.
Así que he improvisado a partir de eso:
"""""""""""""""
Sub RappelR6()
Dim Lig As Long, Col As Integer
Dim Wk As Worksheet
Lig = 2 'Primera fila donde copiar
Col = 1 'Columna donde copiar
For Each Wk In Worksheets
If Wk.Name <> "To Do Clients" Then
Sheets("To Do Clients").Cells(Lig, Col) = Wk.Range("I3")
Lig = Lig + 1
End If
Next Wk
Rows("2:11").Select
Range("A11").Activate
Selection.ClearContents
Selection.Delete Shift:=xlUp
Range("A2:C2001").Select
ActiveWorkbook.Worksheets("To Do Clients").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("To Do Clients").Sort.SortFields.Add Key:=Range( _
"A2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("To Do Clients").Sort
.SetRange Range("A3:A61")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
"""""""""""""""
y mi fe es que está bien... pero necesitaría hacer 3 macros para I3, B1 y J3. Pero entonces, perdería mi orden por fecha...
Así que, como un candidato de un reality show que cree haber alcanzado el star system porque ha hecho la portada de un podio, he intentado:
""""""""""""""
Sub RappelR6()
Dim Lig As Long, Col As Integer
Dim Wk As Worksheet
Lig = 2 'Primera fila donde copiar
Col = 1 'Columna donde copiar
For Each Wk In Worksheets
If Wk.Name <> "To Do Clients" Then
Sheets("To Do Clients").Cells(Lig, Col) = Wk.Range("I3")
Lig = Lig + 1
End If
Next Wk
Dim Lig As Long, Col As Integer
(...)
Lig = 2 'Primera fila donde copiar
Col = 2 'Columna donde copiar
(...)
Sheets("To Do Clients").Cells(Lig, Col) = Wk.Range("B1")
Lig = Lig + 1
End If
Next Wk
Dim Lig As Long, Col As Integer
(...)
Lig = 2 'Primera fila donde copiar
Col = 3 'Columna donde copiar (...)
Sheets("To Do Clients").Cells(Lig, Col) = Wk.Range("J3")
Lig = Lig + 1
End If
Next Wk
Rows("2:11").Select
(...) xlSortNormal
With ActiveWorkbook.Worksheets("To Do Clients").Sort
(...)
End With
End Sub
""""""""""
Y por supuesto, eso no funcionó: "error de compilación: Declaración existente en el ámbito actual".
Entonces eliminé: "Dim Lig As Long, Col As Integer"
el mismo mensaje de error, entonces intenté eliminando:
"Dim Wk As Worksheet"
el mismo mensaje de error.
Y pensé:
No sabes dónde empieza y dónde termina y cómo funciona Sub Rappel!
que cambiar el número de "Col =" tal vez no era suficiente para cambiar de columna...
...
...
...
Momento de soledad...
Finalmente, aquí está, creo que sé improvisar, pero ahora, necesito un mecánico.
¿Es clara mi solicitud? ¿Podrían ayudarme a finalizar esta macro? Gracias por su ayuda.
Willywill -
¡He encontrado!!!
Una vez realizado el primer extracto, fui a la celda adyacente (Range("B2").Select, luego Range("B3").Select)
A posteriori, me pregunto si estas líneas son necesarias,
encima pegué todo el texto de lo que parecía ser la macro que me interesaba, (de "Dim Lig As Long," a "Next Wk")
He eliminado la declaración al principio de mi macro. De hecho, recibí mensajes de error de compilación del depurador que me decían: "Declaración existente en el ámbito actual". Sin saber lo que estaba haciendo, primero eliminé:
Dim Lig As Long, Col As Integer
y como seguía fallando, eliminé:
Dim Wk As Worksheet
Modifiqué "Col = 1 'Columna donde copiar" cambiándolo a 2 para B2 y 3 para C2 (por eso pienso que ir a B2 y C2 antes de la macro es innecesario)
Y aquí está mi primera macro hecha en programación... ¿me atreveré a decir: "la primera macro numérica"? Porque viendo lo que he luchado, creo que mi cerebro no está compuesto solo de 0 y 1... ¡creo que incluso somos varios en mi cabeza usando eso! y no siempre soy yo quien lo controla!
Así que mi macro final:
"""""""""""""""""""""""
Sub RappelR6()
Dim Lig As Long, Col As Integer
Dim Wk As Worksheet
Lig = 2 'Primera línea donde copiar
Col = 1 'Columna donde copiar
For Each Wk In Worksheets
If Wk.Name <> "To Do Clients" Then
Sheets("To Do Clients").Cells(Lig, Col) = Wk.Range("I3")
Lig = Lig + 1
End If
Next Wk
Range("B2").Select
Lig = 2 'Primera línea donde copiar
Col = 2 'Columna donde copiar
For Each Wk In Worksheets
If Wk.Name <> "To Do Clients" Then
Sheets("To Do Clients").Cells(Lig, Col) = Wk.Range("B1")
Lig = Lig + 1
End If
Next Wk
Range("B3").Select
Lig = 2 'Primera línea donde copiar
Col = 3 'Columna donde copiar
For Each Wk In Worksheets
If Wk.Name <> "To Do Clients" Then
Sheets("To Do Clients").Cells(Lig, Col) = Wk.Range("J3")
Lig = Lig + 1
End If
Next Wk
Rows("2:11").Select
Range("A11").Activate
Selection.ClearContents
Selection.Delete Shift:=xlUp
Range("A2:C2001").Select
ActiveWorkbook.Worksheets("To Do Clients").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("To Do Clients").Sort.SortFields.Add Key:=Range( _
"A2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("To Do Clients").Sort
.SetRange Range("A3:A61")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub