Imprimir página | Cerrar ventana

Barra de Datos con Diferentes Colores

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=84024
Fecha de impresión: 26/Junio/2019 a las 05:59


Tema: Barra de Datos con Diferentes Colores
Publicado por: morenen
Asunto: Barra de Datos con Diferentes Colores
Fecha de publicación: 18/Octubre/2018 a las 16:45
Hola

Estoy tratando de hacer uso de las barras de datos de excel, pero me gustaria poder aplicar un color a la barra (no al relleno de la celda) en funcion su valor.
Por ejemplo: 
- Si el valor es menor a 33% poner la barra verde.
- Si el valor es mayor a 33% y menor a 66% poner la barra amarilla
- Si el valor es mayor a 66% poner la barra roja.

¿Es posible hacerlo o tengo que elegir entre tener la barra de datos  o tener los colores?

Gracias de antemano 




Respuestas:
Publicado por: AnSanVal
Fecha de publicación: 18/Octubre/2018 a las 17:20
¿Que son «...  las barras de datos de excel…»?  una imagen ayudaría.




-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: morenen
Fecha de publicación: 18/Octubre/2018 a las 17:30
Hola,

Son las barras de datos que se aplican en los formatos condicionales. Adjunto una captura de internet. No se como subir una captura de mi pantalla.



Publicado por: AnSanVal
Fecha de publicación: 18/Octubre/2018 a las 21:27

Ahora te entiendo «Formato condicional - Barras de datos».


Hasta donde sé, este formato no admite barras con diferentes colores, solo un color u otro, para todo el rango.


El formato «Escala de colores» si permite 3 colores, pero no con escalas fijas sino que los valores intermedios presentan un tono intermedio progresivo, y además ocupa toda la celda (no quieres que sea así) y por tanto el ancho con color no está acorde con cada valor. 


Ocupando toda la celda si podrías con 3 formatos independientes (personalizados) la ventaja de este método es que puedes elegir colores por rangos concretos de valores, pero... ya sé que no es lo que pides.


No afirmo que no se pueda hacer (no soy muy 'de formatos' y mi experiencia en el tema no es mucha) pero al menos yo no sé como lograrlo. ¡Lo siento!




-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: morenen
Fecha de publicación: 19/Octubre/2018 a las 11:29
Hola,

Gracias por intentarlo

Creo que he podido hacerlo.
En esencia: 
 1) utilizo el evento de cambio de celdas y capturo cada vez que se cambia esa celda
 2) borro el formato asignado a esa celda
 3) Creo un nuevo formato  sobre esa celda
 4) En función del valor de la celda, aplico un color a la barra u otro.

Lo tengo que hacer borrando el formato de cada celda, porque si no me afectaba al resto de columnas. 
Pongo el código. Es copiar y pegar.

'Ejecuto el procedimiento cada vez que la celda cambia (en mi caso al pulsar la tecla enter y pasar a la fila de abajo
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim fila As Integer
Set KeyCells = Range("F3:F100") 'Rango Afectado por el evento
fila = ActiveCell.Row - 1 'Obtengo la fila que acabo de cambiar
  If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
        ActiveSheet.Cells(fila, 6).Select 'Selecciono la celda cambiada
        Selection.FormatConditions.Delete 'Borro los formatos condicionales
        Selection.FormatConditions.AddDatabar 'Añado la barra datos del formato condicional y aplico los valores comunes (a excepcion del color)
        Selection.FormatConditions(Selection.FormatConditions.Count).ShowValue = True
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1)
                .MinPoint.Modify newtype:=xlConditionValueNumber, newvalue:=0
                .MaxPoint.Modify newtype:=xlConditionValueNumber, newvalue:=100
        End With
        Selection.FormatConditions(1).BarFillType = xlDataBarFillSolid
        Selection.FormatConditions(1).Direction = xlContext
        Selection.FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
        Selection.FormatConditions(1).BarBorder.Type = xlDataBarBorderNone
        Selection.FormatConditions(1).AxisPosition = xlDataBarAxisAutomatic
        With Selection.FormatConditions(1).AxisColor
            .color = 0
            .TintAndShade = 0
        End With
        With Selection.FormatConditions(1).NegativeBarFormat.color
            .color = 255
            .TintAndShade = 0
        End With
        Select Case Selection ' Segun su valor aplico el color
            Case Is < 25
                With Selection.FormatConditions(1).BarColor
                    .color = RGB(0, 255, 0)
                    .TintAndShade = 0
                End With
            Case Is < 50
                With Selection.FormatConditions(1).BarColor
                    .color = RGB(255, 0, 0)
                    .TintAndShade = 0
                End With
            Case Is < 75
                With Selection.FormatConditions(1).BarColor
                    .color = RGB(0, 0, 255)
                    .TintAndShade = 0
                End With
            Case Is > 75
                With Selection.FormatConditions(1).BarColor
                    .color = RGB(100, 100, 100)
                    .TintAndShade = 0
                End With
        End Select
        ActiveSheet.Cells(fila + 1, 6).Select 'Me coloco en la fila siguiente
    End If
End Sub


Me queda pulirlo para que quede más elegante y que no se limite a si pulso la tecla enter o no.

Un saludo




Publicado por: AnSanVal
Fecha de publicación: 19/Octubre/2018 a las 17:19
Es una buena idea para resolver tu necesidad.

Estudiaré tu código. De momento puedo decirte que no necesitas fila ni seleccionar la celda modificada, puedes trabajar directamente con Target que es la celda modificada.

¡Gracias por compartir tu idea!



-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: AnSanVal
Fecha de publicación: 19/Octubre/2018 a las 18:52

Adaptando tu código a los porcentajes y colores de tu consulta y recortándolo un poco, me funciona así:


Private Sub Worksheet_Change(ByVal Target As Range)

  If Not Application.Intersect(Target, Range("F3:F100")) Is Nothing Then

'Borro los formatos condicionales.

    Target.FormatConditions.Delete

'Finaliza si el cambio afecta a varias celdas (por ejemplo borrar más de una celda).

    If Target.Cells.Count > 1 Then Exit Sub

'Añado la barra datos del formato condicional y aplico los valores comunes.

    Target.FormatConditions.AddDatabar

    Target.FormatConditions(Target.FormatConditions.Count).ShowValue = True

    Target.FormatConditions(Target.FormatConditions.Count).SetFirstPriority

    With Target.FormatConditions(1)

      .MinPoint.Modify newtype:=xlConditionValueNumber, newvalue:=0

      .MaxPoint.Modify newtype:=xlConditionValueNumber, newvalue:=1 '100

      .BarFillType = xlDataBarFillSolid

      .Direction = xlContext

      .NegativeBarFormat.ColorType = xlDataBarColor

      .BarBorder.Type = xlDataBarBorderNone

      .AxisPosition = xlDataBarAxisAutomatic

      .BarColor.TintAndShade = 0

    End With

'Segun su valor aplico el color.

    Select Case Target.Value

      Case Is < 0.33

        Target.FormatConditions(1).BarColor.Color = vbGreen

      Case Is < 0.66

        Target.FormatConditions(1).BarColor.Color = vbYellow

      Case Is >= 0.66

        Target.FormatConditions(1).BarColor.Color = vbRed

    End Select

  End If

End Sub 'Worksheet_Change



Prueba con tus propios datos.





-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: morenen
Fecha de publicación: 01/Noviembre/2018 a las 11:54
Hola,
Gracias por la info.
Lo reviso en cuanto pueda. Añadi target para capturar la celda, como comentaste.
Tambien, modifique el rango de celdas modificadas.

Lo dicho, lo reviso y comento.

Un saludo



Imprimir página | Cerrar ventana