|
'-------------------------------------
Sub chart_change()
'-------------------------------------
Dim ochart As Excel.Chart
Set ochart = Sheet1.ChartObjects(1).Chart
Dim data As Variant
data = get_data
Dim oseries As Excel.Series
Set oseries = ochart.SeriesCollection(1)
oseries.Name = "Sales"
oseries.xvalues = data(0)
oseries.Values = data(1)
Set oseries = ochart.SeriesCollection(2)
oseries.Name = "Value"
oseries.xvalues = data(0)
oseries.Values = data(2)
End Sub
' 숨김 데이타를 제외한 데이타 가져오기
'-------------------------------------
Function get_data() As Variant
'-------------------------------------
Dim rngx As Range
Set rngx = Sheet2.Range("B2").CurrentRegion
Dim row As Range
Dim xvalues As Variant, y1values As Variant, y2values As Variant
xvalues = Array()
y1values = Array()
y2values = Array()
For r = 2 To rngx.Rows.Count
If Not (rngx.Rows.Item(r).Hidden) Then
With rngx.Rows.Item(r)
xvalues = push(xvalues, .Cells(1).Value)
y1values = push(y1values, .Cells(2).Value)
y2values = push(y2values, .Cells(3).Value)
End With
End If
Next
' 최소값, 최대값 환산
imax = WorksheetFunction.Max(y1values)
Index = WorksheetFunction.Match(imax, y1values, 0)
imax = imax * 1.1
y1values(Index - 1) = imax
imin = WorksheetFunction.Min(y1values)
Index = WorksheetFunction.Match(imin, y1values, 0)
imin = imin * 0.9
y1values(Index - 1) = imin
imax = WorksheetFunction.Max(y2values)
Index = WorksheetFunction.Match(imax, y2values, 0)
imax = imax * 1.1
y2values(Index - 1) = imax
imin = WorksheetFunction.Min(y2values)
Index = WorksheetFunction.Match(imin, y2values, 0)
imin = imin * 0.9
y2values(Index - 1) = imin
get_data = Array(xvalues, y1values, y2values)
End Function
' 배열 요소 추가
'-------------------------------------------------------
Function push(col As Variant, ele As Variant) As Variant
'-------------------------------------------------------
Dim i As Long: i = UBound(col, 1) + 1
ReDim Preserve col(i)
col(i) = ele
push = col
End Function
|
|