Imprimir página | Cerrar ventana

Gráfico que tome los colores de los datos

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85854
Fecha de impresión: 23/Abril/2024 a las 21:33


Tema: Gráfico que tome los colores de los datos
Publicado por: lbauluz
Asunto: Gráfico que tome los colores de los datos
Fecha de publicación: 04/Marzo/2021 a las 16:36
Buenas tardes a todos.

Estoy intentando hacer un gráfico (a ser posible lineal) donde cambie el color de la línea (una única línea) en función del color de los datos en la hoja Excel.

Es decir, si tengo un gráfico que me enseñe los valores desde C1 hasta C100

Normalmente saldría una línea de un solo color mostrando la gráfica correspondiente.

Ahora bien, si yo tengo los datos de C1 a C50 en rojo, de C51 a c 100 en verde, ¿es posible sacar un gráfico lineal donde la primera parte de la línea sea roja y la segunda verde?

En este ejemplo he puesto dos colores, pero en la vida real podrían ser N colores, incluso repetirse en distintos "segmentos" del gráfico.

Dado que es un excel mío, puedo añadir filas o poner controles sin problema, pero no se me ocurre como hacerlo para conseguir este efecto.

Cualquier idea, por descabellada que parezca, será muy bienvenida.

Luis


-------------
El Búho es un pajarraco



Respuestas:
Publicado por: Mihura
Fecha de publicación: 04/Marzo/2021 a las 16:50
No hagas una línea, haz 100 y cada 'trozo' lleva el color en función de la celda origen.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: lbauluz
Fecha de publicación: 04/Marzo/2021 a las 17:04
Gracias Muuuu

Esa es una de las cosas que intento, pero ¿como decirle que tome ese color?

-------------
El Búho es un pajarraco


Publicado por: Mihura
Fecha de publicación: 04/Marzo/2021 a las 17:14
Esto lo utilizo desde Access con automatización, tendrás que traducirlo a Excel, pero no creo que te de problemas ... apunte, una línea es un rectángulo muuuuu finito

Public Sub Rectangulo(Optional ByVal Rango As String = "", Optional ByVal DescuentoAlto = 0, Optional ByVal DescuentoIzquierda = 0, Optional ByVal DescuentoDerecha = 0, Optional ByVal ColorLinea = "", Optional ByVal ColorRelleno = "", Optional ByVal GrosorLinea = "")
    Dim AnchoRect As Long
    
    If Rango <> "" Then Me.XRango = Rango
    Xls.ActiveSheet.Range(Me.XRango).Select
    'protegemos el posible valor erroneo de ancho
    AnchoRect = Xls.Selection.Width - (DescuentoIzquierda + DescuentoDerecha): If AnchoRect < 0 Then AnchoRect = 2
    Xls.ActiveSheet.Shapes.AddShape(msoShapeRectangle, Xls.Selection.Left + DescuentoIzquierda, Xls.Selection.Top + DescuentoAlto, AnchoRect, Xls.Selection.Height - (DescuentoAlto * 2)).Select
    If ColorLinea <> "" Then Xls.Selection.ShapeRange.Line.ForeColor.RGB = ColorLinea
    If ColorRelleno <> "" Then Xls.Selection.ShapeRange.Fill.ForeColor.RGB = ColorRelleno
    If GrosorLinea <> "" Then Xls.Selection.ShapeRange.Line.Weight = GrosorLinea
End Sub




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: AnSanVal
Fecha de publicación: 04/Marzo/2021 a las 21:23
La línea en el gráfico realmente son 99 líneas que unen los 100 puntos.

¿El color en los datos lo tiene la fuente o la celda?




-------------
Saludos desde Tenerife.


Publicado por: AnSanVal
Fecha de publicación: 04/Marzo/2021 a las 22:24
Hice un ejemplo (con ayuda de Santa grabadora):
Fechas en A2:A20 (A1 = Fecha)  para el eje horizontal
Números en B2:B20 (B1 = datos)  El número de filas es indiferente.

Sub colorDeLinea()
  Dim punto&, p1&, p2&, miColor As Double
  p1 = 2
  p2 = Cells(Rows.Count, 1).End(xlUp).Row - 1
  ActiveSheet.ChartObjects("3 Gráfico").Activate
  For punto = p1 To p2
    miColor = Cells(punto, 2).Font.Color
    With ActiveChart.SeriesCollection(1).Points(punto).Format.Line
      .ForeColor.RGB = miColor
    End With
  Next punto
  [C1].Select
End Sub

Nota: coloreé a mano los números (fuente). Si el color lo tienes por formato condicional, el procedimiento para obtener el color será diferente (emplea la fórmula del propio FC).




-------------
Saludos desde Tenerife.


Publicado por: lbauluz
Fecha de publicación: 08/Marzo/2021 a las 11:33
Pues no lo consigo, la función de Antonio me casca en "With ActiveChart.SeriesCollection(1)." asi que sigo buscando (en mis ratos libres) una solución.

Y lo de Mihura, lo estoy traduciendo, pero de momento nada tampoco.


En cuanto tenga un par de horas, a ver si lo soluciono

Gracias

Luis


-------------
El Búho es un pajarraco


Publicado por: Emilio
Fecha de publicación: 08/Marzo/2021 a las 13:01
Buenas.
Luis, échale un ojo a https://andypope.info/charts/conditionalline2.htm" rel="nofollow - https://andypope.info/charts/conditionalline2.htm , en esa página hay un puñado de magníficos ejemplos de gráficos Excel.


-------------
Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/" rel="nofollow - http://www.mvp-access.es/emilio/


Publicado por: Mihura
Fecha de publicación: 08/Marzo/2021 a las 14:48
Don Luis, en una hoja (ThisWorkBook), Copia / pega y ejecuta AA.

Option Explicit

Public Function Rectangulo(XRango As String, Optional ByVal DescuentoAlto = 0, Optional ByVal DescuentoIzquierda = 0, Optional ByVal DescuentoDerecha = 0, Optional ByVal ColorLinea = "", Optional ByVal ColorRelleno = "", Optional ByVal GrosorLinea = "")
    Dim AnchoRect As Long
    
    ActiveSheet.Range(XRango).Select
    'protegemos el posible valor erroneo de ancho
    AnchoRect = Selection.Width - (DescuentoIzquierda + DescuentoDerecha): If AnchoRect < 0 Then AnchoRect = 2
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, Selection.Left + DescuentoIzquierda, Selection.Top + DescuentoAlto, AnchoRect, Selection.Height - (DescuentoAlto * 2)).Select
    If ColorLinea <> "" Then Selection.ShapeRange.Line.ForeColor.RGB = ColorLinea
    If ColorRelleno <> "" Then Selection.ShapeRange.Fill.ForeColor.RGB = ColorRelleno
    If GrosorLinea <> "" Then Selection.ShapeRange.Line.Weight = GrosorLinea
End Function

Function AA()
    Rectangulo "A1:G1", ColorLinea:=vbRed, ColorRelleno:=vbGreen
End Function


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: AnSanVal
Fecha de publicación: 08/Marzo/2021 a las 19:53
Como no comentabas nada, daba por hecho que lo tenias controlado, incluso eliminé el ejemplo.

Acabo de hacer  http://www.achinet.mvp-access.es/excel/Ayudas/Graf%C2%B7LuisB.rar" rel="nofollow - este otro .

Si te «atascas» pásame el modelo de tus datos (con datos ficticios) con detalles de lo que te ocurre.





-------------
Saludos desde Tenerife.


Publicado por: lbauluz
Fecha de publicación: 09/Marzo/2021 a las 08:49
Antonio... quiero decir, Don Antonio.

¡Es usted un genio!

Cinco días devanándome los sesos y al final la solución es "así de simple"

Gracias mil.

Se da por cerrado con el ejemplo de AnSanVal.

Luis


-------------
El Búho es un pajarraco


Publicado por: Mihura
Fecha de publicación: 09/Marzo/2021 a las 09:02
Si señor, ... mas que Don, es Excmo  Tongue.

¡Que fácil son las cosas cuándo se sabe hacerlas!

Un saludo.


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es



Imprimir página | Cerrar ventana