** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Barra de Datos con Diferentes Colores
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Barra de Datos con Diferentes Colores

 Responder Responder
Autor
Mensaje
morenen Ver desplegable
Habitual
Habitual


Unido: 02/Mayo/2007
Localización: Navarra
Estado: Sin conexión
Puntos: 104
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita morenen Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Barra de Datos con Diferentes Colores
    Enviado: 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 

Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5381
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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 sitio_web con ejemplos Excel.
Arriba
morenen Ver desplegable
Habitual
Habitual


Unido: 02/Mayo/2007
Localización: Navarra
Estado: Sin conexión
Puntos: 104
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita morenen Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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.

Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5381
Opciones de entrada Opciones de entrada   Gracias (1) Gracias(1)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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 sitio_web con ejemplos Excel.
Arriba
morenen Ver desplegable
Habitual
Habitual


Unido: 02/Mayo/2007
Localización: Navarra
Estado: Sin conexión
Puntos: 104
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita morenen Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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


Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5381
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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 sitio_web con ejemplos Excel.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5381
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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 sitio_web con ejemplos Excel.
Arriba
morenen Ver desplegable
Habitual
Habitual


Unido: 02/Mayo/2007
Localización: Navarra
Estado: Sin conexión
Puntos: 104
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita morenen Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable