none
Soma de Somases em VBA RRS feed

  • Pergunta

  • Olá. Sou nova por aqui!
    Estou com uma planilha onde preciso fazer SOMASES em VBA pois o range não é fixo.

    Terei uma aba com a Entrada (dados) onde terei em cada linha um Código que será o Critério Linha.
    E nas colunas ao lado, possuo Um Texto (Critério Coluna) e Um Valor. 
    Preciso obter as somas na aba Saída, onde terei que Somar apenas se cumprir o requisito (critério) estipulado na linha e coluna que o valor total estará. 
    Não sei explicar em texto muito bem, mas enviei uma imagem abaixo mais didática que fica mais fácil de mostrar.

    Eu consegui fazer o queria com Formula (dá pra ver na imagem) mas os Ranges mudam e eu não sei quantas colunas e linhas eu terei ao todo pois os dados são exportação de um sistema de acompanhamento de processos. 
    Além disso os dados que deverão ser somados estão como texto então para cada soma eu precisaria fazer algo correspondente no VBA a =Valor (F5).


    [não consegui anexar a imagem ~~~]

    Tentei bolar um código mas estou com dificuldades, pois estou começando agora a aprender a linguagem...

    Sub teste3()

    Coluna = 3
    Soma = 0
    Col = 3
    Linha = 4
        If Worksheets("Plan1").Cells(Linha, Col).Value = Worksheets("Plan2").Cells(Linha - 2, Col + 6) Then 'verificandosst
            If Worksheets("Plan1").Cells(Linha - 1, Coluna + 1).Value = Worksheets("Plan2").Cells(Linha - 2, Coluna + 7) Then
                Worksheets("Plan1").Cells(1, 1).Value = Soma + Worksheets("Plan2").Cells(Linha - 2, Coluna + 8)
            End If
        Else
            Coluna = Coluna + 1
        End If


    End Sub

    
    terça-feira, 23 de janeiro de 2018 16:42

Todas as Respostas

  • Option Explicit
    
    Sub PERCORRERLINHASDACOLUNAA()
    
    'VOU TENTAR DAR UM EXEMPLO
    
    'TALVEZ VOCÊ POSSA ADAPTAR PARA A SUA NECESSIDADE
    
    'DECLARAÇÃO DE VARIÁVEIS
    Dim LINHA As Long
    Dim CONTADOR As Long
    
    
    'INICIALIZAÇÃO DE VARIÁVEIS
    LINHA = 2
    CONTADOR = 0
    
    'LAÇO DE REPETIÇÃO PARA PERCORRER AS LINHAS PREENCHIDAS DA COLUNA A
    
    While Plan1.Cells(LINHA, 1).Value <> ""
    
    If Plan1.Cells(LINHA, 1).Value = "FECHADO" Then
    
    CONTADOR = CONTADOR + 1
    
    End If
    
    LINHA = LINHA + 1
    Wend
    
    MsgBox "FORAM ENCONTRADOS " & CONTADOR & " ITENS FECHADOS."
    
    End Sub


    A melhor forma de agradecer e votar como util e / ou marcar como resposta. Anderson Diniz diniabr2011@gmail.com


    terça-feira, 23 de janeiro de 2018 21:32
  • Sub PERCORRERLINHASDACOLUNAAE5COLUNAS()
    
    'VOU TENTAR DAR UM EXEMPLO
    
    'TALVEZ VOCÊ POSSA ADAPTAR PARA A SUA NECESSIDADE
    
    'DECLARAÇÃO DE VARIÁVEIS
    Dim LINHA As Long
    Dim CONTADOR As Long
    Dim COLUNA As Long
    
    
    'INICIALIZAÇÃO DE VARIÁVEIS
    LINHA = 2
    CONTADOR = 0
    COLUNA = 1
    
    'LAÇO DE REPETIÇÃO PARA PERCORRER AS COLUNAS DE 1 A 5
    
    For COLUNA = 1 To 5
    
    'LAÇO DE REPETIÇÃO PARA PERCORRER AS LINHAS PREENCHIDAS DA COLUNA A
    
    While Plan1.Cells(LINHA, COLUNA).Value <> ""
    
    If Plan1.Cells(LINHA, COLUNA).Value = "FECHADO" Then
    
    CONTADOR = CONTADOR + 1
    
    End If
    
    LINHA = LINHA + 1
    Wend
    
    Next COLUNA
    
    MsgBox "FORAM ENCONTRADOS " & CONTADOR & " ITENS FECHADOS."
    
    End Sub


    A melhor forma de agradecer e votar como util e / ou marcar como resposta. Anderson Diniz diniabr2011@gmail.com


    terça-feira, 23 de janeiro de 2018 21:37
  • Sub PERCORRERLINHASDACOLUNAAE5COLUNASB()
    
    'VOU TENTAR DAR UM EXEMPLO
    
    'TALVEZ VOCÊ POSSA ADAPTAR PARA A SUA NECESSIDADE
    
    'DECLARAÇÃO DE VARIÁVEIS
    Dim LINHA, LINHAS As Long
    Dim CONTADOR As Long
    Dim COLUNA As Long
    
    
    'INICIALIZAÇÃO DE VARIÁVEIS
    LINHA = 2
    CONTADOR = 0
    COLUNA = 1
    
    
    'LAÇO DE REPETIÇÃO PARA ENCONTRAR A ÚLTIMA CÉLULA PREENCHIDA DA COLUNA A
    
    While Plan1.Cells(LINHA, 1).Value <> ""
    
    
    LINHA = LINHA + 1
    Wend
    
    
    'LAÇO DE REPETIÇÃO PARA PERCORRER AS COLUNAS DE 1 A 5
    
    For COLUNA = 1 To 5
    
    'LAÇO DE REPETIÇÃO PARA PERCORRER AS LINHAS PREENCHIDAS DA COLUNA A
    
    For LINHAS = 2 To LINHA - 1
    
    If Plan1.Cells(LINHAS, COLUNA).Value = "FECHADO" Then
    
    CONTADOR = CONTADOR + 1
    
    End If
    
    Next LINHAS
    
    Next COLUNA
    
    MsgBox "FORAM ENCONTRADOS " & CONTADOR & " ITENS FECHADOS."
    
    End Sub


    A melhor forma de agradecer e votar como util e / ou marcar como resposta. Anderson Diniz diniabr2011@gmail.com


    terça-feira, 23 de janeiro de 2018 21:41
  • Olá YaS,

    Eu verifiquei o seu arquivo, mas muitas vezes precisamos arrumar o processo e realmente a forma como os dados se encontram tornam muito mais difícil de fazer análise com eles, a melhor forma para se trabalhar seria com somente duas colunas, Data e Valor e depois as fórmulas que fariam a análise que você precisa, tornaria o seu trabalho muito mais fácil. Da forma que esta até uma macro que faça isto automaticamente, pegar os dados em colunas e converter em linhas é mais fácil, porque você poderia montar até em tabela Dinâmica ou deixar as fórmulas prontas.

    Mas eu não sei qual é a dificuldade e se é possível, se for maleável posso te passar uma macro que chega nos cálculos que você precisa.

    Muito Grato!

    Márcio Diniz

    terça-feira, 23 de janeiro de 2018 22:30