¿Cómo puedo crear un gráfico de Excel que extraiga datos de varias hojas?

Tengo cifras de ventas mensuales almacenadas en hojas separadas. Me gustaría crear un gráfico de las ventas de varios productos por mes. Cada producto estaría representado en una línea de color diferente en el mismo gráfico con cada mes a lo largo del eje x.

¿Cuál es la mejor manera de crear un gráfico de una sola línea que tire de las mismas celdas relativas en múltiples hojas?

Solución

Utilice el Asistente para gráficos.

En el Paso 2 de 4, hay una pestaña llamada "Series". En esta pestaña hay 3 campos y un cuadro de lista. El cuadro de lista muestra las diferentes series que ya está incluyendo en el gráfico. Cada serie tiene un campo "Nombre" y un campo "Valores" que es específico para esa serie. El último campo es el campo "Etiquetas de categoría (X) del eje", que es común a todas las series.

Haga clic en el botón "Añadir" situado debajo del cuadro de lista. Esto añadirá una serie en blanco a su cuadro de lista. Observe que los valores de "Nombre" y de "Valores" cambian cuando resalta una serie en el cuadro de lista.

Seleccione su nueva serie.

Hay un icono en cada campo del lado derecho. Este icono le permite seleccionar celdas en el libro de trabajo para extraer los datos. Al hacer clic en él, el Asistente se oculta temporalmente (excepto el campo en el que está trabajando) permitiéndole interactuar con el libro de trabajo.

Seleccione la hoja apropiada en el libro de trabajo y luego seleccione los campos con los datos que desea mostrar en el gráfico. Puede hacer clic en el botón situado a la derecha del campo para desocultar el asistente.

Espero que te sirva de ayuda.

EDIT: Lo anterior se aplica a 2003 y anteriores. Para 2007, cuando el gráfico está seleccionado, usted debería ser capaz de hacer una acción similar utilizando el "Seleccionar Datos" opción en el "Diseño" ficha de la cinta. Se abrirá un cuadro de diálogo con una lista de las series del gráfico. Puede seleccionar las series igual que en Excel 2003, pero debe utilizar los botones "Añadir" y "Editar" para definir series personalizadas.

Comentarios (5)

Aquí hay un código de Excel 2010 que puede funcionar. Tiene un par de especificidades (como filtrar caracteres mal codificados de los títulos), pero fue diseñado para crear múltiples gráficos multiserie a partir de datos de 4 dimensiones con datos absolutos y porcentuales. Modifícalo como quieras:

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
Comentarios (1)

2007 es más potente con la cinta..:=) Para añadir nuevas series en el gráfico Seleccione Gráfico, luego haga clic en Diseño en Herramientas de Gráfico en la cinta, En la cinta Diseño, seleccione "Seleccionar Datos" en Grupo de Datos, Entonces verás el botón de Añadir para añadir nuevas series.

Espero que le sirva de ayuda.

Comentarios (0)