Buscar y dar mensaje si la fecha de hoy se encuentra en una hoja en diferentes celdas ?
Necesito una macro que al abrir el libro busque en una hoja ("parejas") en las columnas B, D, F, H, J, L, N y en las filas 11, 29,47 de cada columna mencionada. La fecha actual HOY. Si existe esa fecha indicar por msgBox que está. Y volver ha realizar búsqueda hasta que revise todas las celdas indicadas. Si no está una vez revidadas las celdas salir de la macro.
1 respuesta
Hice este código, que espero haga lo que necesites, para que funcione correctamente debes hacer lo siguiente:
- Abres el editor Visual Basic (VBA) con la tecla Alt+F11 o desde la ficha Programador en la cinta de opciones.
- Ubicas donde se encuentra el nombre de tu libro y en la carpeta Microsoft Excel Objetos, le das click en el signo + que esta de su lado izquierdo para que muestre su contenido (ver imagen).
- Das doble click en Thisworkbook y se abrirá de tu lado izquierdo una pantalla en blanco, en esta copias el código completo tal y como está. Guardas el libro y lo cierras.
- Cuando lo vuelvas a abrir se ejecutará automáticamente y si no hay coincidencias no pasará nada, pero si en las celdas que mencionas hay una fecha igual que la de hoy, te enviará un mensaje donde te indica la celda en donde fué encontrada y continuará hasta revisar el resto. Si no pasa nada después es que ya no encontró otra coincidencia.
Private Sub Workbook_Open() 'Por Vico Application.ScreenUpdating = False Sheets("parejas").Select Dim nRow, nCol, cnt As Integer For cnt = 2 To 42 Step 2 nRow = 11 If cnt > 0 And cnt <= 14 Then If Cells(nRow, nCol + cnt) <> "" Then If Cells(nRow, nCol + cnt) = Date Then Cells(nRow, nCol + cnt).Select MsgBox "Se ha encontrado la fecha de hoy en la celda " & Cells(nRow, nCol + cnt).Address, vbInformation, "Coincidencia encontrada..." End If End If End If If cnt > 14 And cnt <= 28 Then nRow = 29 If Cells(nRow, nCol + (cnt - 14)) <> "" Then If Cells(nRow, nCol + (cnt - 14)) = Date Then Cells(nRow, nCol + (cnt - 14)).Select MsgBox "Se ha encontrado la fecha de hoy en la celda " & Cells(nRow, nCol + (cnt - 14)).Address, vbInformation, "Coincidencia encontrada..." End If End If End If If cnt > 28 And cnt <= 42 Then nRow = 47 If Cells(nRow, nCol + (cnt - 28)) <> "" Then If Cells(nRow, nCol + (cnt - 28)) = Date Then Cells(nRow, nCol + (cnt - 28)).Select MsgBox "Se ha encontrado la fecha de hoy en la celda " & Cells(nRow, nCol + (cnt - 28)).Address, vbInformation, "Coincidencia encontrada..." End If End If End If Next cnt End Sub
Víctor, de 10, excelente solución corre perfecto es lo que necesitaba, solo un pequeño problema que es un error mío, me equivoqué en cuanto las líneas iniciales nRow que son 12, 30, 48, que en un principio parece fácil cambiar pero entonces se me alteran los If cnt > ... y eso no encuentro su matemática. Si pudiera repararlo le estaría muy agradecido.
Pero su propuesta y la rapidez en solucionar son excelentes.
Aquí tienes el código nuevo, sólo reemplázalo y listo
Califica mi respuesta y cierra la pregunta, por favor.
Saludos... Víctor M.
Sub search_date() Application.ScreenUpdating = False Dim nRow, nCol, cnt As Integer For cnt = 2 To 42 Step 2 nRow = 12 If cnt > 0 And cnt <= 14 Then If Cells(nRow, nCol + cnt) <> "" Then If Cells(nRow, nCol + cnt) = Date Then Cells(nRow, nCol + cnt).Select MsgBox "Se ha encontrado la fecha de hoy en la celda " & Cells(nRow, nCol + cnt).Address, vbInformation, "Coincidencia encontrada..." End If End If End If If cnt > 14 And cnt <= 28 Then nRow = 30 If Cells(nRow, nCol + (cnt - 14)) <> "" Then If Cells(nRow, nCol + (cnt - 14)) = Date Then Cells(nRow, nCol + (cnt - 14)).Select MsgBox "Se ha encontrado la fecha de hoy en la celda " & Cells(nRow, nCol + (cnt - 14)).Address, vbInformation, "Coincidencia encontrada..." End If End If End If If cnt > 28 And cnt <= 42 Then nRow = 48 If Cells(nRow, nCol + (cnt - 28)) <> "" Then If Cells(nRow, nCol + (cnt - 28)) = Date Then Cells(nRow, nCol + (cnt - 28)).Select MsgBox "Se ha encontrado la fecha de hoy en la celda " & Cells(nRow, nCol + (cnt - 28)).Address, vbInformation, "Coincidencia encontrada..." End If End If End If Next cnt End Sub
Hola de nuevo Victor, en la macro que me hiciste he querido mejorar el msgBox con unos datos adicionales de unas celdas. en cuanto a la línea 12 me funciona correcto no así en la 30 y la 48 no logro que se ejecuten las dos últimas bien, a pesar de que he comprobado que la macro se posiciona correctamente me da otros datos de 14 columnas más adelante. te paso el msgBox de la línea 12 que si funciona haber que puedes hacer, gracias de antemano y saludos. pero no puedo enviar el código por este medio.
Si no es por este medio, ¿cómo lo vas a mandar? . Si me dices, cuales son las celdas con los valores a poner en el msgbox, con respecto a la celda que selecciona la macro, podría adaptar el código. Incluso lo que debe decir el mensaje.
Hola Victor es que no me deja colocar el mensaje en código, pero intento explicarme:
Una vez encuentre la coincidencia de fecha el msgbox tendría que dar la información que hay en la hoja "parejas", así ("Pareja: " 11 celdas por encima) para la línea 12. Para la 30 serian 28 filas por encima y para la 48 46 filas por encima además como segunda información ("Anilla: " 2 celdas por encima) para la fila 12, 30, 48 y por último mostrar el contenido de la celda que está 1columna a la izquierda y 1 celda por encima que en mi caso es Puesta 1 o Puesta 2 o Puesta 3. dependiendo de fila 12, 30, o 48 a ver si me he explicado. Gracias de antemano
Ya te hice un código, reemplaza el que tienes y prueba
https://drive.google.com/open?id=1NbGRmWyhscrQ6AD1-CAuaDyN44RsaHMz
Con respecto a este punto: " Para la 30 serian 28 filas por encima y para la 48 46 filas por encima"
Me parece que que ambas coinciden con la fila 2, así que tomarán el mismo valor.
- Compartir respuesta