Recorrer todas las hojas de un libro y copiar el valor de una celda constante en la Hoja1

Quisiera saber si conocen código que permita recorrer todas las hojas de un libro, y me tome un valor ubicado en dos celdas (en mi caso R20 y T20), dichas celdas son constantes a lo largo del libro, a su vez esos valores se vayan colocando en una lista en mi Hoja1 del libro. Cada ítem de la lista coincide con el nombre de las hojas del libro.
Por ejemplo: Tengo 5 hojas, mi primera hoja tengo esa lista de 4 personas (por decir: Pedro Perez, Juán Sayago, Rafael Martínez y Víctor Sánchez) y las 4 hojas siguientes es de donde voy a tomar la información de la celda R20 y T20, (cada hoja tiene el nombre de una de esas personas).

2 respuestas

Respuesta
1

Suponiendo que la lista de personas están en la columna A y en las columnas B y C quieres los datos de R20 y T20, utiliza la siguiente macro en la primera hoja.

Si los nombre están en otra columna, entonces cambia en la macro col = "A" por la letra de la columna.

Sub RecorrerHojas()
'Por.Dante Amor
    col = "A"
    ncol = Columns("A").Column
    On Error Resume Next
    For i = 2 To Range(col & Rows.Count).End(xlUp).Row
        hoja = Cells(i, col)
        existe = False
        For Each h In Sheets
            If h.Name = hoja Then
                existe = True
                Exit For
            End If
        Next
        If existe Then
            Cells(i, ncol + 1) = Sheets(hoja).[R20]
            Cells(i, ncol + 2) = Sheets(hoja).[T20]
        Else
            Cells(i, ncol + 1) = "nombre de hoja no existe"
        End If
    Next
    MsgBox "Terminado"
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: RecorrerHojas
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Saludos. Dante Amor

Si es lo que necesitas.

Funciona de maravilla. Muchas gracias. La estudiaré para entender como funciona.

Dante, buen día, en lugar de que me copie el valor de esas celdas que estoy buscando, como haría para que me hiciera un enlace, como cuando estoy en la hoja1, celda A1 y quiero mostrar el valor de la celda A1 de la hoja2. con (=Hoja2!A1). En caso tal sería útil para ver valores en tiempo real. Por ejemplo: si cambio el número de celular o el documento de identidad. Estuve tratando con:

Cells(i, ncol + 1).FormulaR1C1 = "=Sheets(hoja).[R20]"

y no le llego...

Puedes crear una nueva pregunta para actualizar la macro.

Respuesta
1

Víctor

Incorpora en un módulo común lo siguiente:

Sub Celdas_R20_y_T20()
'----------
'by Cacho R
'----------
Dim C As Range
On Error Resume Next
For Each C In Range([a2], [a2].End(xlDown))
  Worksheets(C.Value).Range("r20,t20").Copy C.Offset(, 1)
  If Err.Number > 0 Then C.Offset(, 1) = "Hoja inexistente.": Err.Clear
Next
End Sub

Y ejecuta la macro mediante un botón colocado en la hoja donde tienes la lista de cuatro nombres.
La única suposición que hice es que los cuatro nombres comienzan a partir de la celda [a2]. De no ser así, adecua las dos apariciones del [a2].
Si incorporases más nombres a la lista o eliminases alguno, no tienes que cambiar nada del código.

Muchas gracias por su colaboración. Anda excelente este macro.

Muchachos, otra pregunta. en lugar de que me copie el valor de las celdas que busco, cómo sería en caso tal de que yo quiera que me hiciera un enlace, como por ejemplo: estoy en la hoja1, celda A1 y quiero mostrar el valor de la celda A1 de la hoja2. Para hacer eso haría =Hoja2!A1. En caso tal sería útil para ver valores en tiempo real. Si cambio el número de celular o el documento de identidad.

En tal caso requieres de un cambio menor:

Sub Celdas_R20_y_T20()
'----------
'by Cacho R
'----------
Dim C As Range
On Error Resume Next
For Each C In Range([a2], [a2].End(xlDown))
  Worksheets(C.Value).Name = Worksheets(C.Value).Name
  If Err.Number > 0 Then
    C.Offset(, 1).Resize(, 2) = Array("Hoja inexistente.", ""): Err.Clear
  Else
    C.Offset(, 1).Resize(, 2) = Array("='" & C & "'!R20", "='" & C & "'!T20")
  End If
Next
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas