Macro y gráfico con rango variable

Necesito crear un gráfico sin una tabla dinámica donde lo que se gráfica va variando según el indicador que el usuario seleccione (mediante una lista desplegable donde le aparecen todos los indicadores disponibles para visualizar)
Ejemplo: Si el usuario selecciona el indicador 1, se debe graficar en el eje por los datos de la columna C y el eje y, los datos de la columna d. Ahora bien, si el usuario selecciona el indicador 2, el eje por permanece constante (lee los mismos datos, los de la columna C), pero el eje Y debe tomar los datos de la columna E. Y así sucesivamente
¿Es posible realizar esto? ¿Alguien sabe como?
Muchas gracias!
{"lat":-34.4774816235954,"lng":-58.4993648529053}

1 respuesta

Respuesta
1
En primer lugar ya tenés que tener tu gráfico creado, por ej con los datos de la col C y D.
Ahora, por lista desplegable entiendo una lista validada del menú DAtos. Si es así, entrá al Editor y seleccioná con doble clic el objeto HOJA donde estará tu lista, y allí copiá lo siguiente:
Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'si no se seleccionó nada en G1 se cancela el proceso......AJUSTAR REF
If Target.Address <> "$G$1" Then Exit Sub
'según lo seleccionado en G1 se asignará el rango para el gráfico
Select Case Target.Value
    Case Is = 1
    rgo = "C2:C8,D2:D8"
    Case Is = 2
    rgo = "C2:C8,E2:E8"
    Case Is = 3
    'rgo = .......    completar para el resto de los posibles valores
End Select
'se selecciona el gráfico y se cambia el rango. Como no sé el nbre del gráfico le digo que seleccione el gráfico 1º
    ActiveSheet.ChartObjects(1).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.SetSourceData Source:=Sheets("Hoja3").Range(rgo), _
        PlotBy:=xlColumns
   ' ActiveWindow.Visible = False
    'Windows("FeedbackPC01.xls").Activate
    Range("G2").Select
End Sub
Ajustá tus rangos y celda con lista desplegable, pruébalo y si todo quedó resuelto no olvides finalizar la consulta.
Elsa,
Gracias por tu respuesta. Lamentablemente no se nada de nada de macros por lo que intente hacer lo que me dijiste y me tira error.
Paso a comentarte como tengo yo los datos organizados así me podes ayudar con el código de la macro utilizando las referencias reales
La hoja donde esta el gráfico y los datos que se deberán mostrar se llama "Top-Bottom 10"
En la columna C (filas 28 a 37) tengo nombres de personas, que son los que se graficarian en el eje x. De estos, filtro los 10 superiores a graficar. De la columna DE a la I tengo los datos de los indicadores que quiero graficar (eje y)
Cree un "cuadro de lista" (así me aparece que se llama) que puede tomar los 6 valores referentes a los indicadores que quiero graficar.
Mi idea entonces seria que, al seleccionar un indicador del cuadro de lista, automáticamente me grafique la columna DE si elijo el indicador 1, la columna E, si elijo el indicador 2, la columna F si elijo el indicador 3 y así sucesivamente, manteniendo el eje x constante con los valores de la columna C
Muchas gracias y disculpa la molestia!
Slds
En la hoja, en lugar de un cuadro de lista, usá una lista validada del menú Datos, Validación, Lista y en el campo colocá el rango, por ej: Z1:Z6 (en ese rango debés colocar la lista de valores a mostrar en el desplegable)
NOTA: en mi rutina imaginé que la lista desplegable estará en celda G1, ajustá esta ref en la macro.
Desde el Editor, seleccioná con doble clic la hoja Top-Bottom 10 y allí pegá la rutina.
Private Sub Worksheet_Change(ByVal Target As Range)
'x Elsamatilde
'si no se seleccionó nada en G1 se cancela el proceso......AJUSTAR REF
If Target.Address <> "$G$1" Then Exit Sub
'según lo seleccionado en G1 se asignará el rango para el gráfico
Select Case Target.Value
    Case Is = 1
    rgo = "C28:C37,D28:D37"
    Case Is = 2
    rgo = "C28:C37,E28:E37"
    Case Is = 3
    'rgo = .......    completar para el resto de los posibles valores
End Select
'se selecciona el gráfico y se cambia el rango. Como no sé el nbre del gráfico le digo que seleccione el gráfico 1º
    ActiveSheet.ChartObjects(1).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.SetSourceData Source:=Sheets("Top-Bottom 10").Range(rgo), _
        PlotBy:=xlColumns
 'opcional seleccionar alguna celda
    Range("G1").Select
End Sub
Recordá que el gráfico ya tiene que estar creado, hacelo con el primer rango.
Sdos
Elsa
Ohhh cuánto hace que no voy por Acassuso...;)
Elsa, me tira error acá
ActiveSheet. ChartObjects(Top / Bottom_10).Activate
¿Sabes por que? "Top / Bottom 10" el el titulo que le puse al gráfico
Slds
Disculpa Elsa, el error que te comente que me tiraba antes ya lo pude solucionar
Ahora estoy teniendo problemas con este código
ActiveChart.SetSourceData Source:= Sheets("Top-Bottom 10 B-767 (2)").Range(rgo),
        PlotBy:=xlColumns
Escribime la rutina completa o enviame tu hoja al correo que encontrarás en mi sitio
Ahi te lo envie Elsa
Muchas gracias
No finalices aún hasta que te lo devuelva.
Dale no hay problema!
Estoy atenta y a la espera de tu respuesta
Slds,
Respuesta enviada y completada. Finaliza ésta y luego continuamos con la próxima, que deberás dejarla en el tablón.
Sdos
Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas