Как расширить диапазон, включенный в график с помощью макроса

#excel #vba #graph

#excel #vba #График

Вопрос:

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

Смотрите Изображение ниже, где в мой график включен только столбец A — введите описание изображения здесь

Что мне нужно сделать, чтобы заставить его также включить следующий столбец — столбец B

Например:

введите описание изображения здесь

Что вы думаете?

Комментарии:

1. Попробуйте поместить свои данные в таблицу (вставка> таблица) и посмотреть, решит ли это вашу проблему.

2. Как заполняются значения в столбцах, вручную, с помощью VBA или по формуле?

Ответ №1:

Это работает для меня:

 Sub ExpandChartSource()
    
    Dim ObjChart As Object
    Dim RngSource As Range
    
    Set ObjChart = ActiveSheet.ChartObjects(1)
    
    Set RngSource = Range(Split(ObjChart.Chart.SeriesCollection(1).Formula, ",")(2))
    
    Set RngSource = RngSource.Resize(RngSource.Rows.Count, RngSource.Columns.Count   1)
    
    ObjChart.Chart.SetSourceData Source:=RngSource
    
End Sub
  

Вот более динамичная версия, полезная, если вы хотите неограниченно увеличивать данные:

 Sub ExpandChartSource()
    
    Dim ObjChart As Object
    Dim RngSource As Range
    Dim IntSeries As Integer
    Dim StrAddress As String
    
    Set ObjChart = ActiveSheet.ChartObjects(1)
    
    Set RngSource = Range(Split(ObjChart.Chart.SeriesCollection(1).Formula, ",")(2))
    StrAddress = RngSource.Cells(1, 1).Address
    
    Set RngSource = Range(Split(ObjChart.Chart.SeriesCollection(ObjChart.Chart.SeriesCollection.Count).Formula, ",")(2))
    StrAddress = StrAddress amp; ":" amp; RngSource.Cells(RngSource.Rows.Count, 1).Address
    
    Set RngSource = Range(StrAddress)
    
    Set RngSource = RngSource.Resize(RngSource.Rows.Count, RngSource.Columns.Count   1)
            
    ObjChart.Chart.SetSourceData Source:=RngSource
    
End Sub
  

Предполагается, что первая серия является самой левой, в то время как предполагается, что последняя серия находится справа.

Комментарии:

1. это потрясающе, спасибо, это сделало именно то, что я хотел.