Recorra las filas que contengan fechas de forma mensual.
Estoy tratando de realizar un bucle condicional de “sumif y countif” en un rango dinámico.
Si se cumplen alguna de las condiciones, se proporciona una respuesta a una celda “Output” adyacente de cada fila y luego el bucle continúa en cada fila del rango hasta completarlo.
Las tablas/hojas de cálculo contienen productos repetidos y varios valores, a menudo en una fecha específica. El código a continuación funciona, pero solo cumple el 50% de lo que quiero.
Quiero aplicar un bucle secundario que aplique los cálculos del primer bucle mencionado anteriormente a los datos en incrementos de 30 días o mensuales, es decir, el bucle de countif y sumif se aplica solo a las filas entre el 1 de enero de 2020 y el 31 de enero de 2020, en lugar de a todo el rango (a partir de la fecha mínima en el rango). Luego, el bucle continúa con, por ejemplo, el 1 de febrero de 2020 al 28 de febrero de 2020, o los siguientes 30 días después de los primeros 30 días, y realiza el cálculo nuevamente. Las fechas a menudo se repiten para cada fila de datos, lo que hace las cosas un poco más complicadas.
Datos de ejemplo:
Fecha || Precio cambiante || Producto || Salida
11/16/2019 $23 Apple Demasiado grande
11/16/2019 $50 Apple Demasiado grande
11/17/2019 $23 Apple Demasiado grande
11/21/2019 $10 Naranja Demasiado grande
11/16/2019 $5 Naranja Demasiado grande
11/21/2019 $5 Naranja Demasiado grande
11/21/2019 $5 Naranja Demasiado grande
12/23/2019 $23 Apple Comprar
12/23/2019 $20 Apple Comprar
Sub Macro_1
Application.ScreenUpdating = False
'variables
Dim rngCriteria As Range
Dim rngSum As Range
Set rngCriteria = Range("M2:M200")
Set rngSum = Range("L2:L200")
Dim rngResult As Long
Dim rngResult2 As Long
Dim cell As Range
'Loop para realizar countif y sumif
For Each cell In Worksheets("Sheet1").Range("N2:N200")
rngResult = WorksheetFunction.SumIf(rngCriteria, cell.Offset(0,-1).Value, rngSum)
rngResult2 = WorksheetFunction.CountIf(rngCriteria, cell.Offset(0,-1).Value)
If rngResult > 50 Or rngResult2 > 2 Then
cell.Value = "Demasiado grande"
Else
cell.Value = "Comprar"
End If
Next cell
Application.ScreenUpdating = True
End Sub
davy.ai
Para agregar un bucle secundario que aplique el bucle de countif y sumif a los datos en incrementos de 30 días o mensuales, puedes agregar un bucle for anidado dentro del bucle existente. Aquí tienes un código actualizado que agrega el bucle secundario:
En esta implementación, el bucle for anidado recorre cada mes (desde enero hasta diciembre en este ejemplo) y establece las fechas de inicio y fin para cada mes en función de la iteración del bucle. Los bucles countif y sumif luego utilizan estas fechas como criterios adicionales para realizar los cálculos solo dentro del mes específico. El valor de salida se escribe en una celda adyacente en la misma fila, desplazado por el número de iteraciones del bucle (1 más el índice del mes en este caso).