Declaración IF combinada con la function de gráfico en Excel VBA

Todavía soy nuevo en VBA y hasta ahora he logrado completar mis tareas con un poco de ayuda en línea, pero esta es demasiado lejos para mi conocimiento.

Hoja de ejemplo aquí: http://s000.tinyupload.com/index.php?file_id=50923272994978624314

Lo que quiero hacer es esto: si la columna A contiene alguna de las últimas dates de los meses (2015-01-31, 2015-02-28, 2015-03-31, 2015-04-30, 2015-05- 31, 2015-06-30, 2015-07-31, 2015-08-31, 2015-09-30, 2015-10-31, 2015-11-30, 2015-12-31), select cualquiera de esas dates la columna tiene (select celdas con esos valores para ser precisos), select las celdas correspondientes en la columna B (por ejemplo, si A10 tiene 2015-04-30 en ella, select también el valor B10) y cree un gráfico (columna clúster 2D simple) con esos valores seleccionados (dates en el eje horizontal, cantidad de dinero en el eje vertical).

Idea es tener un gráfico que muestre la cantidad total de dinero al final de cada mes (dado que los valores en la columna B son acumulativos) es simple hacerlo a mano – encuentre el último día del mes y vea el valor monetario en la columna correspondiente B , luego repite el último día del mes en la hoja y crea un gráfico. Pero lo haré todos los días, así que estoy tratando de automatizarlo (a través de macro).

Absolutamente no usaría una macro. En su lugar, haría una columna de las dates que desea capturar. Luego, al actualizar los valores en la columna A, su gráfico los recogerá automáticamente, por lo que creo que una macro es inútil y las fórmulas son el path a seguir.

Así que comencemos haciendo esa columna de dates:

Date MTD Revenue 2015 2015-03-09 € 2,855.270 2015-01-31 2015-03-10 € 3,534.550 2015-02-28 2015-03-11 € 3,791.760 2015-03-31 2015-03-12 € 4,024.680 2015-04-30 2015-03-15 € 4,182.020 2015-05-31 2015-03-16 € 4,317.610 2015-06-30 2015-03-17 € 4,439.900 2015-07-31 2015-03-18 € 4,585.070 2015-08-31 2015-03-19 € 4,798.900 2015-09-30 2015-03-20 € 4,903.830 2015-10-31 2015-03-21 € 4,959.710 2015-11-30 2015-03-23 € 5,203.690 2015-12-31 ... ... 

Si desea que las dates sean dinámicas, puede incluso usar una fórmula para crear las "Fechas de fin de mes" en function del año. De esa manera, todo lo que tiene que hacer es actualizar el año en el encabezado de la columna para cambiar todas las dates:

 C ------------------------------------------------------------ 2015 =TEXT(DATE(C$1,1,DAY(EOMONTH(DATE(C1,1,1),0))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C2)+1,DAY(EOMONTH(C2,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C3)+1,DAY(EOMONTH(C3,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C4)+1,DAY(EOMONTH(C4,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C5)+1,DAY(EOMONTH(C5,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C6)+1,DAY(EOMONTH(C6,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C7)+1,DAY(EOMONTH(C7,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C8)+1,DAY(EOMONTH(C8,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C9)+1,DAY(EOMONTH(C9,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C10)+1,DAY(EOMONTH(C10,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C11)+1,DAY(EOMONTH(C11,1))),"yyyy-mm-dd") =TEXT(DATE(C$1,MONTH(C12)+1,DAY(EOMONTH(C12,1))),"yyyy-mm-dd") 

(Nota: Envolví las dates en el TEXT(..., "yyyy-mm-dd") porque ese es el significado de los valores de la columna A. Quítelo si realmente son dates y no text)

Ahora podemos agregar una fórmula de coincidencia de índice para get los valores correspondientes:

 ABCD ---------------------------------------------------------------- Date MTD Revenue 2015 MTD Revenue 2015-03-09 € 2,855.270 2015-01-31 =INDEX(B:B,MATCH(C2,A:A,0)) 2015-03-10 € 3,534.550 2015-02-28 =INDEX(B:B,MATCH(C3,A:A,0)) 2015-03-11 € 3,791.760 2015-03-31 =INDEX(B:B,MATCH(C4,A:A,0)) 2015-03-12 € 4,024.680 2015-04-30 =INDEX(B:B,MATCH(C5,A:A,0)) 2015-03-15 € 4,182.020 2015-05-31 =INDEX(B:B,MATCH(C6,A:A,0)) 2015-03-16 € 4,317.610 2015-06-30 =INDEX(B:B,MATCH(C7,A:A,0)) 2015-03-17 € 4,439.900 2015-07-31 =INDEX(B:B,MATCH(C8,A:A,0)) 2015-03-18 € 4,585.070 2015-08-31 =INDEX(B:B,MATCH(C9,A:A,0)) 2015-03-19 € 4,798.900 2015-09-30 =INDEX(B:B,MATCH(C10,A:A,0)) 2015-03-20 € 4,903.830 2015-10-31 =INDEX(B:B,MATCH(C11,A:A,0)) 2015-03-21 € 4,959.710 2015-11-30 =INDEX(B:B,MATCH(C12,A:A,0)) 2015-03-23 € 5,203.690 2015-12-31 =INDEX(B:B,MATCH(C13,A:A,0)) ... ... 

Debería verse así después:

 ABCD ------------------------------------------------ Date MTD Revenue 2015 MTD Revenue 2015-03-09 € 2,855.270 2015-01-31 #N/A 2015-03-10 € 3,534.550 2015-02-28 #N/A 2015-03-11 € 3,791.760 2015-03-31 6,541.27 2015-03-12 € 4,024.680 2015-04-30 6,327.07 2015-03-15 € 4,182.020 2015-05-31 #N/A 2015-03-16 € 4,317.610 2015-06-30 #N/A 2015-03-17 € 4,439.900 2015-07-31 #N/A 2015-03-18 € 4,585.070 2015-08-31 #N/A 2015-03-19 € 4,798.900 2015-09-30 #N/A 2015-03-20 € 4,903.830 2015-10-31 #N/A 2015-03-21 € 4,959.710 2015-11-30 #N/A 2015-03-23 € 5,203.690 2015-12-31 #N/A ... ... 

Entonces podemos seguir adelante y hacer el gráfico (columna agrupada en 2D … según se solicite):

enter image description here

Nota final: Técnicamente, dado que sus datos son dates, sería más correcto usar un gráfico lineal sobre una columna agrupada en 2D.

Si quieres una solución vba testing esto:

 Sub Month_Chart() Dim mydate As Date Dim myRange, totrange As Range Set totrange = Range("A1:B1") 'Select Dates based on selection For Each c In Selection 'Build date mydate = DateSerial(Left(c, 4), Mid(c, 6, 2), Mid(c, 9, 2)) 'Check last day of month If Day(mydate + 1) = 1 Then 'Create Range Set myRange = Range(c, c.Offset(0, 1)) Set totrange = Union(totrange, myRange) End If Next c 'Create Chart ActiveSheet.Shapes.AddChart2(201, xlColumnClustenetworking).Select ActiveChart.SetSourceData Source:=totrange End Sub