Как уменьшить диапазон выбора с 4 до 2 для создания графика VBA? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть два столбца данных, один из которых содержит половину отрицательных чисел и половину положительных чисел. Я создал диаграмму (разброс с прямыми линиями и маркерами) для данных, используя код ниже:

Sub Test2()

    Dim xData As Range
    Dim yData As Range
    Dim x2Data As Range
    Dim y2Data As Range
    Dim serName As Range


    'set the ranges to get the data and y value label

    Set xData = Application.Selection
    Set yData = Application.Selection
    Set x2Data = Application.Selection
    Set y2Data = Application.Selection

    Set serName = Range("AY2")


    'define range
    Set xData = Application.InputBox("xvalues", , xData.Address, Type:=8)
    Set yData = Application.InputBox("yvalues", , yData.Address, Type:=8)
    Set x2Data = Application.InputBox("x2values", , x2Data.Address, Type:=8)
    Set y2Data = Application.InputBox("y2values", , y2Data.Address, Type:=8)


    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet

    'create a new ChartObject at position (4100, 195) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(4100, 195, 400, 300)

    'get reference to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart

    'create the new series
    Dim ser As Series
    Set ser = cht.SeriesCollection.NewSeries

    ser.Values = yData
    ser.XValues = xData
    ser.Name = positivedcf
    ser.ChartType = xlXYScatterLines

    'create second series

    Dim ser2 As Series
    Set ser2 = cht.SeriesCollection.NewSeries

    ser2.Values = y2Data
    ser2.XValues = x2Data
    ser2.Name = negativedcf
    ser2.ChartType = xlXYScatterLines




End Sub

Как вы видите, я использовал 4 варианта, чтобы правильно построить график. Это вовлекало выбор раздела каждого столбца за один раз. Сейчас я хотел бы создать ту же диаграмму, но вместо 4-х вариантов я бы хотел использовать только 2. В идеале, эти 2 выбора будут просто выбирать оба столбца в полном объеме. Я хотел бы добиться этого, используя массивы тоже.

Может ли кто-нибудь помочь мне понять это? Если это поможет вам, я могу приложить изображение данных, которые я использовал для создания исходного графика. Заранее большое спасибо.

*** РЕДАКТИРОВАТЬ ****

Итак, я попробовал это ниже, заканчивая тем, что сделал график в 1 выделении, и это здорово. Однако на исходном графике были показаны как положительные, так и отрицательные части кривой разными цветами. По сути, я создал исходный граф, используя 2 ряда, которые встречаются при y = 0, давая эффект того, что все это одна кривая, тогда как в теории это две разные кривые. Если это имеет смысл?

Так есть ли способ сделать то же самое: по существу, создать график, используя 2 ряда, которые встречаются при y = 0, показывая положительные и отрицательные части кривой разными цветами, с 2 выбора (в идеале просто выделить оба столбца данных полностью) вместо исходных 4 выборов, которые я делаю?

Sub Test2()

    Dim xData As Range
    Dim yData As Range
    Dim serName As Range

    Dim TotalData As Range



    'set the ranges to get the data and y value label

    Set xData = Application.Selection
    Set yData = Application.Selection
    Set TotalData = Application.Selection




    'define range


    Set TotalData = Application.InputBox("AY3:AZ62", , TotalData.Address, Type:=8)
    Set yData = TotalData.Resize(ColumnSize:=1)
    Set xData = TotalData.Resize(ColumnSize:=1).Offset(ColumnOffset:=1)



    'get reference to ActiveSheet
    Dim sht As Worksheet
    Set sht = ActiveSheet

    'create a new ChartObject at position (4100, 195) with width 400 and height 300
    Dim chtObj As ChartObject
    Set chtObj = sht.ChartObjects.Add(4100, 195, 400, 300)

    'get reference to chart object
    Dim cht As Chart
    Set cht = chtObj.Chart

    'create the new series
    Dim ser As Series
    Set ser = cht.SeriesCollection.NewSeries

    ser.Values = yData
    ser.XValues = xData
    ser.Name = positivedcf
    ser.ChartType = xlXYScatterLines








End Sub

1 Ответ

0 голосов
/ 06 апреля 2020

Просто используйте одно поле, чтобы выбрать оба столбца (x и y)

Set TotalData = Application.InputBox("Select all data (x and y)", , TotalData.Address, Type:=8)

, а затем разделите его на 2 отдельных столбца (x и y)

Set xData = TotalData.Resize(ColumnSize:=1)
Set yData = TotalData.Resize(ColumnSize:=1).Offset(ColumnOffset:=1)
...