none
VBA e Excel 2010 - Configurar o eixo X do Gráfico. RRS feed

  • 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

    Grafico gerado com a macro abaixo.

    gráfico2

    Grafico alterado com a inclusao da linha - .Axes(xlCategory, xlPrimary).TickLabels.NumberFormat=

    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.
    sexta-feira, 21 de setembro de 2012 21:59

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
    quinta-feira, 27 de setembro de 2012 01:12
    Moderador
  • -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
    segunda-feira, 1 de outubro de 2012 21:39
    Moderador

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

    sexta-feira, 21 de setembro de 2012 22:14
    Moderador
  • 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
    sexta-feira, 21 de setembro de 2012 22:29
  • 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

    sexta-feira, 21 de setembro de 2012 22:59
    Moderador
  • 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.

    Coluna A, dados originais. Coluna B =Ax/24/60/60 + alterada a propriedade para mostrar o horário.

    Aqui o Grafico Atual; ainda nao tenho o horario no formato correto no eixo X: 00:00 05:00 ....  

    Ainda nao esta correto.

    	.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

    sábado, 22 de setembro de 2012 04:47
  • Muito bom. O problema está resolvido?

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sábado, 22 de setembro de 2012 20:20
    Moderador
  • Infelismente não meu amigo.

    Veja a captura:

    Estou desesperado atras da solução.


    silvio pontes

    domingo, 23 de setembro de 2012 00:17
  • Seria possível você disponibilizar a pasta de trabalho (no SkyDrive ou SendSpace) para que possamos propor uma solução?

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    domingo, 23 de setembro de 2012 15:42
    Moderador
  • 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
    segunda-feira, 24 de setembro de 2012 01:23
  • 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
    quinta-feira, 27 de setembro de 2012 01:12
    Moderador
  • 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.

    Quase lá.

    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

    segunda-feira, 1 de outubro de 2012 05:01
  • -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
    segunda-feira, 1 de outubro de 2012 21:39
    Moderador
  • Abracos amigo, muito agradecido toda a ajuda.

    silvio pontes

    terça-feira, 2 de outubro de 2012 08:28