Como faço para criar um gráfico do Excel que extrai dados de várias folhas? [fechadas]

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho números de vendas mensais armazenados em folhas separadas. Eu gostaria de criar um lote de vendas para vários produtos por mês. Cada produto seria representado em uma linha de cor diferente no mesmo gráfico a cada mês consecutivo ao longo do eixo x.

O que é a melhor maneira de criar um único gráfico de linha que puxa a partir das mesmas células relativos em várias folhas?

Foi útil?

Solução

Use o Assistente de gráfico.

Na Etapa 2 de 4, há um guia "Series". Existem 3 campos e uma caixa de listagem nesta guia. A caixa de lista mostra as diferentes séries você já está incluindo no gráfico. Cada série tem tanto um campo "Nome" e um campo de "valores" que é específico para essa série. O campo final é a "Categoria (X) eixo rótulos" campo, que é comum a todas as séries.

Clique no botão "Adicionar" abaixo da caixa de lista. Isto irá adicionar uma série em branco para a sua caixa lista. Observe que os valores para "Nome" e para "Valores" mudança quando você realça uma série na caixa de lista.

Selecione a sua nova série.

Há um ícone em cada campo do lado direito. Este ícone permite que você selecione as células na pasta de trabalho para puxar os dados. Quando você clicar nele, o Assistente de esconde-se temporariamente (exceto para o campo que você está trabalhando) que lhe permite interagir com o livro.

Selecione a planilha apropriada na pasta de trabalho e, em seguida, selecionar os campos com os dados que você deseja mostrar no gráfico. O botão à direita do campo pode ser clicado para reexibir o assistente.

Espero que ajude.

EDIT: O acima se aplica a 2003 e antes. Para 2007, quando o gráfico é selecionado, você deve ser capaz de fazer uma ação similar, usando a opção "Selecionar dados" na aba "Design" da fita. Isso abre uma caixa de diálogo listando a série para o gráfico. Você pode selecionar a série, assim como você poderia no Excel 2003, mas você deve usar os botões "Adicionar" "Editar" para definir série personalizada.

Outras dicas

Aqui está um código de Excel 2010 que pode funcionar. Tem algumas especificidades (como filtragem de caracteres bad-codificar de títulos), mas ele foi projetado para criar vários gráficos multi-série a partir de dados 4-dimensional com ambos os dados absolutos e baseados em percentuais. Modificá-lo como você gosta:

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 é mais poderoso com fita ..: =) Para adicionar nova série no gráfico de fazer: Selecione Gráfico, clique em Design, em Ferramentas de Gráfico na fita, Na faixa de opções de design, selecione "Select Data" em Data Group, Em seguida, você verá o botão para Adicionar para adicionar nova série.

Hope que vai ajudar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top