Gráfico macros

Disculpa tanto la molestia pero tengo otra pregunta
Tengo la siguiente linea de código
Sub GRAFICAR()
'
' GRAFICAR Macro
'
'
Range("P4:S60").Select
ActiveWindow.SmallScroll Down:=-4
ActiveWindow.ScrollRow = 26
ActiveWindow.ScrollRow = 1
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Hoja1!$P$4:$S$60")
ActiveChart.ChartType = xlLineMarkers
ActiveChart.SeriesCollection(1).Delete
ActiveChart.SetSourceData Source:=Range("P4:S60")
ActiveChart.SeriesCollection(1).Name = "VARIACIÓN"
ActiveChart.SeriesCollection(1).Values = "=Hoja1!$P$4:$P$60"
ActiveChart.SeriesCollection(1).XValues = "=Hoja1!$J$4:$J$60"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Name = "ERROR MAX"
ActiveChart.SeriesCollection(2).Values = "=Hoja1!$Q$4:$Q$60"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).Name = "ERROR MIN"
ActiveChart.SeriesCollection(3).Values = "=Hoja1!$R$4:$R$60"
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(4).Name = "PROM"
ActiveChart.SeriesCollection(4).Values = "=Hoja1!$S$4:$S$60"
ActiveChart.SeriesCollection(2).XValues = "=Hoja1!$J$4:$J$60"
ActiveChart.ChartStyle = 42
ActiveChart.ClearToMatchStyle
ActiveWindow.SmallScroll Down:=-3
End Sub
Mi inconveniente es que por ejemplo:
1. ActiveChart.SetSourceData Source:=Range("Hoja1!$P$4:$S$60")
El rango que aparece definido no todas las celdas tienen datos y solo deseo que me tome las que tiene datos
2.ActiveChart.SeriesCollection(1).Values = "=Hoja1!$P$4:$P$60"
Igualmente no todas las celdas tienen valor y solo deseo que tome las que tiene valor
Agradezco tu colaboración.

1 respuesta

Respuesta
1
Si filtras los datos para ver solo los que tienen datos el gráfico se muestra solo para los datos que se visualizan, no se gráfica con los datos que están ocultos por el filtro.
Prueba y me avisas.
Para que te des una idea de los códigos del autofiltro son:
ActiveSheet.Range("$A$1:$A$29").AutoFilter Field:=1, Criteria1:="<>"
Lo intente, pero no funciono, esto se debe a que ya hay un rango definido para generar el gráfico, ejemplo (datos resaltados):
ActiveChart.SetSourceData Source:=Range("Hoja1!$P$4:$S$60")
ActiveChart.SeriesCollection(1).Values = "=Hoja1!$P$4:$P$60"
Además estas celdas tienen que aparecen seleccionadas solo muestran el dato si se cumple una condición.
Hice el ensayo en otra hoja y cuando solo colocaba los datos en las celdas, salia todo bien como tu decías y se graficaban solo las celdas con datos, pero cuando colocaba un condicional en las celdas ahí si graficaba todo.
Si deseas te envío el archivo.
Imagino que la condicional te bota en lugar de un error el valor 0, por lo que cambiando tu condicional para que en lugar de 0 te bote un espacio vacío, debería funcionar, para determinar un espacio vacío debes colocar lo siguiente""
Prueba y me avisas
No la condicional no arroja ningún valor
SI(K5="";"";(K5-K4)/K5) y la condicional trabaja perfectamente, pero lo malo es q los espacios que le asigna como vacio los toma como si en realidad hubiera un punto alli
En cambio si a las celdas que están seleccionadas como rango y que se encuentran vacías les quito el condicional ahí si el gráfico se genera bien, pero si le dejo la condicional continua graficando esas celdas aunque no contenga valor alguno
La verdad es raro ya que no debería funcionar así, pero para trabajar a pesar del problema, que pasa si en lugar de que mantengas escrita la condicional, haces que la macro que genera el gráfico llene la tabla primero, por ejemplo:
if Range("K5").value = "" then
Range(El que tengas).value = ""
else
Range(El que tengas).value = "=(K5-K4)/K5"
Prueba y me avisas.
Mira lo que me dices ya no hice,
La macro que he realizado consta de 3 pasos:
Primero hay un botón que me copia unos valores de otro libro
Luego hay un botón que me realiza los cálculos y posterior a ello hay otro que me realiza el gráfico.
Ahí te dejo la linea de códigos que utilice para realizar los cálculos.
Este botón de calculo es el que me realiza todas las operaciones y posterior a ello luego se grafican.
Te comento algo adicional cuando utilizo el formato condicional me sucede igualmente lo mismo, cuando le doy el rango en el cual me debe arrojar el color, aunque la celda se encuentre vacía el formato condicional también la toma y la pinta.
Hice un ensayo en otra hoja de calculo y pasaba lo mismo las celdas que no tenían el condicional SI escrito funcionaba bien, no generaba ningún color pero para las que si lo tenían y aunque aparentemente no había nada también les aplicaba el color.
En caso de alguna inquietud me avisas.
Sub CALCULAR2()
'
' CALCULAR2 Macro
'
'
Range("P3").Select
ActiveCell.FormulaR1C1 = "VARIACIÓN"
Range("Q3").Select
ActiveCell.FormulaR1C1 = "ERROR MAX"
Range("R3").Select
ActiveCell.FormulaR1C1 = "ERROR MIN"
Range("S3").Select
ActiveCell.FormulaR1C1 = "PROMEDIO"
Range("P4").Select
ActiveCell.FormulaR1C1 = "0"
Range("Q4").Select
ActiveCell.FormulaR1C1 = "6%"
Range("R4").Select
ActiveCell.FormulaR1C1 = "-6%"
Range("S4").Select
ActiveCell.FormulaR1C1 = "0"
Range("P5").Select
ActiveCell.FormulaR1C1 = "=+IF(RC[-5]="""","""",(RC[-5]-R[-1]C[-5])/RC[-5])"
Range("Q5").Select
ActiveCell.FormulaR1C1 = "=+IF(RC[-1]="""","""",6%)"
Range("R5").Select
ActiveCell.FormulaR1C1 = "=+IF(RC[-2]="""","""",-6%)"
Range("S5").Select
ActiveCell.FormulaR1C1 = "=+IF(RC[-3]="""","""",0)"
Range("P5:S5").Select
Selection.AutoFill Destination:=Range("P5:S60"), Type:=xlFillDefault
Range("P5:S3").Select
Range("P3:S60").Select
Selection.Style = "Percent"
Selection.NumberFormat = "0.0%"
Range("P4:P60").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual _
, Formula1:="0,06"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, _
Formula1:="-0,06"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 15773696
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("P3:S60").Select
Selection.Font.Bold = True
Range("P3:S60").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Range("P3:S3").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
End Sub
Lo que te digo es que esta parte de tu código cambies:
ActiveCell.FormulaR1C1 = "=+IF(RC[-5]="""","""",(RC[-5]-R[-1]C[-5])/RC[-5])"
por esto
if Range("K5").value = "" then
else
ActiveCell.FormulaR1C1 = "=(RC[-5]-R[-1]C[-5])/RC[-5]"
end if
Parece lo mismo, pero no lo es. Prueba y me avisas, claro esto tendría que ser para todo lo que tu código haga referente a este tema.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas