Условно изменить цвета отдельных столбцов в гистограмме в Excel VB на основе диапазона - PullRequest
3 голосов
/ 14 марта 2012

Я работаю над проектом Excel и пытаюсь отформатировать цвета гистограммы (а затем и круговой диаграммы по той же причине), чтобы отобразить RED, GREEN или YELLOW на основедругой диапазон данных.Диапазон данных: ...

Лист : Overview

Диапазон : E15:E36

Эти значенияпроценты.Основываясь на процентном соотношении, я бы хотел, чтобы столбцы были отформатированы зеленым, красным или желтым цветом.

Если между 100 - 90, Зеленый Если между 89 - 70, Желтый Если между 69 - 1, Красный

Ниже приведен мой код на данный момент (для гистограммы):

    Sub Macro2()
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.SetSourceData Source:=Sheets("Overview").Range("A15:A36")
        ActiveChart.SetSourceData Source:=Sheets("Overview").Range("A15:A36,B15:B36")
        ActiveChart.ApplyLayout (2)
        ActiveSheet.ChartObjects("Chart 3").Activate
        ActiveChart.Legend.Select
        Selection.Delete
        ActiveSheet.ChartObjects("Chart 3").Activate
        ActiveChart.ChartTitle.Select
        ActiveSheet.ChartObjects("Chart 3").Activate
        ActiveChart.ChartTitle.Text = "Rating Site Distribution"
    End Sub

Любая помощь будет принята с благодарностью!Я совсем не знаком с VBA и чувствую себя совершенно не в этом элементе ...

Кроме того, будет ли работать та же функция для круговой диаграммы, чтобы определять цвет по тем же параметрам?

Спасибо заранее !!

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

здесь функция vba, которую я использую, чтобы инвертировать отрицательные бары, чтобы они были красными.Может быть, это можно адаптировать:

Функция вызывается из подпрограммы в модуле в рабочей книге следующим образом:

Sub FixTheGraph()
  FormatGraph("Overview")
End Sub

Вот функция.Вы можете просто вставить его ниже подпрограммы:

Function FormatGraph(myWorksheet As String)

Excel.Sheets(myWorksheet).Select

Dim myChartObject As ChartObject
For Each myChartObject In Excel.ActiveSheet.ChartObjects
    myChartObject.Select

    Dim myPoint As Integer, valArray

    With Excel.ActiveChart.SeriesCollection(1)
        valArray = .Values
        For myPoint = 1 To .Points.Count
            'myVal = valArray(myPoint)
            Select Case valArray(myPoint)
                Case 0.9 To 1
                    With .Points(myPoint)
                        .Interior.ColorIndex = 1 '<change colour to suit
                    End With
                Case 0.7 To 0.9
                    With .Points(myPoint)
                        .Interior.ColorIndex = 5 '<change colour to suit
                    End With
                Case Is < 0.7
                    With .Points(myPoint)
                        .Interior.ColorIndex = 3
                    End With
                End Select
        Next
    End With

Next myChartObject
Excel.Sheets(myWorksheet).Cells(1, 1).Select

End Function
2 голосов
/ 20 марта 2012

То, что вы хотите сделать, это тип диаграммы xlBarStacked.Тогда дайте ему три серии - по одной для каждого цвета.

В каждой серии, если значение элемента находится в диапазоне, используйте значение, в противном случае установите для элемента series.Value значение 0.

Поскольку ваши диапазоны являются взаимоисключающими, каждый столбец будет иметь толькоодин цвет.

...