Прореживание маркеров
Избыточное количество данных одного графика диаграммы приводит к трудности использования маркеров для обозначения линии. При этом отказываются от маркеров, применяют пунктирные/штрихпунктирные линии, выполняют выноски/подписи и т.д. Однако есть способ проще - провести "прополку" маркеров. Разница отчётливо видна на скриншоте:
Для этого можно воспользоваться макросом:
' ===========================
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.
' ===========================
О себе - я не являюсь профессиональным программистом. Поэтому спокойно отношусь к конструктивной и обоснованной критике и предложениям по вопросам программирования. Однако понятность кода для меня на первом месте.