una - ¿Cómo creo un gráfico de Excel que extraiga datos de varias hojas?
como hacer una grafica comparativa en excel 2013 (3)
Use el asistente de gráficos.
En el Paso 2 de 4, hay una pestaña con la etiqueta "Serie". Hay 3 campos y un cuadro de lista en esta pestaña. 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 son específicos de esa serie. El campo final es el campo "Etiquetas de eje de categoría (X)", que es común a todas las series.
Haga clic en el botón "Agregar" debajo del cuadro de lista. Esto agregará una serie en blanco a su cuadro de lista. Observe que los valores para "Nombre" y para "Valores" cambian cuando resalta una serie en el cuadro de lista.
Seleccione su nueva serie.
Hay un icono en cada campo en el lado derecho. Este icono le permite seleccionar celdas en el libro de trabajo para extraer los datos. Cuando hace clic en él, el asistente se oculta temporalmente (a excepción del campo en el que está trabajando), lo que le permite interactuar con el libro de trabajo.
Seleccione la hoja apropiada en el libro y luego seleccione los campos con los datos que desea mostrar en el cuadro. Se puede hacer clic en el botón a la derecha del campo para mostrar el asistente.
Espero que ayude.
EDITAR: Lo anterior aplica a 2003 y antes. Para 2007, cuando se seleccione la tabla, debería poder realizar una acción similar utilizando la opción "Seleccionar datos" en la pestaña "Diseño" de la cinta de opciones. Esto abre un cuadro de diálogo que enumera las Series para el gráfico. Puede seleccionar la serie tal como lo haría en Excel 2003, pero debe usar los botones "Agregar" y "Editar" para definir series personalizadas.
Tengo cifras de ventas mensuales almacenadas en hojas separadas. Me gustaría crear una parcela de ventas para múltiples productos por mes. Cada producto se representaría en una línea de color diferente en el mismo gráfico, con cada mes ejecutándose a lo largo del eje x.
¿Cuál es la mejor manera de crear un solo gráfico de líneas que extraiga de las mismas celdas relativas en varias hojas?
2007 es más poderoso con la cinta ..: =) Para agregar nuevas series en el gráfico haz: Selecciona Gráfico, luego haz clic en Diseño en Herramientas de gráfico en la cinta, En la cinta Diseño, selecciona "Seleccionar datos" en Grupo de datos, luego verás el botón para Agregar para agregar nuevas series.
Espero que eso ayude.
Aquí hay un código de Excel 2010 que puede funcionar. Tiene un par de detalles (como el filtrado de caracteres de codificación incorrecta de los títulos) pero fue diseñado para crear múltiples gráficos de varias series a partir de datos de 4 dimensiones que tienen datos absolutos y basados en porcentajes. Modifíquelo como lo desee:
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