Macro para copiar rango y escribir fecha, reemplazando los datos si la fecha ya existe.
Sub Botón155_Haga_clic_en() Application.ScreenUpdating = False Dim origen1 As Range Dim origen2 As Range Dim destino1 As Range Dim destino2 As Range Dim fecha As Date Dim celda As Range Dim hojaHistorico As Worksheet Dim protegida As Boolean ' Desproteger la hoja "Histórico" si está protegida Set hojaHistorico = ThisWorkbook.Sheets("Histórico") If hojaHistorico.ProtectContents Then protegida = True hojaHistorico.Unprotect End If ' Definir el rango de origen 1 en la hoja "Turnos" Set origen1 = Sheets("Turnos").Range("I2:J16") ' Definir el rango de origen 2 en la hoja "Turnos" Set origen2 = Sheets("Turnos").Range("K2:K16") ' Definir el rango de destino 1 en la hoja "Histórico" Set destino1 = hojaHistorico.Range("F" & hojaHistorico.Rows.Count).End(xlUp).Offset(1) ' Definir el rango de destino 2 en la hoja "Histórico" Set destino2 = hojaHistorico.Range("D" & hojaHistorico.Rows.Count).End(xlUp).Offset(1) ' Escribir la fecha actual en todas las celdas de la columna "B" correspondientes, reemplazando la fecha existente si ya existe fecha = Date For Each celda In destino1.Offset(0, -4).Resize(origen1.Rows.Count) If IsDate(celda.Value) Then celda.Value = fecha Else celda.Value = fecha End If Next celda ' Copiar y pegar los valores del rango 1 origen1. Copy destino1. PasteSpecial xlPasteValues ' Copiar y pegar los valores del rango 2 origen2. Copy destino2. PasteSpecial xlPasteValues Range("A1").Select ' Limpiar el portapapeles Application.CutCopyMode = False Application.ScreenUpdating = True ' Volver a la hoja "Turnos" Range("A1").Select Sheets("Turnos").Select ' Volver a proteger la hoja "Histórico" si estaba protegida If protegida Then hojaHistorico.Protect End If End Sub
Con la anterior macro, pretendo copiar los datos que hay en el rango "I2:J16", también los datos del rango "K2:K16" y pegarlos en una hoja llamada "Histórico", en la siguiente celda vacía de la columna "F", los datos de "I2:J16" y en la siguiente celda vacía de la columna "D" de esa misma hoja, los datos del rango "K2:k16". Una vez esto, quiero que en la siguiente celda vacía de la columna "B", se copie la fecha del día de hoy, pero si por algún motivo la fecha del día de hoy, ya existe, ese rango debe ser reemplazado y no agregado en la siguiente celda vacía como está pasando en mi macro.
Espero contar con su valiosa colaboración para mejorar, optimizar la macro, hacerla más rápida y eficiente y lo más importante, lograr que no se sigan agregando valores con la misma fecha, sino que el rango donde ya esté la fecha de hoy, se reemplace.