Notifications
Clear all

Loop

7 Posts
2 Usuários
0 Reactions
1,413 Visualizações
(@lango)
Posts: 6
Active Member
Topic starter
 

Bom dia, estou com um uma dúvida num loop que montei, se alguem puder ajudar agradeço, segue :

Exemplo :

01/05/2013

coluna 1

Gol 15/07/2007 00:00
Gol 15/07/2007 00:00
Gol 15/07/2007 00:00
Gol 15/07/2007 00:00
Gol 15/04/2010 00:00
Gol 15/01/2011 00:00
Gol 15/06/2008 00:00
Gol 15/08/2008 00:00
Gol 15/08/2008 00:00
Gol 15/09/2009 00:00

coluna 2 c3 c4

0 - 1 | -2 1
1 - 2 | 1 2
2 - 3 | 2 3
3 - 4 | 3 4
4 - 5 | 4 5
5 - 6 | 5 6
6 - 7 | 6 7
7 - 8 | 7 8
8 | 8 20

Então é assim, a coluna 1 faz o calculo com a data que eu colocar, armazena o valor ve qual a idade que o veiculo esta e armazena a quantidade na coluna 2, faz o loop ate achar todos da coluna 1. Consegui fazer uma macro so que ele localiza somente a primeira linha da coluna e para, segue :

Sub ClassificacaoChassisFaixaIdade()

Dim VarLin2, VarLin3, Idade
Dim DataChassis, DataCarroceria, VarChassisTipo
Dim Data As Date

VarLin2 = 5

VarLin3 = 9
'Inicia o Contador das linha de classificação

VarChassisTipo = Worksheets("Relatório - 01").Cells(VarLin2, 9)
DataCarroceria = Worksheets("Relatório - 01").Cells(VarLin2, 10)
Data = Worksheets("Relatório - 01").Cells(2, 2)
'Atribui a Variavel "Data" a data de processamento do Relatório

Idade = ((Data - DataCarroceria) / 12) / 30
'Calcula a idade do veículo ok mas somente armazena o valor da primeira linha e para a macro

Do Until VarLin3 > 18

'Não irá Fazer o Loop quando a variável "VarLin3" for maior 172
If VarChassisTipo = Worksheets("Banco_de_Frota").Cells(VarLin3, 8) Then
'Checa o tipo de Chassis/Carroceria
If Idade > Worksheets("Banco_de_Frota").Cells(VarLin3, 6) _
And Idade <= Worksheets("Banco_de_Frota").Cells(VarLin3, 7) Then
'Checa o a faixa de idade
Worksheets("Banco_de_Frota").Cells(VarLin3, 5).Value = _
Worksheets("Banco_de_Frota").Cells(VarLin3, 5).Value + 1
End If
End If
VarLin3 = VarLin3 + 1
Loop
End Sub

 
Postado : 26/05/2014 5:34 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

E qual é a duvida??
Nota: Ao declarar variáveis, procure sempre atribuir o tipo de valor que essa variável ira receber.
Por exemplo: Varlin2 as integer (irá receber números inteiros ate */- 37000).

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/05/2014 7:53 am
(@lango)
Posts: 6
Active Member
Topic starter
 

OK obrigado !!

Então é assim, nessa macro eu tenho a idade do veiculo(Data - DataCarroceria), porem tenho que colocar cada idade na faixa etária 0-1 1-2 3-4 4-5 etc, com base na idade do veiculo e na data que eu colocar vai me dar " a idade do veiculo ", o calculo esta ok ja testei(Idade = ((Data - DataCarroceria) / 12) / 30), so o que esta acontecendo, ele faz o calculo somente de uma linha e para, leva para a faixa etaria somente a idade do primeiro veiculo e para, o que eu queria é assim tantos na faixa etaria 0-1, tantos na 1-2 ate o ultimo veiculo, só parasse quando acabasse todos.

exemplo

0-1 5
1-2 2
2-3 0

 
Postado : 26/05/2014 1:41 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Precisaremos ver o layout/estrutura de sua planilha, só pelo código teremos que supor muitas variáveis e não chegar a um bom termo.
Monte um exemplo (compactado com Rar/zip/7.z ..) e poste aqui no site, com alguns dados e qual o resultado esperado (faça manualmente), assim será mais fácil obter uma resposta que lhe atenda.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 26/05/2014 2:13 pm
(@lango)
Posts: 6
Active Member
Topic starter
 

Segue a planilha, a macro esta rodando do jeito que tento explicar, espero ser melhor dessa forma...

 
Postado : 27/05/2014 4:52 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sinceridade, ainda tenho duvidas, mas se está funcionando para você, veja as alterações para o loop se lhe atende:

Sub ClassificacaoChassisFaixaIdade()

Dim VarLin2 As Integer, VarLin3 As Integer, Idade As Double
Dim DataChassis As Date, DataCarroceria As Date, VarChassisTipo As String
Dim Data As Date

VarLin2 = 5

VarLin3 = 9
'Verifica se a linha do relatorio tem valor
Do While Worksheets("Relatório - 01").Cells(VarLin2, 9) <> ""
    'Inicia o Contador das linha de classificação
    VarChassisTipo = Worksheets("Relatório - 01").Cells(VarLin2, 9)
    DataCarroceria = Worksheets("Relatório - 01").Cells(VarLin2, 10)
    Data = Worksheets("Relatório - 01").Cells(2, 2)
    'Atribui a Variavel "Data" a data de processamento do Relatório
    
    Idade = ((Data - DataCarroceria) / 12) / 30
    'Calcula a idade do veículo
    
    
    Do Until VarLin3 > 18
        
        'Não irá Fazer o Loop quando a variável "VarLin3" for maior 172
            If VarChassisTipo = Worksheets("Banco_de_Frota").Cells(VarLin3, 8) _
            Or VarChassisTipo = Worksheets("Banco_de_Frota").Cells(VarLin3, 9) Then
            'Checa o tipo de Chassis/Carroceria
                If Idade > Worksheets("Banco_de_Frota").Cells(VarLin3, 6) _
                And Idade <= Worksheets("Banco_de_Frota").Cells(VarLin3, 7) Then
                'Checa o a faixa de idade
                    Worksheets("Banco_de_Frota").Cells(VarLin3, 5).Value = _
                    Worksheets("Banco_de_Frota").Cells(VarLin3, 5).Value + 1
                End If
            End If
        VarLin3 = VarLin3 + 1
    Loop
'vai para proxima linha de relatorio e reinicia a variavel linha do banco frota
VarLin2 = VarLin2 + 1: VarLin3 = 9
Loop
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 27/05/2014 6:24 am
(@lango)
Posts: 6
Active Member
Topic starter
 

Isso mesmo que queria...agradeço quebrou um galhao !!

 
Postado : 27/05/2014 6:29 am