여러 시트에서 데이터를 가져 오는 Excel 차트를 어떻게 작성합니까? [닫은

StackOverflow https://stackoverflow.com/questions/163363

  •  03-07-2019
  •  | 
  •  

문제

월별 판매 수치가 별도의 시트에 저장되어 있습니다. 한 달에 여러 제품에 대한 판매 음모를 만들고 싶습니다. 각 제품은 매달 X 축을 따라 실행되는 동일한 차트의 다른 색상 선으로 표시됩니다.

여러 시트에서 동일한 상대 셀에서 가져 오는 단일 라인 차트를 만드는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

차트 마법사를 사용하십시오.

4/4 단계에는 "시리즈"라는 탭이 있습니다. 이 탭에는 3 개의 필드와 목록 상자가 있습니다. 목록 상자에는 이미 차트에 포함 된 다양한 시리즈가 표시됩니다. 각 시리즈에는 "이름"필드와 해당 시리즈에 특정한 "값"필드가 모두 있습니다. 최종 필드는 "카테고리 (x) 축 레이블"필드이며,이 필드는 모든 시리즈에 공통적입니다.

목록 상자 아래의 "추가"버튼을 클릭하십시오. 이렇게하면 목록 상자에 빈 시리즈가 추가됩니다. 목록 상자에서 시리즈를 강조 표시하면 "이름"및 "값"값이 변경됩니다.

새 시리즈를 선택하십시오.

각 필드에는 오른쪽에 아이콘이 있습니다. 이 아이콘을 사용하면 통합 문서에서 셀을 선택하여 데이터를 가져올 수 있습니다. 클릭하면 마법사가 일시적으로 스스로를 숨 깁니다 (작업중인 필드 제외). 통합 문서와 상호 작용할 수 있습니다.

통합 문서에서 적절한 시트를 선택한 다음 차트에 표시 할 데이터가있는 필드를 선택하십시오. 필드 오른쪽의 버튼을 클릭하여 마법사를 막을 수 있습니다.

도움이되기를 바랍니다.

편집 : 위의 것은 2003 년과 이전에 적용됩니다. 2007 년에는 차트가 선택되면 리본의 "디자인"탭에서 "데이터 선택"옵션을 사용하여 유사한 작업을 수행 할 수 있어야합니다. 차트의 시리즈를 나열하는 대화 상자가 열립니다. Excel 2003에서 가능한 한 시리즈를 선택할 수 있지만 "Add"및 "Edit"버튼을 사용하여 사용자 정의 시리즈를 정의해야합니다.

다른 팁

다음은 Excel 2010의 코드가 작동합니다. 타이틀의 필터링 잘못된 인코딩 문자와 같은 몇 가지 세부 사항이 있지만 절대 및 백분율 기반 데이터를 모두 갖춘 4 차원 데이터에서 여러 멀티 시리즈 그래프를 작성하도록 설계되었습니다. 원하는 방식으로 수정하십시오.

Sub createAllGraphs()

Const chartWidth As Integer = 260
Const chartHeight As Integer = 200




If Sheets.Count = 1 Then
    Sheets.Add , Sheets(1)
    Sheets(2).Name = "AllCharts"
ElseIf Sheets("AllCharts").ChartObjects.Count > 0 Then
    Sheets("AllCharts").ChartObjects.Delete
End If
Dim c As Variant
Dim c2 As Variant
Dim cs As Object
Set cs = Sheets("AllCharts")
Dim s As Object
Set s = Sheets(1)

Dim i As Integer


Dim chartX As Integer
Dim chartY As Integer

Dim r As Integer
r = 2

Dim curA As String
curA = s.Range("A" & r)
Dim curB As String
Dim curC As String
Dim startR As Integer
startR = 2

Dim lastTime As Boolean
lastTime = False

Do While s.Range("A" & r) <> ""

    If curC <> s.Range("C" & r) Then

        If r <> 2 Then
seriesAdd:
            c.SeriesCollection.Add s.Range("D" & startR & ":E" & (r - 1)), , False, True
            c.SeriesCollection(c.SeriesCollection.Count).Name = Replace(s.Range("C" & startR), "Â", "")
            c.SeriesCollection(c.SeriesCollection.Count).XValues = "='" & s.Name & "'!$D$" & startR & ":$D$" & (r - 1)
            c.SeriesCollection(c.SeriesCollection.Count).Values = "='" & s.Name & "'!$E$" & startR & ":$E$" & (r - 1)
            c.SeriesCollection(c.SeriesCollection.Count).HasErrorBars = True
            c.SeriesCollection(c.SeriesCollection.Count).ErrorBars.Select
            c.SeriesCollection(c.SeriesCollection.Count).ErrorBar Direction:=xlY, Include:=xlBoth, Type:=xlCustom, Amount:="='" & s.Name & "'!$F$" & startR & ":$F$" & (r - 1), minusvalues:="='" & s.Name & "'!$F$" & startR & ":$F$" & (r - 1)
            c.SeriesCollection(c.SeriesCollection.Count).ErrorBar Direction:=xlX, Include:=xlBoth, Type:=xlFixedValue, Amount:=0

            c2.SeriesCollection.Add s.Range("D" & startR & ":D" & (r - 1) & ",G" & startR & ":G" & (r - 1)), , False, True
            c2.SeriesCollection(c2.SeriesCollection.Count).Name = Replace(s.Range("C" & startR), "Â", "")
            c2.SeriesCollection(c2.SeriesCollection.Count).XValues = "='" & s.Name & "'!$D$" & startR & ":$D$" & (r - 1)
            c2.SeriesCollection(c2.SeriesCollection.Count).Values = "='" & s.Name & "'!$G$" & startR & ":$G$" & (r - 1)
            c2.SeriesCollection(c2.SeriesCollection.Count).HasErrorBars = True
            c2.SeriesCollection(c2.SeriesCollection.Count).ErrorBars.Select
            c2.SeriesCollection(c2.SeriesCollection.Count).ErrorBar Direction:=xlY, Include:=xlBoth, Type:=xlCustom, Amount:="='" & s.Name & "'!$H$" & startR & ":$H$" & (r - 1), minusvalues:="='" & s.Name & "'!$H$" & startR & ":$H$" & (r - 1)
            c2.SeriesCollection(c2.SeriesCollection.Count).ErrorBar Direction:=xlX, Include:=xlBoth, Type:=xlFixedValue, Amount:=0
            If lastTime = True Then GoTo postLoop
        End If

        If curB <> s.Range("B" & r).Value Then

            If curA <> s.Range("A" & r).Value Then
                chartX = chartX + chartWidth * 2
                chartY = 0
                curA = s.Range("A" & r)
            End If

            Set c = cs.ChartObjects.Add(chartX, chartY, chartWidth, chartHeight)
            Set c = c.Chart
            c.ChartWizard , xlXYScatterSmooth, , , , , True, Replace(s.Range("B" & r), "Â", "") & " " & s.Range("A" & r), s.Range("D1"), s.Range("E1")

            Set c2 = cs.ChartObjects.Add(chartX + chartWidth, chartY, chartWidth, chartHeight)
            Set c2 = c2.Chart
            c2.ChartWizard , xlXYScatterSmooth, , , , , True, Replace(s.Range("B" & r), "Â", "") & " " & s.Range("A" & r) & " (%)", s.Range("D1"), s.Range("G1")

            chartY = chartY + chartHeight
            curB = s.Range("B" & r)
            curC = s.Range("C" & r)
        End If

        curC = s.Range("C" & r)
        startR = r
    End If

    If s.Range("A" & r) <> "" Then oneMoreTime = False ' end the loop for real this time
    r = r + 1
Loop

lastTime = True
GoTo seriesAdd
postLoop:
cs.Activate

End Sub

2007은 리본으로 더 강력합니다. : =) 차트에서 새 시리즈를 추가하려면 차트를 선택한 다음 차트를 선택한 다음 리본의 차트 도구에서 디자인을 클릭하고 디자인 리본에서 데이터 그룹에서 "데이터 선택"을 선택하면 표시됩니다. 새로운 시리즈를 추가하기 위해 추가하는 버튼.

도움이되기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top