Colocar un contador en el código

Hola experto
Tengo una duda
Deseo poner un contador para saber cuantas celdas remplazo
Este es el código completo que tengo
fecha1 = InputBox("Fecha que desea sustituir?", "ORIGEN", Now())
If fecha1 = Empty Then Exit Sub 'mejorar con revisión validez fecha
fecha2 = InputBox("Fecha nueva?", "DESTINO", Now())
If fecha2 = Empty Then Exit Sub 'mejorar con revisión fecha
'Le preguntarás al usuario por las fechas a sustituir y la nueva, y
If fecha1 < fecha2 Then
On Error Resume Next
Application.DisplayAlerts = False
MsgBox ("La Fecha que desea actualizar no se encontro")
MsgBox ("Se actualizaran incorrectamente los datos")
Selection.Replace What:="[BALANCE " & Format(fecha1, "ddmmyy"), Replacement:="[BALANCE " & Format(fecha2, "ddmmyy"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Selection.Replace What:="[MORELOS_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[MORELOS_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[servicios_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[servicios_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[rp" & Format(fecha1, "dd"), Replacement:="[rp" & Format(fecha2, "dd"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Selection.Replace What:="[DIARIO " & Format(fecha1, "dd"), Replacement:="[DIARIO " & Format(fecha2, "dd"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Selection.Replace What:="[CAPTURA_" & UCase(Format(fecha1, "yyyy")) & "_" & Format(fecha1, "MMMM") & "_" & Format(fecha1, "dd"), Replacement:="[CAPTURA_" & UCase(Format(fecha2, "yyyy")) & "_" & Format(fecha2, "MMMM") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[Rep_Subd_Prod_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[Rep_Subd_Prod_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[MARZO-" & UCase(Format(fecha1, "ddmmyy")), Replacement:="[MARZO-" & UCase(Format(fecha2, "ddmmyy"))
Selection.Replace What:="[FAX_CPI_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "dd"), Replacement:="[FAX_CPI_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "dd")
MsgBox ("Los Datos se han actualizado correctamente")
Else
MsgBox ("Las Fechan estan incorrectas")
End If
Donde colocarle el contador
Para que me indique cuantas celdas remplazo y mostrarlas en un msgbox
Espero me puedas ayudar
De antemano gracias

2 Respuestas

Respuesta
1
Según me presentas la macro desconozco que son los reemplazos si son hojas, columnas, nombres de rangos etc.
De todas formas para contar los cambios deberíamos de disponer de la hoja antes de cambiar y después de cambiar para que el contador evalúe que celdas han cambiado y pueda contarlas, según lo presentas es imposible, la macro realiza el remplazo de todas las fechas pero no queda lugar donde contar (comparar las diferencias) los cambios se producen sobre la marcha según las va encontrando el contador es algo así:
Variable para el contador
contarcambios= 0
For Each cell In Selection
If ActiveCell.Value<>Anterior valor de la celda Then
contarcambios= contarcambios + 1
End If
Next cell
Msgbox("El total de cambios es & "contarcambios")
Pero tenemos el problema que no se para la macro cada vez que realiza un remplazo, busca la fecha que coincide con el inputbox y la cambia y continua en todo el rango. De todas formas a la macro le falta el rango que has seleccionado y si hace un Loop para buscar en toda la selección, no está la macro completa.
>Un saludo
>Julio
los remplazos sonvalores que contienenen las hojas de excel,y que se realizan seleccionando la columna ,tenemos las hojas de excel  antes y despues de cambiarlas.
Lo que quiero es que cuente los valores que se actualizaron correctamente y me mande un msgbox.
Ejemplo como cuando haces un remplazo en excel cuando termina de remplazar te manda un mensaje donde te dice cuantos fueron remplazados correctamente.
Ojala me hayas entendido y me puedas ayudar
Vamos a ver si tenemos las hojas antes de cambiar y después del cambio podemos contar cuantas veces aparece en el rango la fecha que has indicado que cambie, te explico, tu primero indicas una fecha1 para buscar y reemplazar por la fecha2, por lo tanto en la nueva hoja tenemos la fecha2 las veces que sean en ese rango, ahora sí podemos contarlas con este código:
Sub Cuenta_Fechas()
Dim cuentafechas As Integer
Range("A1:A4").Select
fecha = InputBox("¿Que fecha quieres contar?")
cuentafechas = 0
For Each num In Selection
If ActiveCell.Value = fecha Then
cuentafechas = cuentafechas + 1
End If
ActiveCell.Offset(1, 0).Select
Next num
MsgBox ("Se ha encontrado la fecha " & cuentafechas & " veces")
End Sub
Debes de cambiar el rango donde empezar a buscar la fecha, y recuerda que la fecha tiene que estar en formato de VBA mes/dia/año 05/26/2009 tanto al ponerla en el inputbox como en la celda.
>Un saludo
>Julio
contarcambios= 0
For Each cell In Selection
If ActiveCell.Value<>Anterior valor de la celda Then
contarcambios= contarcambios + 1
End If
Next cell
Msgbox("El total de cambios es & "contarcambios")
en elcodigo que memandaste no entiendo donde dice el Anterior valor de la celda
a que hace referencia ya quesi le pongo ahi " " en total de cambios en aparecen 6536 que son el total de celdas, claro que no tengo todos esos
espero mepuedas ayudar
No has leído el último mensaje, en él te he puesto la macro para que te localice la fecha que tú has cambiado. Vamos a ver si te lo explico, me dices que tienes las dos hojas tanto la anterior al cambio como la que has cambiado. Si en la hoja que has cambiado has buscado para reemplazar la fecha (por ejemplo 27/01/2009) en la hoja nueva tendrás los cambios a esas fechas, imagino, pues si contamos cuantas fechas hay en la nueva hoja con esa fecha tendríamos el numero total de cambios, también puedes hacer lo contrario, localizar en la primera hoja la fecha que quieres cambiar aplicas la macro y te contará cuantas fechas coinciden con la buscada.
Mirate el mensaje anterior al que me has mandado tú ahí tienes la macro.
>Un saludo
>Julio
siiii esta buena la macro
Pero no necesito las fechas
Lo que necesito es un contandor, para saber cuantos reemplazos realizo en la columna es decir
1.- Para remplazar un día debo seleccionar toda la columna
claro la columna anterior la jalo a la columna que deseo remplazar
ejemplo
la columna con el día 10/04/09 la deseo remplazar por la de hoy que es 14/04/09
lo que deseo saber es cuantas celdas fueron cambiadas, es decir las celdas que cambiaron o que se remplazaron con las nuevas, es el numero que deseo saber
es cuando en excel vas al menu edición y le das buscar y remplazar
a lo ultimo cuando remplazas, sale un msgbox de que cuando cambios se efectuaron ejemplo
Se ha realizado 20 reemplazos...
Eso es lo que deseo saber el numero de celdas que cambiaron o los reemplazos que se efecturaron
espero me puedas ayudar...
Ya sé lo que quieres, antes de reemplazar pones en esta macro la fecha que quieres cambiar por ejemplo la que tu has puesto 10/04/09 y te cuenta cuantas fechas hay iguales a las puestas, luego reemplazas y listo. Digamos que esta macro va a hacer lo mismo que la siguiente pero esta primero te contará las fechas y luego las reeplazas con la otra macro.
>Un saludo
>Julio
Hola experto disculpa las molestias de tanto preguntar
pero deseo contar los cambios pero no de las fechas si no de los valores que se han actualizado
ejemplo mi hoja principal esta así
sucursal morelos dia1 dia2 dia3 dia4
arroz 10
frijol 10
todo lo que contiene esta hoja están vinculadas con otras hojas de excel y las paso a esta para llevar el reporte total
supongamos que lo del día 1 lo paso al día 2
esto lo hago con el motivo de que mi macro pide una fecha a remplazar por una fecha donde tomare los nuevos valores
lo que deseo saber es un contador en donde en esa columna de día me diga si en realidad cambiaron o no los valores y cuantos cambiaron.
Gracias por tu apoyo
Espero me puedas ayudar al igual me pasaron un código pero no c donde colocarlo aquí te lo mando
For Each cell In Selection
If ActiveCell.Value <> Valor de la celda anterior Then
contarcambios = contarcambios + 1
End If
Next cell
MsgBox "El total de cambios es" & contarcambios
Je je el código que comentas te lo he puesto yo en un correo al principio de la consulta, para que podamos hacer un contador te dije que necesitábamos las dos hojas antes de cambiar los datos y después de cambiarlos para que puede hacer una macro de comparación y que te cuente los datos que sean diferentes. Necesitaría tu libro de excel con dos hojas que contengan los datos antes de cambiarlos y otra hoja con los cambios, así te hago una macro que te vaya contando las celdas que contengan un valor diferente.
Ponme un correo te envío un mensaje y me envías tu Libro de Excel.
>Un saludo
>Julio
Respuesta
1
Tal y como lo tienes no puedes colocar un contador, pues el método Replace se encarga el solo de reemplazar los valores y no te permite controlar cuales ni cuantos. El reemplaza y punto.
La forma que tendrías de hacerlo es programando tu propia función reemplazar que te incrementara en cada cambio tu contador.
Deberías recorrer tu rango de datos con un bucle, hacer la comparación manualmente y reemplazar el valor e incrementar tu contador.
Al finalizar podrías mostrar el mensaje de los reemplazados.
Hola experto
Este código me lo mando un compañero
For Each cell In Selection
If ActiveCell.Value <> Valor de la celda anterior Then
contarcambios = contarcambios + 1
End If
Next cell
MsgBox "El total de cambios es" & contarcambios
si funciona pero no hace lo que yo deseo
y seria mas facil saber cuantas celdas remplazo...
Pero en donde dice valor de la celda anterior no c a que se refería eso
me podrías ayudar
de ante mano gracias
El código que te han pasado efectivamente te valdría para controlar los cambios que llevas hechos.
"if activecell.value <> Valor de la celda anterior then"
Este es el trozo donde tienes que controlar si en tu celda activa tienes que cambiar el dato, y si lo cambias aumentar tu contador en uno. Lo que ocurre que el codigo lo tienes que adaptar a lo tuyo
if activecell.value = [BALANCE " & Format(fecha1, "ddmmyy") then
 activecell.value = [BALANCE " & Format(fecha2, "ddmmyy")
 contador = contador + 1
Endif
Y así sucesivamente con todas las celdas
Hola experto una duda más
For Each cell In Selection
If ActiveCell.Value <> Valor de la celda anterior Then
contarcambios = contarcambios + 1
End If
Next cell
MsgBox "El total de cambios es" & contarcambios
el next cell donde lo coloco
ya que si lo ahi mismo con el codigo anterior no me aparece nada
y si lo coloco hasta el final se bloquea la maquna
espero me puedas ayudar
graciasssss
Si la selección esta bien hecha no debería colgarse la maquina.
for each cell in seleccion
   if activecell.value = [BALANCE " & Format(fecha1, "ddmmyy") then
      activecell.value = [BALANCE " & Format(fecha2, "ddmmyy")
      contador = contador + 1
   endif
   if...then
   endif
next cell
msgbox "Total de cambios: " & contador
Síguelo paso a paso a ver por que se te cuelga. Ves comprobando valores y demás.
Te lo debería hacer bien.
Hola experto mejor te mando mi código... el resultado es que si me realiza los cambios de los reemplazos pero no los cuenta
aquí te mando el código.. siento que el contador no me realiza nada por que me manda cero
Private Sub CommandButton7_Click()
contador = 0
fecha1 = InputBox("Fecha que desea sustituir?", "ORIGEN", Now())
If fecha1 = Empty Then Exit Sub 'mejorar con revisión validez fecha
fecha2 = InputBox("Fecha nueva?", "DESTINO", Now())
If fecha2 = Empty Then Exit Sub 'mejorar con revisión fecha
'Le preguntarás al usuario por las fechas a sustituir y la nueva, y
Selection.Replace What:="[BALANCE " & Format(fecha1, "ddmmyy"), Replacement:="[BALANCE " & Format(fecha2, "ddmmyy"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Selection.Replace What:="[MORELOS_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[MORELOS_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[servicios_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[servicios_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[rp" & Format(fecha1, "dd"), Replacement:="[rp" & Format(fecha2, "dd"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Selection.Replace What:="[DIARIO " & Format(fecha1, "dd"), Replacement:="[DIARIO " & Format(fecha2, "dd"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
Selection.Replace What:="[CAPTURA_" & UCase(Format(fecha1, "yyyy")) & "_" & Format(fecha1, "MMMM") & "_" & Format(fecha1, "dd"), Replacement:="[CAPTURA_" & UCase(Format(fecha2, "yyyy")) & "_" & Format(fecha2, "MMMM") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[Rep_Subd_Prod_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd"), Replacement:="[Rep_Subd_Prod_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
Selection.Replace What:="[MARZO-" & UCase(Format(fecha1, "ddmmyy")), Replacement:="[MARZO-" & UCase(Format(fecha2, "ddmmyy"))
Selection.Replace What:="[FAX_CPI_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "dd"), Replacement:="[FAX_CPI_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "dd")
For Each cell In Selection
If ActiveCell.Value = "[BALANCE " & Format(fecha1, "ddmmyy") Then
ActiveCell.Value = "[BALANCE " & Format(fecha2, "ddmmyy")
contador = contador + 1
End If
If ActiveCell.Value = "[MORELOS_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd") Then
ActiveCell.Value = "[MORELOS_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd")
contador = contador + 1
End If
If ActiveCell.Value = "[rp" & Format(fecha1, "dd") Then
ActiveCell.Value = "[rp" & Format(fecha2, "dd")
contador = contador + 1
End If
If ActiveCell.Value = "[CAPTURA_" & UCase(Format(fecha1, "yyyy")) & "_" & Format(fecha1, "MMMM") & "_" & Format(fecha1, "dd") Then
ActiveCell.Value = "[CAPTURA_" & UCase(Format(fecha2, "yyyy")) & "_" & Format(fecha2, "MMMM") & "_" & Format(fecha2, "dd")
contador = contador + 1
End If
If ActiveCell.Value = "[Rep_Subd_Prod_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "yyyy") & "_" & Format(fecha1, "dd") Then
ActiveCell.Value = "[Rep_Subd_Prod_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "yyyy") & "_" & Format(fecha2, "dd")
contador = contador + 1
End If
If ActiveCell.Value = "[MARZO-" & UCase(Format(fecha1, "ddmmyy")) Then
ActiveCell.Value = "[MARZO-" & UCase(Format(fecha2, "ddmmyy"))
contador = contador + 1
End If
If ActiveCell.Value = "[FAX_CPI_" & UCase(Format(fecha1, "MMMM")) & "_" & Format(fecha1, "dd") Then
ActiveCell.Value = "[FAX_CPI_" & UCase(Format(fecha2, "MMMM")) & "_" & Format(fecha2, "dd")
contador = contador + 1
End If
Next cell
MsgBox "El total de cambios es" & contador
End Sub
Gracias por tu apoyo espero
Me puedas ayudar
Saludos cordiales
Claro,
No te lo hace porque con los Selection. Replace ya has hecho el cambio de las fechas, con lo que en los if ya no entra.
Tienes que quitar todos los Selection. Replace y adaptar la parte de los if para que recorra tu hoja y entre a hacer los cambios
De paso antes del next cell le pones un do events y veras que aunque siga trabajando cambiando datos te permitirá moverte por la hoja
un saludo
¿El selection remplace lo tengo que quitar?
Por que si los quito no me hará la comparación de los reemplazos
Y pues es el trabajo de la macro...
Espero me puedas ayudar
No tengo ni idea de como hacerleeeee
Saludos cordialesssss
Hola experto me comentaste que debo sustituir los select remplace por los if ... una aclaración mejor o un ejemplo es que no c como colocarlos y si los coloco me manda errores
Selection.Replace What:="[BALANCE " & Format(fecha1, "ddmmyy"), Replacement:="[BALANCE " & Format(fecha2, "ddmmyy"), _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:= _
False, ReplaceFormat:=False
el codigo de arriba es donde se remplazan los valores
espero me puedas ayudar a colocarle este codigo de for e ir a el codigo de arriba, por que deseo que se remplace los valores ademas de que cuenta cuantos se estan remplazando espero me puedas apoyar
mil graciasssssss
 for each cell in seleccion
if activecell.value = [BALANCE " & Format(fecha1, "ddmmyy") then
activecell.value = [BALANCE " & Format(fecha2, "ddmmyy")
contador = contador + 1
endif
if...then
endif
next cell
msgbox "Total de cambios: " & contador
Si usas Selection. Replace es porque tienes seleccionadas las celdas a reemplazar.
Si eso es así al hacer
for each cell in Selection
     if activecell.value = [BALANCE " & Format(fecha1, "ddmmyy") then
               activecell.value = [BALANCE " & Format(fecha2, "ddmmyy")
                contador = contador + 1
      endif
next cell
msgbox "Cambios realizados: " & contador
No debería darte errores
Pruébalo y me dices
Ya lo prove el código.
Tienes razón el usuario debe seleccionar la columna que desea remplazar, me manda el mensaje pero nome imprime cuantos cambios se realizaron, y si realiza los reemplazos.
Si inicializo el contador en 0 eso es lo que me imprime .
Saludos cordiales
Si debería mostrarte los cambios. Si entra en el if y aumenta el contador debería sacarlo en el mensaje.
Cuando no te lo pondrá será en el selection. Replace pero con el trozo que te envío yo si debería
Lo probé nuevamente
kite el codigo del selection remplace y no me cuenta los valores que remplaze y no me remplaza los datos
yo considero que debe de ir el codigo que me pasaste
dentro del remplace
para que me haga los 2
los remplazos y la cuenta de los valores que remplazo pero no c donde colocarlo
y primero lo que hice ahorita fue colocar el selection remplaze arriba
y abajo el codigo que me mandaste
pero no me los conto
espero me puedas ayudar
saludos cordialesssss
No los dos juntos no irán porque el primero hace que el segundo no los procese.
De todas formas, no seria más sencillo que todas las fórmulas que tienen la fecha la cogieran todas del contenido de una celda así con cambiar la fecha en dicha celda todas se actualizarían de golpe
De esta forma te daría igual cuantos cambie y sería bastante más sencillo.
Otra opción es que me mandes tu excel por mail y te lo miro
Hola
Pero dame tu correo para que te envíe mi archivo
Te enviare dos
Es que son varios
Es la hoja principal
Y de donde tomo algunos todos
Para el remplazo
mandametu correo
Saludos cordialesssss
Hola experto
Mándeme tu correo para que te mande mi hoja principal
Y lo cheques
aver si me puedes ayudar en algoo
Saludos cordiales
Ya te mande el código correcto
Espero me puedas ayudar
Gracias
Ahí la tienes
[email protected]
Ya te mande la correcta
checalo porfasss
Gracias
Saludos cordialessss
Ya te he enviado la respuesta
Igual tendrás que venir por aquí a pagarte unas cañas...
Hola experto
Ahorita lo voy a checar
Te mando un correo
Para ver si funciono valep
Sale muchas gracias
Cualquier cosa te mando un correo
valep
Gracias por la ayuda

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas