Usuário com melhor resposta
VBA e Excel 2010 - Configurar o eixo X do Gráfico.

Pergunta
-
Ola para todos.
Uso a macro que esta no final deste post para gerar o gráfico1 abaixo.
Se adiciono a linha abaixo,
<code>.Axes(xlCategory, xlPrimary).TickLabels.NumberFormat="[h]:mm:ss"</code>
o gráfico muda a TickLabels para horas o que preciso para o meu gráfico; veja o gráfico2.
As células que uso para gerar o eixo X tem números inteiros múltiplos de dez: 0 10 20 30 40 50 60 70 80 90 100 e assim ate o máximo de 3198.
Estes valores representam segundos, ou seja de 0 a 3198 segundos que equivalem de 00:00 a 53:18 minutos.
Como podemos colocar os minutos e segundos no eixo X?
Muito grato.
gráfico1
gráfico2
Sub NewChart() ' 'Create a chart Sheets(1).Select 'Select the active Sheet ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatter LastLine = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row Dim MaxScale As Integer Dim MTotal As Integer Dim Aprox As Integer Dim vName As String vName = Sheets(2).Range("B3") Dim Qx As Integer Qx = LastLine - 1 Dim Rangg As Integer Rangg = (LastLine * 10) - 60 MTotal = Rangg MaxScale = Rangg + 20 With ActiveChart .ChartType = xlXYScatter 'Set data source range. .SetSourceData Source:=Sheets(2).Range("A5:A" & Qx & ",B5:B" & Qx & ",E5:E" & Qx & ",H5:H" & Qx & ", K5:K" & Qx & ", N5:N" & Qx & ", Q5:Q" & Qx) ', 'PlotBy:=xlRows .HasTitle = True .ChartTitle.Text = vName '"2-7μm" 'The Parent property is used to set properties of the Chart. With .Parent .Top = 2 .Left = 2 .Width = 540 .Height = 252 .Name = "2micron" End With ActiveChart.Legend.Select With Selection.Format.TextFrame2.TextRange.Font .NameComplexScript = "Tahoma" .NameFarEast = "Tahoma" .Name = "Tahoma" End With .Axes(xlCategory).MajorTickMark = xlInside .Axes(xlCategory).MinorTickMark = xlInside .Axes(xlCategory, xlPrimary).Select .Axes(xlCategory, xlPrimary).TickLabels.Font.Size = 5 .Axes(xlCategory, xlPrimary).TickLabels.Font.Name = "Tahoma" .Axes(xlCategory, xlPrimary).TickLabels.Font.Bold = msoTrue .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time (seconds)" .Axes(xlCategory, xlPrimary).AxisTitle.Font.Size = 11 .Axes(xlCategory, xlPrimary).AxisTitle.Font.Bold = msoTrue .Axes(xlCategory, xlPrimary).AxisTitle.Font.Name = "Tahoma" .Axes(xlCategory, xlPrimary).MinorUnitIsAuto = False .Axes(xlCategory, xlPrimary).MajorUnit = 300 .Axes(xlCategory, xlPrimary).MinorUnit = 60 .Axes(xlCategory, xlPrimary).MaximumScale = MaxScale .Axes(xlCategory, xlPrimary).MinimumScale = 0 .Axes(xlCategory, xlPrimary).HasMajorGridlines = True .Axes(xlCategory, xlPrimary).HasMinorGridlines = True .Axes(xlCategory).Format.Line.ForeColor.RGB = RGB(0, 0, 0) .Axes(xlValue).MajorTickMark = xlInside .Axes(xlValue).MinorTickMark = xlInside .Axes(xlValue, xlPrimary).Select .Axes(xlValue, xlPrimary).HasMajorGridlines = True .Axes(xlValue, xlPrimary).HasMinorGridlines = True .Axes(xlValue, xlPrimary).TickLabels.Font.Size = 11 .Axes(xlValue, xlPrimary).TickLabels.Font.Name = "Tahoma" .Axes(xlValue, xlPrimary).TickLabels.Font.Bold = msoTrue .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Y axis Legend" .Axes(xlValue, xlPrimary).AxisTitle.Font.Size = 11 .Axes(xlValue, xlPrimary).AxisTitle.Font.Name = "Tahoma" .Axes(xlValue, xlPrimary).AxisTitle.Font.Bold = msoTrue .Axes(xlValue).Format.Line.ForeColor.RGB = RGB(0, 0, 0) .Legend.IncludeInLayout = False .Legend.Select Selection.Position = xlTop Selection.Font.Size = 11 Selection.Font.Name = "Tahoma" Selection.Font.Bold = msoTrue ActiveSheet.Shapes("2micron").ScaleWidth 1, msoFalse, _ msoScaleFromTopLeft ActiveChart.SetElement (msoElementChartTitleAboveChart) ActiveChart.ChartTitle.Select Selection.Left = 2 Selection.Top = 2 Selection.Format.TextFrame2.TextRange.Font.Size = 13.2 Selection.Format.TextFrame2.TextRange.Font.Name = "Tahoma" Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue ActiveChart.Legend.Select Selection.Left = 180 Selection.Top = 2 With Selection.Format.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorAccent1 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 End With ActiveChart.PlotArea.Select Selection.Top = 22 Selection.Left = 20 Selection.Height = 207 Selection.Width = 540 Selection.Border.LineStyle = xlSolid Selection.Border.Color = vbBlack Selection.Interior.Color = vbWhite End With Call f_l2m1(1, 8, RGB(0, 176, 240)) Call f_l2m1(2, 3, RGB(255, 0, 0)) Call f_l2m1(3, 1, RGB(255, 0, 255)) Call f_l2m1(4, 2, RGB(153, 0, 255)) Call f_l2m1(5, 4, RGB(153, 0, 255)) Call f_l2m1(6, 9, RGB(146, 208, 80)) Range("a22").Select End Sub Sub f_l2m1(LineNo, MStyle, vRGB) With ActiveSheet.ChartObjects("2micron").Chart ActiveChart.SeriesCollection(LineNo).Select With Selection .MarkerStyle = MStyle .MarkerSize = 7 .MarkerForegroundColor = vRGB End With Selection.Format.Fill.Visible = msoFalse Selection.Format.Line.Visible = msoFalse Selection.Format.Line.ForeColor.RGB = vRGB End With End Sub
silvio pontes
- Editado Silvio Pontes sexta-feira, 21 de setembro de 2012 22:02 Ligar frase ao gráfico2.
Respostas
-
Em primeiro lugar: Use Option Explicit nos seus códigos! http://www.ambienteoffice.com.br/officevba/declaracao_de_variavel/
Veja o que fiz com seu exemplo, no link: https://skydrive.live.com/redir?resid=FB206A2D510E0661!585
Passo a passo:
1 - Na planilha Data, copie (como valores) os valores da coluna T na coluna A. Em seguida, selecionei a coluna A e formatei seu formato de exibição para ss
2 - Selecionei o primeiro gráfico. Selecionei o eixo X de forma que ele ficasse selecionado, com um retângulo em volta. Dei dois cliques nele e apareceu uma janela.
3 - Em Opções do Eixo, marquei todos os botões de opção a configuração Automático.
4 - Em Número, marquei a caixa de seleção Vincular à fonte.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Silvio Pontes terça-feira, 2 de outubro de 2012 08:27
-
-Clique sobre o eixo;
-Na janela suspensa, selecione Formatar Eixo;
-Na janela que aparecer, clique em Opções do Eixo;
-Em Unidade principal, selecione a opção Fixo e coloque o valor 0,003472 na caixa de texto. O motivo de se colocar esse valor é porque 5 minutos = (1/24/60)*5 = 0,003472.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Silvio Pontes terça-feira, 2 de outubro de 2012 08:27
Todas as Respostas
-
Na verdade, o número 1 numa célula do Excel corresponde a um dia. Logo, seu gráfico não está mostrando uma evolução de 10 em 10 segundos, mas sim de 10 em 10 dias.
Faça o seguinte teste: Divida todos os dados (do eixo X) que você utiliza para construir esse gráfico pela quantidade de segundos que há num dia. Logo, se os dados começam na célula A1, você escreverá uma fórmula ao lado:
=A1/24/60/60
Cole esses resultados de fórmulas como valores no ponto em que estavam os dados originais.
Para exibir o gráfico em segundos, agora você deverá usar:
.Axes(xlCategory, xlPrimary).TickLabels.NumberFormat="[s]"
Para exibir em minutos:
.Axes(xlCategory, xlPrimary).TickLabels.NumberFormat="[m]"
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
Nova Informação.
Sei que preciso de uma formula, para antes de os valores entrarem no gráfico, serem convertidos para segundos e minutos.
No gráfico agora aparece 7200:00:00 referenciado a célula que tem o valor de 300.
O numero 300 corresponde então a 7200 horas ou seja o Excel enxerga a 300 como 300 dias.
Mas para mim o 300 corresponde a 5 minutos; 5 minutos x 60 segundos = 300 segundos.
Grato,
silvio pontes
- Editado Silvio Pontes sábado, 22 de setembro de 2012 03:30 de 7000 para 7200
-
No caso, você deverá adaptar a entrada de dados do gráfico de acordo com a escala (minuto ou segundo) que deseja utilizar.
Se quiser em segundos, dividir por /24/60/60
Se quiser em minutos, dividir por /24/60
Não se esqueça de alterar a propriedade NumberFormat do eixo.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
-
Agradecido.
Coloquei as formulas em outras celulas e alterei para o a exibicao dos valores nas celulas para o formato h:mm:ss.
Aqui a captura dos dados.
Aqui o Grafico Atual; ainda nao tenho o horario no formato correto no eixo X: 00:00 05:00 ....
.Axes(xlCategory).MajorTickMark = xlInside .Axes(xlCategory).MinorTickMark = xlInside .Axes(xlCategory, xlPrimary).Select .Axes(xlCategory, xlPrimary).TickLabels.Font.Size = 5 .Axes(xlCategory, xlPrimary).TickLabels.Font.Name = "Tahoma" .Axes(xlCategory, xlPrimary).TickLabels.Font.Bold = msoTrue .Axes(xlCategory, xlPrimary).TickLabels.NumberFormat = "[m]:mm:ss" .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Time (seconds)" .Axes(xlCategory, xlPrimary).AxisTitle.Font.Size = 11 .Axes(xlCategory, xlPrimary).AxisTitle.Font.Bold = msoTrue .Axes(xlCategory, xlPrimary).AxisTitle.Font.Name = "Tahoma" .Axes(xlCategory, xlPrimary).MinorUnitIsAuto = False .Axes(xlCategory, xlPrimary).MajorUnit = 300 .Axes(xlCategory, xlPrimary).MinorUnit = 60
silvio pontes
-
-
-
-
Agradecido amigo, coloquei no sendspace.com
http://www.sendspace.com/file/u3zn01
http://www.sendspace.com/file/k4ddf4
São 2 arquivos. Em um estão os dados e no outro esta o VBA.
Obrigado por sua ajuda,
silvio pontes
- Editado Silvio Pontes segunda-feira, 24 de setembro de 2012 01:26 Ortografia
-
Em primeiro lugar: Use Option Explicit nos seus códigos! http://www.ambienteoffice.com.br/officevba/declaracao_de_variavel/
Veja o que fiz com seu exemplo, no link: https://skydrive.live.com/redir?resid=FB206A2D510E0661!585
Passo a passo:
1 - Na planilha Data, copie (como valores) os valores da coluna T na coluna A. Em seguida, selecionei a coluna A e formatei seu formato de exibição para ss
2 - Selecionei o primeiro gráfico. Selecionei o eixo X de forma que ele ficasse selecionado, com um retângulo em volta. Dei dois cliques nele e apareceu uma janela.
3 - Em Opções do Eixo, marquei todos os botões de opção a configuração Automático.
4 - Em Número, marquei a caixa de seleção Vincular à fonte.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Silvio Pontes terça-feira, 2 de outubro de 2012 08:27
-
Felipe, muito obrigado.
'.Axes(xlCategory, xlPrimary).MajorUnit = 300 '.Axes(xlCategory, xlPrimary).MinorUnit = 60 '.Axes(xlCategory, xlPrimary).MaximumScale = MaxScale
Comentei as 3 linhas acima e veja o que virou.
Estamos chegando muito perto da solução.
Como podemos colocar os intervalos de 5 minutos ao inves dos 7 minutos e 12 segundos?
silvio pontes
-
-Clique sobre o eixo;
-Na janela suspensa, selecione Formatar Eixo;
-Na janela que aparecer, clique em Opções do Eixo;
-Em Unidade principal, selecione a opção Fixo e coloque o valor 0,003472 na caixa de texto. O motivo de se colocar esse valor é porque 5 minutos = (1/24/60)*5 = 0,003472.
Felipe Costa Gualberto - http://www.ambienteoffice.com.br
- Marcado como Resposta Silvio Pontes terça-feira, 2 de outubro de 2012 08:27
-