Прореживание маркеров
Избыточное количество данных одного графика диаграммы приводит к трудности использования маркеров для обозначения линии. При этом отказываются от маркеров, применяют пунктирные/штрихпунктирные линии, выполняют выноски/подписи и т.д. Однако есть способ проще - провести "прополку" маркеров. Разница отчётливо видна на скриншоте:
Для этого можно воспользоваться макросом:
' ===========================
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
' ===========================
dixi.
' ===========================
О себе - я не являюсь профессиональным программистом. Поэтому спокойно отношусь к конструктивной и обоснованной критике и предложениям по вопросам программирования. Однако понятность кода для меня на первом месте.
MS, Libreoffice & Google docs
719 постов15K подписчиков
Правила сообщества
1. Не нарушать правила Пикабу
2. Публиковать посты соответствующие тематике сообщества
3. Проявлять уважение к пользователям
4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.
По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях
Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.
Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.