Прореживание маркеров

Избыточное количество данных одного графика диаграммы приводит к трудности использования маркеров для обозначения линии. При этом отказываются от маркеров, применяют пунктирные/штрихпунктирные линии, выполняют выноски/подписи и т.д. Однако есть способ проще - провести "прополку" маркеров. Разница отчётливо видна на скриншоте:

Прореживание маркеров Microsoft Excel, Vba, Плюшка, Длиннопост

Для этого можно воспользоваться макросом:

' ===========================

Sub Прореживание_маркеров()

' Активируем диаграмму

ActiveSheet.ChartObjects("Прореживание_после").Activate

' Перебор по всем графикам диаграммы

For k = 1 To ActiveChart.FullSeriesCollection.Count

' Удаляем маркеры на линии за исключением указанного шага

For i = 1 To ActiveChart.SeriesCollection(k).Points.Count

If (i Mod 9) <> 0 Then

ActiveChart.FullSeriesCollection(k).Points(i).MarkerStyle = -4142

End If

Next i

Next k

End Sub

' ===========================

где:

"Прореживание_после" - название диаграммы

"i Mod 9" - указание частоты оставленных маркеров. В данном примере остаётся каждый 9-й маркер, начиная с 9-го.

Из минусов можно отметить необходимость выставления всех маркеров перед каждым прореживанием.


Есть другой вариант: в начале стереть все маркеры, а потом назначить. При этом есть возможность указать тип маркера и его размер и любой другой необходимый параметр.

' ===========================

Sub Прореживание_маркеров_2()

' Активируем диаграмму

ActiveSheet.ChartObjects("Прореживание_после").Activate

' Перебор по всем графикам диаграммы

For k = 1 To ActiveChart.FullSeriesCollection.Count

' Удаляем все маркеры на линии

For i = 1 To ActiveChart.SeriesCollection(k).Points.Count

ActiveChart.FullSeriesCollection(k).Points(i).Select

Selection.MarkerStyle = -4142

Next i

' Выставляем маркеры с требуемым шагом.

For i = 1 To ActiveChart.SeriesCollection(k).Points.Count Step 9 ' Указываем частоту маркеров

ActiveChart.FullSeriesCollection(k).Points(i).Select

With Selection

' Тип маркеров будет разным для каждой линии (если линий до 9-ти)

' Если линий более 9-ти, то можно указывать заливки/границы маркера

.MarkerStyle = k

' Указание размера маркера

.MarkerSize = 7 

End With

Next i

Next k

End Sub

' ===========================

Если маркеры двух графиков "налезают" друг на друга, то можно сдвинуть их отображение, например используя номер графика "(i + k * 3)":

' ===========================

Sub Прореживание_маркеров()

' Активируем диаграмму

ActiveSheet.ChartObjects("Прореживание_после").Activate

' Перебор по всем графикам диаграммы

For k = 1 To ActiveChart.FullSeriesCollection.Count

' Удаляем маркеры на линии за исключением указанного шага

For i = 1 To ActiveChart.SeriesCollection(k).Points.Count

If ((i + k * 3) Mod 9) <> 0 Then

ActiveChart.FullSeriesCollection(k).Points(i).MarkerStyle = -4142

End If

Next i

Next k

End Sub

' ===========================

Прореживание маркеров Microsoft Excel, Vba, Плюшка, Длиннопост

dixi.

' ===========================

О себе - я не являюсь профессиональным программистом. Поэтому спокойно отношусь к конструктивной и обоснованной критике и предложениям по вопросам программирования. Однако понятность кода для меня на первом месте.

MS, Libreoffice & Google docs

719 постов15K подписчиков

Добавить пост

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

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