Última entrada de la serie de entradas del blog que empezó con el post Elementos seleccionados de un ListBox.
En este último post añadiremos las líneas de código que verifican punto por punto de la Serie de datos de nuestro gráfico, hasta encontrar las coincidencias con los elementos seleccionados, que como vimos en el anterior post, tenemos recogidos en nuestra matriz redimensionada.
A continuación del código de la entrada anterior ,insertaremos en la Hoja1 (en la hoja donde se encuentre nuestro ListBox) del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel, con un evento click, quedando:
Finalizada la programación, estamos dispuestos a probarla. Si seleccionamos varios elementos desde el ListBox, y ejecutamos la macro presionando el CommandButton que hemos llamado 'Ejecutar', veremos la acción resultante en el gráfico, cambiando de color Azul(vbBlue) a Rojo(vbRed) los puntos correspondientes.
Podemos ver una imagen:
En este último post añadiremos las líneas de código que verifican punto por punto de la Serie de datos de nuestro gráfico, hasta encontrar las coincidencias con los elementos seleccionados, que como vimos en el anterior post, tenemos recogidos en nuestra matriz redimensionada.
A continuación del código de la entrada anterior ,insertaremos en la Hoja1 (en la hoja donde se encuentre nuestro ListBox) del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel, con un evento click, quedando:
Private Sub CommandButton1_Click() Dim lItem As Long, seleccionados As Integer Dim MiMatriz() As Variant 'recorremos cada elemento del ListBox For i = 0 To ListBox1.ListCount - 1 'verificamos si está o no seleccionado 'en caso afirmativo, acumulamos el contador If ListBox1.Selected(i) = True Then seleccionados = seleccionados + 1 End If Next i 'comprobamos que hay algún elemento seleccionado If seleccionados = 0 Then MsgBox "Debes marcar al menos un cliente" Exit Sub End If 'redefinimos la matriz con el número de items seleccionados ReDim MiMatriz(1 To seleccionados, 1) As Variant x = 1 'recorremos todos los elementos del Listbox For lItem = 0 To ListBox1.ListCount - 1 'en caso de que el elemento esté seleccionado 'lo añadimos a una matriz 'que luego emplearemos para comparar en el gráfico If ListBox1.Selected(lItem) = True Then 'añadimos el item a la matriz redimensionada MiMatriz(x, 1) = ListBox1.List(lItem) 'dejamos el Listbox sin selección ListBox1.Selected(lItem) = False x = x + 1 End If Next lItem '''''''''''''''''''''''''''''''''''''' 'Trabajamos ahora sobre el gráfico Dim grafico As ChartObject Dim iPoint As Long, nPoint As Long Dim s As Series 'Definimos y localizacmos el gráfico Set grafico = Sheets(1).ChartObjects(1) Set s = grafico.Chart.SeriesCollection(1) nPoint = s.Points.Count 'unificamos el color de toda la serie s.Interior.Color = vbBlue 'recorremos los elementos de la matriz For itm = LBound(MiMatriz) To UBound(MiMatriz) 'recorremos el eje X, 'revisando si el nombre de los clientes 'coincide con los seleccionados en el Listbox For iPoint = 1 To nPoint If s.XValues(iPoint) = MiMatriz(itm, 1) Then s.Points(iPoint).Interior.Color = vbRed Next iPoint Next itm End Sub
Finalizada la programación, estamos dispuestos a probarla. Si seleccionamos varios elementos desde el ListBox, y ejecutamos la macro presionando el CommandButton que hemos llamado 'Ejecutar', veremos la acción resultante en el gráfico, cambiando de color Azul(vbBlue) a Rojo(vbRed) los puntos correspondientes.
Podemos ver una imagen:
Buen dia, soy nuevo en excel y tengo el siguiente problema: tengo un grafico de dispersion y necesito realizar un formato condicional a las etiquetas o series donde dependan de un valor, Ejemplo: si el valor de la etiqueta es menor que 3 dar color rojo si es mayor que 3 y menor que 4 dar color azul y si son mayores qe 4 dar color verde.
ResponderEliminarLes agradeceria enormemente que debo hacer para realizar este tipo de grafico ya que actualmente hago este cambio de color de las etiquetas manualmente.
Mil gracias.
Atentamente,
Dario Barreto
Hol Darío,
EliminarEntiendo que son a las etiquetas (y no a los puntos de dispersión) a lo que quieres dar formato...
No sé si querrías hacerlo con macros, si es así, puedes leer al respecto en
http://excelforo.blogspot.com.es/2012/02/vba-modificar-etiquetas-de-datos-en-un.html
y en esta misma entrada.
La otra opción sería hacerlo seleccionando las Etiquetas y dándole un formato personalizado a los números con este tipo:
[Rojo][<3]#.##0;[Azul][<4]#.##0;[Verde]#.##0
Espero te sirva
Slds
Hola Ismael, gracias por su pronta respuesta, pero no lo logro realizar; le comento que estoy haciendo lo siguiente:señalo la etiqueta, doy clic derecho y voy en opciones formato etiqueta de datos, en opciones etiqueta yo solo habilito nombre de la serie, que es el que debo cambiar de color dependiendo del valor de un campo (<4 rojas, >5 azul...) que es diferente al valor de (x,y) de la etiqueta, donde (Y) es un valor fijo y (X) es un valor variable. como decía yo cambio este color de etiqueta manualmente, no se si se podría realizarlo automáticamente, aclaro que no soy un usuario avanzado en excel.
EliminarDe antemano mil gracias.
Atentamente,
Dario Barreto
Hola Darío,
Eliminardesde Formato de Etiqueta, selecciona el menú Número > Tipo personalizado, y dentro de este, en el editable Tipo, introduce:
[Rojo][<3]#.##0;[Azul][<4]#.##0;[Verde]#.##0
Slds
Hola Ismael, le comento que me funciona perfectamente su solución cuando gráfico el valor de los campos (x ó y) y le agradezco enormemente en donde lo estoy utilizando en un gráfico, pero tengo el siguiente inconveniente para otro gráfico que estoy realizando: yo solo gráfico la etiqueta que es diferente a los valores de (x,y), esta etiqueta tiene un nombre aparte de los valores (x,y), Ejemplo: Nombre la etiqueta Dario (Nombre Digitado Manualmente), ubicación gráfica X=30(Valor Variable) y=15(Valor Fijo); en la gráfica solo muestro el nombre de la etiqueta (Dario) ó Valor de la serie.
EliminarMi inconveniente es que el color de esta etiqueta ó valor de la serie(Dario)depende de un campo totalmente diferente al (Valor de X y Valor de Y), Ejemplo: El valor del Campo es 1.65< colorear en rojo, si >=1,65 y 3< colorear en azul, si >=3 y < colorear amarillo, si > 5 colorear verde.
De antemano mil gracias por su pronta respuesta.
Atentamente,
Dario Barreto
Darío,
Eliminarpuedes modifcar el código de esta entrada:
http://excelforo.blogspot.com.es/2012/11/vba-grafico-de-dispersion-con-etiquetas.html
hay algo más de documentación de cómo cambiar colores de series, etiquetas en la categoría de Gráficos del blog.
Slds
Buen día Ismael, le comento que realice el gráfico como lo indica en su entrada y me gráfico perfecto el nombre de cada etiqueta, mil gracias por su ayuda.
EliminarPero le comento que no he podido dar color de las etiquetas, busque en los blog y no encontré como solucionarlo por ser un usuario básico en Excel e Internet.
Yo hice lo siguiente: En la Columna A coloque los nombres de las etiquetas, En la Columna B coloque el valor del Punto X, En la Columna C coloque el valor del Punto Y y, En la Columna D coloque el valor ó rango del color de la etiquetas.
Después de Colocar los datos ejecute su código y perfecto me coloca las etiquetas, ahora tengo el problema de colocar el color de las etiquetas llamando los valores de la Columna D, que este color dependería de 4 condiciones según el valor de las celdas de la columna D (1.65< Rojo; >1.65 y >3 Azul; >3 y <5 Amarillo; >5 Verde).
Qué pena molestarlo tanto pero no sé como realizar este proceso debido a que soy un usuario básico.
Mil gracias por su pronta respuesta.
Atentamente,
Dario
Hola Darío, envíame el fichero por email:
Eliminarexcelforo@gmail.com
Slds
Gracias Ismael, le acabe de enviar al email dos ficheros: el que realiza con el Post y el original que vengo realizando manualmente.
EliminarMil gracias.
Atentamente,
Dario
Ismael, muchas gracias por la paciencia y las solución de este problema que tenia al colocar el color de la etiquetas mediante condicionales.
EliminarAtentamente,
Dario
Gracias a ti.
EliminarUN atento saludo