Macro o fórmula que entregue un listado con las fechas y horarios, para cada vez que se repita un nombre

Mi consulta es saber si es posible hacer un listado con cada fecha y horario más cercano a la aparición de un nombre en una table de excel.

Tengo una tabla en donde se van repitiendo semanas, con cada fecha arriba, y los horarios a la izquierda. En las celdas anoto nombres que se repiten. Entonces la idea es obtener una pequeña tabla con esas fechas y horarios para cada vez que aparezca un nombre específico.

No he encontrado nada similar en la web, así que les consulto si es posible hacer algo así, y en caso que se pueda, si me pueden ayudar en la generación de ello.

Esta imagen muestra una semana de esa tabla

1 respuesta

Respuesta
1

Entonces la idea es obtener una pequeña tabla con esas fechas y horarios para cada vez que aparezca un nombre específico.

Puedes poner una imagen con el resultado que deseas y una breve explicación.

Perdón, estuve fuera.

Si claro, la idea es una pequeña tabla, que muestre el nombre, y las fechas y horarios en donde ese nombre aparece en la tabla.

Para la imagen que subí al inicio, tomo el nombre de "Jose Vega" y la idea es que se devuelva algo así:

 Muchas gracias por responder, y nuevamente, me disculpo por la demora de mi respuesta

En tu primera imagen, en la fila 26 tienes fechas.

Puedes comentar lo siguiente y en este orden:

1. ¿Entonces tienes otras fechas en otras líneas?

2. Cuáles fechas quieres, las últimas o todas las fechas de la hoja.

3. Lo quieres con fórmulas o con VBA.

4. Cómo se llama la hoja donde tienes los datos.

5. Cómo se llama la hoja donde quieres el resultado.

  1. Si, para el ejemplo que subí, la fila 26 tiene fechas y la fila 38 vuelve a tener fechas de la semana siguiente, y así sucesivamente. Siempre, la fila 12 posterior a una fila que contenga fechas, vuelve a contener otras fechas, que son de la semana siguiente. Las primeras fechas de la tabla aparecen en la fila 2, luego en la 14, luego en la 26 y así sucesivamente, y las columnas, desde la B a la G corresponden a los días de la semana (Lunes a Sábado).
  2. Quiero que devuelva solo la fecha que está directamente sobre el nombre que estoy buscando.
  3. No sé como será mejor. Imagino que con VBA será más práctico, y hará menos pesada la carga del libro completo.
  4. La hoja donde están los datos se llama "HORARIOS"
  5. La hoja donde estará la tabla de resultados se llama "CERTIFICADOS CUARENTENA"

2. Quiero que devuelva solo la fecha que está directamente sobre el nombre que estoy buscando.

Pero si el nombre aparece 2 veces y directamente sobre ese nombre hay 2 fechas, cuál quieres, la más antigua o la más reciente o las 2 fechas.

la idea es tomar cada día como una pequeña tabla por si sola. Esta tabla, como encabezado tiene el día y en la columna de la izquierda (A) se mantiene siempre la fecha. En cada día aparecerá solo una vez el nombre. Ese nombre solo aparecerá al día siguiente

* el día se refiere a la fecha. 

Sigo sin entender. Puedes responder en el siguiente orden con un SÍ o con un NO

1. En tu ejemplo Marco Moya, ¿puede aparecer en otra semana? SÍ o NO

2. ¿Si Marco Moya aparece en la semana del 29/03/2021 y también aparece en la semana del 22/03/2021, cuál fecha quieres?

1- Si. Generalmente, un nombre puede repetirse en 10 días 

2- Ambas fechas. Necesito un listado con todas las fechas en donde aparezca ese nombre. 

¿Las celdas que no tienen hora, como la celda A26, están completamente vacías? Si o No

si, vacías

Pon el nombre en la celda B4 de la hoja "CERTIFICADOS CUARENTENA" y ejecuta la siguiente macro:

Sub Buscar_Fechas()
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim a As Variant, b As Variant
  Dim i As Long, j As Long, k As Long, m As Long
  '
  Set sh1 = Sheets("CERTIFICADOS CUARENTENA")
  Set sh2 = Sheets("HORARIOS")
  If sh1.Range("B4").Value = "" Then
    MsgBox "Introduce un nombre"
    Exit Sub
  End If
  '
  sh1.Range("B5:C" & Rows.Count).ClearContents
  a = sh2.Range("A2:F" & sh2.Range("A" & Rows.Count).End(3).Row).Value
  ReDim b(1 To UBound(a, 1), 1 To 2)
  For i = 1 To UBound(a, 1)
    If a(i, 1) = "" Then
      k = i
    Else
      For j = 1 To UBound(a, 2)
        If LCase(a(i, j)) = LCase(sh1.Range("B4").Value) Then
          m = m + 1
          b(m, 1) = a(k, j)
          b(m, 2) = a(i, 1)
        End If
      Next
    End If
  Next
  If m = 0 Then
    MsgBox "Nombre no encontrado"
  Else
    sh1.Range("B5").Resize(m, 2).Value = b
  End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas