Как я могу контролировать цвет отдельных сегментов круговой диаграммы в Excel? - PullRequest
7 голосов
/ 26 декабря 2010

Я бы хотел иметь возможность программно контролировать цвет сечений на круговой диаграмме. В идеале моя диаграмма должна основываться на таблице из трех столбцов, в которой столбцы: «Значение данных», «Метка» и «Значение цвета круговой диаграммы». Значения цвета будут теми же числами, которые можно увидеть в свойствах формы Access.

Спасибо

Стив

Ответы [ 4 ]

2 голосов
/ 26 декабря 2010

Возможно, что-то на этих строках?

Dim ws As Worksheet
Dim sh As Shape

Set ws = Sheet2
Set sh = ws.Shapes.AddChart '.Select

With sh.Chart
    .ChartType = xlPie
    .SetSourceData Source:=Range("Sheet1!$A$1:$B$3")

    For i = 1 To .SeriesCollection(1).Points.Count
        With .SeriesCollection(1).Points(i).Format.Fill
            .ForeColor.RGB = Range("C" & i).Interior.Color

            .Solid
        End With
    Next
End With

Это позволит вам добавить цвет в ячейку с помощью кнопки заливки и использовать его для сегмента.

2 голосов
/ 26 декабря 2010
Sub a()
    ActiveSheet.ChartObjects("Chart 1").Activate
    ActiveChart.SeriesCollection(1).Points.Item(1).Interior.ColorIndex = 7
End Sub  

Вы можете узнать цвет, представленный ColorIndex с помощью трюка, который я опубликовал в Этот другой ответ

0 голосов
/ 07 января 2018

Может быть, это можно сделать с помощью VBA, но здесь я предлагаю другое решение, которое позволит вам сделать это, используя JavaScript .Вы можете использовать бесплатную надстройку Excel под названием Funfun, которая позволяет использовать код JavaScript непосредственно в Excel.При этом вы можете использовать библиотеки, такие как HighCharts.js или D3.js, чтобы нарисовать круговую диаграмму и индивидуально управлять цветом.Вот пример, который я сделал на основе вашего описания.

enter image description here

Цвета различных частей круговой диаграммы определяются данными третьего столбца в электронной таблице.В этом примере я использовал HighCharts.js для управления рисованием этого графика.Конкретный код, который контролирует цвет, можно увидеть, как показано ниже.

  var pieColors =[];
  for(var i=1;i<data.length;i++){
    switch(parseInt(data[i][2])){
      case 0:
        pieColors.push('blue');
        break;
      case 1:
        pieColors.push('green');
        break;
      case 2:
        pieColors.push('orange');
        break;
      case 3:
        pieColors.push('purple');
        break;
      case 4:
        pieColors.push('red');
        break;
      case 5:
        pieColors.push('brown');
        break;
    }
  }

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

Надстройка Funfun также имеет онлайн-редактор, в котором вы можете проверить свой код и результаты.Вы можете проверить подробный код и этот пример по ссылке ниже.

https://www.funfun.io/1/#/edit/5a4f4680c3a8a526caeec989

Как только вы будете удовлетворены результатом, вы можете легко загрузить результат в Excel, используя ссылку выше.Но, конечно, во-первых, вам нужно добавить надстройку Funfun в Excel с помощью Вставка - Надстройки Office .Вот несколько скриншотов, показывающих, как вы загружаете пример в Excel.

enter image description here

enter image description here

Раскрытие информации: я разработчик Funfun

0 голосов
/ 24 декабря 2011

Прежде всего, я знаю, что это можно сделать.У BeGraphic есть бесплатная надстройка для Excel с функцией установки цветов элемента диаграммы в электронной таблице.См .:

Это использование надстройки.Я должен сказать, что результаты впечатляют.Для себя мне нужно было что-то более Excel- native , многие другие найдут этот вариант верхней полки.

В то время как опция VB из Remou и надстройка begraphic делают дело.Для меня, или, по крайней мере, для текущего проекта, мне нужно решение на основе Excel (насколько это возможно и возможно).В то же время, вы, замечательные люди, и я можете найти обходные пути через VB, VBA, .Net и / или макросы.Посетите сайт Джона П. для доступных вариантов.

Если я обнаружу ' больше ' - я передам его обратноэтот запрос.

алоха ,Будет

...