Sub sort(x(), y(), n)
For i = 0 To n - 1
For j = 1 To n - i
If x(j - 1) > x(j) Then
t = x(j - 1)
x(j - 1) = x(j)
x(j) = t
t = y(j - 1)
y(j - 1) = y(j)
y(j) = t
End If
Next j
Next i
End Sub
Sub test_plot()
'適当なデータを用意
Dim x1(5), y1(5)
Dim x2(14), y2(14)
For i = 0 To 5
x1(i) = Rnd
y1(i) = x1(i) * x1(i)
Next i
Call sort(x1, y1, 5)
For i = 0 To 14
x2(i) = Rnd
y2(i) = x2(i) * x2(i)
Next i
Call sort(x2, y2, 14)
'確認のためにセルに書き込み
[A1] = "x1"
[B1] = "y1"
For i = 0 To 5
Cells(2 + i, 1) = x1(i)
Cells(2 + i, 2) = y1(i)
Next i
[C1] = "x2"
[D1] = "y2"
For i = 0 To 14
Cells(2 + i, 3) = x2(i)
Cells(2 + i, 4) = y2(i)
Next i
'グラフ描画
Dim ch As ChartObject
Set ch = ActiveSheet.ChartObjects.Add(300, 10, 300, 200)
With ch.chart
'データ系列の設定
With .SeriesCollection.NewSeries
.ChartType = xlXYScatter
.AxisGroup = xlPrimary
.XValues = x1
.Values = y1
End With
With .SeriesCollection.NewSeries
.ChartType = xlXYScatterLinesNoMarkers
.AxisGroup = xlSecondary
.XValues = x2
.Values = y2
End With
'それぞれの軸の設定
With .Axes(xlCategory, xlPrimary)
.HasTitle = True
.AxisTitle.Caption = "x1"
.MinimumScale = 0
.MaximumScale = 1
End With
With .Axes(xlCategory, xlSecondary)
.HasTitle = True
.AxisTitle.Caption = "x2"
.MinimumScale = 0
.MaximumScale = 1
End With
With .Axes(xlValue, xlPrimary)
.HasTitle = True
.AxisTitle.Caption = "y1"
.MinimumScale = 0
.MaximumScale = 1
End With
With .Axes(xlValue, xlSecondary)
.HasTitle = True
.AxisTitle.Caption = "y2"
.MinimumScale = 0
.MaximumScale = 1
End With
.HasAxis(xlCategory, xlSecondary) = True
End With
End Sub
U3ViIHNvcnQoeCgpLCB5KCksIG4pCiAgICBGb3IgaSA9IDAgVG8gbiAtIDEKICAgICAgICBGb3IgaiA9IDEgVG8gbiAtIGkKICAgICAgICAgICAgSWYgeChqIC0gMSkgPiB4KGopIFRoZW4KICAgICAgICAgICAgICAgIHQgPSB4KGogLSAxKQogICAgICAgICAgICAgICAgeChqIC0gMSkgPSB4KGopCiAgICAgICAgICAgICAgICB4KGopID0gdAogICAgICAgICAgICAgICAgdCA9IHkoaiAtIDEpCiAgICAgICAgICAgICAgICB5KGogLSAxKSA9IHkoaikKICAgICAgICAgICAgICAgIHkoaikgPSB0CiAgICAgICAgICAgIEVuZCBJZgogICAgICAgIE5leHQgagogICAgTmV4dCBpCkVuZCBTdWIKClN1YiB0ZXN0X3Bsb3QoKQoKJ+mBqeW9k+OBquODh+ODvOOCv+OCkueUqOaEjwpEaW0geDEoNSksIHkxKDUpCkRpbSB4MigxNCksIHkyKDE0KQoKRm9yIGkgPSAwIFRvIDUKICAgIHgxKGkpID0gUm5kCiAgICB5MShpKSA9IHgxKGkpICogeDEoaSkKTmV4dCBpCkNhbGwgc29ydCh4MSwgeTEsIDUpCgpGb3IgaSA9IDAgVG8gMTQKICAgIHgyKGkpID0gUm5kCiAgICB5MihpKSA9IHgyKGkpICogeDIoaSkKTmV4dCBpCkNhbGwgc29ydCh4MiwgeTIsIDE0KQoKJ+eiuuiqjeOBruOBn+OCgeOBq+OCu+ODq+OBq+abuOOBjei+vOOBvwpbQTFdID0gIngxIgpbQjFdID0gInkxIgpGb3IgaSA9IDAgVG8gNQogICAgQ2VsbHMoMiArIGksIDEpID0geDEoaSkKICAgIENlbGxzKDIgKyBpLCAyKSA9IHkxKGkpCk5leHQgaQoKW0MxXSA9ICJ4MiIKW0QxXSA9ICJ5MiIKRm9yIGkgPSAwIFRvIDE0CiAgICBDZWxscygyICsgaSwgMykgPSB4MihpKQogICAgQ2VsbHMoMiArIGksIDQpID0geTIoaSkKTmV4dCBpCgon44Kw44Op44OV5o+P55S7CkRpbSBjaCBBcyBDaGFydE9iamVjdApTZXQgY2ggPSBBY3RpdmVTaGVldC5DaGFydE9iamVjdHMuQWRkKDMwMCwgMTAsIDMwMCwgMjAwKQoKV2l0aCBjaC5jaGFydAogICAgJ+ODh+ODvOOCv+ezu+WIl+OBruioreWumgogICAgV2l0aCAuU2VyaWVzQ29sbGVjdGlvbi5OZXdTZXJpZXMKICAgICAgICAuQ2hhcnRUeXBlID0geGxYWVNjYXR0ZXIKICAgICAgICAuQXhpc0dyb3VwID0geGxQcmltYXJ5CiAgICAgICAgLlhWYWx1ZXMgPSB4MQogICAgICAgIC5WYWx1ZXMgPSB5MQogICAgRW5kIFdpdGgKICAgIAogICAgV2l0aCAuU2VyaWVzQ29sbGVjdGlvbi5OZXdTZXJpZXMKICAgICAgICAuQ2hhcnRUeXBlID0geGxYWVNjYXR0ZXJMaW5lc05vTWFya2VycwogICAgICAgIC5BeGlzR3JvdXAgPSB4bFNlY29uZGFyeQogICAgICAgIC5YVmFsdWVzID0geDIKICAgICAgICAuVmFsdWVzID0geTIKICAgIEVuZCBXaXRoCiAgICAKICAgICfjgZ3jgozjgZ7jgozjga7ou7jjga7oqK3lrpoKICAgIFdpdGggLkF4ZXMoeGxDYXRlZ29yeSwgeGxQcmltYXJ5KQogICAgICAgIC5IYXNUaXRsZSA9IFRydWUKICAgICAgICAuQXhpc1RpdGxlLkNhcHRpb24gPSAieDEiCiAgICAgICAgLk1pbmltdW1TY2FsZSA9IDAKICAgICAgICAuTWF4aW11bVNjYWxlID0gMQogICAgRW5kIFdpdGgKICAgIAogICAgV2l0aCAuQXhlcyh4bENhdGVnb3J5LCB4bFNlY29uZGFyeSkKICAgICAgICAuSGFzVGl0bGUgPSBUcnVlCiAgICAgICAgLkF4aXNUaXRsZS5DYXB0aW9uID0gIngyIgogICAgICAgIC5NaW5pbXVtU2NhbGUgPSAwCiAgICAgICAgLk1heGltdW1TY2FsZSA9IDEKICAgIEVuZCBXaXRoCiAgICAKICAgIFdpdGggLkF4ZXMoeGxWYWx1ZSwgeGxQcmltYXJ5KQogICAgICAgIC5IYXNUaXRsZSA9IFRydWUKICAgICAgICAuQXhpc1RpdGxlLkNhcHRpb24gPSAieTEiCiAgICAgICAgLk1pbmltdW1TY2FsZSA9IDAKICAgICAgICAuTWF4aW11bVNjYWxlID0gMQogICAgRW5kIFdpdGgKICAgIAogICAgV2l0aCAuQXhlcyh4bFZhbHVlLCB4bFNlY29uZGFyeSkKICAgICAgICAuSGFzVGl0bGUgPSBUcnVlCiAgICAgICAgLkF4aXNUaXRsZS5DYXB0aW9uID0gInkyIgogICAgICAgIC5NaW5pbXVtU2NhbGUgPSAwCiAgICAgICAgLk1heGltdW1TY2FsZSA9IDEKICAgIEVuZCBXaXRoCiAgICAKICAgIC5IYXNBeGlzKHhsQ2F0ZWdvcnksIHhsU2Vjb25kYXJ5KSA9IFRydWUKICAgIApFbmQgV2l0aAoKRW5kIFN1YgoK