Vba - создать диаграмму с другим диапазоном столбцов

В своей книге я создаю с помощью макроса несколько диаграмм, диаграммы получают данные из листа «FG_Count». Но я не знаю, как написать макрос, чтобы он всегда использовал правый столбец.

Данные для диаграммы находятся в диапазоне B3 / D3 / F3 / H3, а диаграммы создаются с помощью цикла For-Loop.

Вот мой макрос для создания диаграмм.

Private Sub CommandButton1_Click()
    Dim v
    Dim a As Integer 

    For Each s In ActiveWorkbook.Sheets
        If s.Visible = True Then
            v = v + 1
        End If
    Next s

    a = 1
    For i = 2 to v 
        ActiveSheet.Shapes.AddChart2(240, xlXYScatter).Select
        With ActiveChart
            For Each s In ActiveChart.SeriesCollection
                s.Delete
            Next s
            .SeriesCollection.NewSeries
            .FullSeriesCollection(1).Name = "='Project Overview'!$B$" & a

            ' Here I don't know how to write the Code that it works
            .FullSeriesCollection(1).XValues = "='FG_Count'!$ ...."

            .FullSeriesCollection(1).Values = "={1}"
            .Axes(xlCategory).Select
            .Axes(xlCategory).MaximumScale = 1
        End With
        a = a + 1
    Next i
End Sub

Обновлено:

Смогу найти решение .. может не самое лучшее, но работает :)

For i = 2 To v
    Dep = Worksheets(i).Name

    If i = 2 Then
        ColumnLetter = "B"
    ElseIf i = 3 Then
        ColumnLetter = "D"
    ElseIf i = 4 Then
        ColumnLetter = "F"
    ElseIf i = 5 Then
        ColumnLetter = "H"
    ElseIf i = 6 Then
        ColumnLetter = "J"
    ElseIf i = 7 Then
        ColumnLetter = "L"
    ElseIf i = 8 Then
        ColumnLetter = "N"
    End If

    ActiveSheet.Shapes.AddChart2(240, xlXYScatter).Select
    With ActiveChart
        For Each s In ActiveChart.SeriesCollection
            s.Delete
        Next s
        .SeriesCollection.NewSeries
        .FullSeriesCollection(1).Name = "='Project Overview'!$B$" & e
        .FullSeriesCollection(1).XValues = "='FG_Count'!$" & ColumnLetter & "$3"
        .FullSeriesCollection(1).Values = "={1}"
        .Axes(xlCategory).Select
        .Axes(xlCategory).MaximumScale = 1
    End With
Next

попробуйте записать макрос, делая то, что вам нужно, и ... получите вдохновение!

DisplayName 10.09.2018 10:01
0
1
23
1

Ответы 1

Секрет в том, что буква A имеет код ASCII 65. Затем мы можем использовать функцию CHR $ для преобразования значения ASCII в текст. Таким образом, вы можете заменить весь свой

 If i = 2 Then
    ColumnLetter = "B"

блок с

  ColumnLetter = Chr$(64 + i)

Другие вопросы по теме