none
Dificuldade no Excel - RRS feed

  • Pergunta

  • Pessoal,

    Estou com um problema em uma planilha do excel.
    Em uma Planilha(Plan1) eu tenho os dados cadastrais do Cliente
    Na Planilha (Plan2) eu tenho todas as vendas da empresa.

    Que o EXCEL busque os nomes dos clientes na Plan2 e coloque na Planilha 1
    E distribua todas as vendas só que por mês (Janeiro, Fevereiro...) que estara na planilha 2
    Para saber quanto cada cliente pagou por mês).

    Alguem poderia me dizer se isso é possível, e como poderia?

    deixei um exemplo em

    http://www.4shared.com/file/DuNbKzpq/teste1.html

    Preciso muito disso e estou completamente perdido.. Tentei a funçao Se a SOMAS - mas nao conseguir.
    • Movido Fabiosouza sábado, 21 de maio de 2011 16:43 fórum errado (De:Certificação Microsoft - Geral)
    sábado, 21 de maio de 2011 16:10

Respostas

  • Trabalhe em cima deste modelo:

    Private Sub GeraRelatório()
    
      Dim ws As Worksheet, wsBanco As Worksheet
      Dim col As Collection
      Dim r As Long, lrow As Long, rLast As Long
      Dim rng As Range
      Dim c As Long
      
      Set wsBanco = Sheets("Banco")
      
      Set ws = Sheets.Add
      
      With wsBanco
        rLast = .Cells(.Rows.Count, "D").End(xlUp).Row
        'sugiro criar uma rotina para automatizar quantas colunas terá o resultado:
        ws.Range("A1:J1") = Array("Devedor", "Doc1", "Valor1", "Data1", "Doc2", "Valor2", "Data2", "Doc3", "Valor3", "Data3")
      
        For lrow = 2 To rLast
          Set rng = ws.Columns("A").Find(.Cells(lrow, "D"), , , xlWhole)
          
          If rng Is Nothing Then
            r = ÚltimaLinha(ws, 1) + 1
            ws.Cells(r, "A") = .Cells(lrow, "D")
          Else
            r = rng.Row
          End If
          c = -1
          Do
            c = c + 3
          Loop While ws.Cells(r, c) <> vbNullString
          ws.Cells(r, c) = .Cells(r, "C")
          ws.Cells(r, c + 1) = .Cells(r, "F")
          ws.Cells(r, c + 2) = .Cells(r, "G")
        Next lrow
        
        'Reseta search ao padrão
        Set rng = .Range("A1").Find("", , , xlPart)
      End With
    End Sub
    
    Private Function ÚltimaLinha(ws As Worksheet, c As Long) As Long
      With ws
        ÚltimaLinha = .Cells(.Rows.Count, c).End(xlUp).Row
      End With
    End Function


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    • Marcado como Resposta Richard Juhasz quinta-feira, 26 de maio de 2011 19:27
    terça-feira, 24 de maio de 2011 23:25

Todas as Respostas

  • Prezado,

    estou movendo sua Thread para o fórum correto,

    quando tiver dúvidas relacionadas ao excel por favor poste por lá,

    abs

    sábado, 21 de maio de 2011 16:44
  • Na célula K2, digite:

    =SOMARPRODUTO(--(Plan1!$C$2:$C$1000=$C2);(Plan1!$D$2:$D$1000);--(MÊS(Plan1!$E$2:$E$1000)=MÊS(K$1)))

    Copie e cole essa fórmula por todo intervalo desejado.

    Para que tal fórmula funcione, K1=1/1/11, L1=1/2/11, M1=1/3/11 e assim por diante, até a coluna V. Se quiser, você pode mudar a formatação dessas células para mostrar somente o nome do mês, e não a data por completo.

    Se não entendeu a fórmula, clique aqui: http://www.ambienteoffice.com.br/excel/SOMARPRODUTO/.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    segunda-feira, 23 de maio de 2011 19:45
  • BenzaDeus,

     

    Muito obrigado pela sua resposta. Eu na minha extrema limitação conseguir, fazer da certo com a formula SOMASE(E.....

     

    só que estou com um outro problema muito maior.. rs..

     

    Puxei um livro caixa da empresa, de contas a receber. E em uma PLAN está o banco da dados e outra Plan, queria que puxasse da outra planilha, por linha, todas as vendas do determinado cliente, descriminando: NOTA, VALOR e Vencimento. Esses dados precisaria ficar na horizontal, pois usaria depois para criar um banco de dados no access, para envio de mala direta.

     

    Será que isso é possível no excel? Eu to me batendo já tem dois dias.. 

    Por que, não consigo diferenciar Venda1 - Venda2 - Pq a unica coisa em comum, é nome de cliente e um cód do cliente que toda a venda tbm possui, o cod do cliente.

    Agradeço a ajuda.

     

    http://www.4shared.com/file/ZlQkPzFr/Teste122.html

    Modelo da tabela.

     

    Abraço!

    Segue o exemplo da tabela.

     

    terça-feira, 24 de maio de 2011 01:37
  • Bom, a solução mais simples que consigo enxergar para esse caso é o uso da tabela dinâmica.

    Soluções alternativas envolveriam uso do VBA ou uso massivo de fórmulas auxiliares na Planilha Form.

    Veja em anexo minha solução. Apenas apliquei o estilo de Tabela em seus dados e gerei uma Tabela Dinâmica.

    Link: http://www.4shared.com/file/5pI3MlQW/Teste122__rev_1_.html


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    terça-feira, 24 de maio de 2011 13:41
  • BenzaDEUS,

     

    A tabela dinamica não consegue me passar as informações que preciso, somente em uma linha.

    EX: Linha1 Cliente, end, cidade..... NOTA!,Valor1, Venc1, Nota2, Valor2, Venc2........

         Linha2 Cliente B, end, cidade..... NOTA!,Valor1, Venc1, Nota2, Valor2, Venc2........

     

    isso seria para colocar depois no Access e fazer a mala direta.

     

    Vc disse que no VBA conseguiria? Poderia me dizer como eu faço?

     

    *Será que existe maneiras de na tabela do fortamo "banco" conseguiria no WORD, pedir a filtragem por cliente, ou seja, Bucando todas os lançamentos do banco de dados daquele determinado cliente, e inserir na tabela do proprio word, direto na Mala Direta?

     

    Agradeço a AJUDA e atenção, tem sido de grande aproveitamento e auxilio.

     

    Abraços!!

     

    Luis Girardi

    terça-feira, 24 de maio de 2011 17:32
  • Trabalhe em cima deste modelo:

    Private Sub GeraRelatório()
    
      Dim ws As Worksheet, wsBanco As Worksheet
      Dim col As Collection
      Dim r As Long, lrow As Long, rLast As Long
      Dim rng As Range
      Dim c As Long
      
      Set wsBanco = Sheets("Banco")
      
      Set ws = Sheets.Add
      
      With wsBanco
        rLast = .Cells(.Rows.Count, "D").End(xlUp).Row
        'sugiro criar uma rotina para automatizar quantas colunas terá o resultado:
        ws.Range("A1:J1") = Array("Devedor", "Doc1", "Valor1", "Data1", "Doc2", "Valor2", "Data2", "Doc3", "Valor3", "Data3")
      
        For lrow = 2 To rLast
          Set rng = ws.Columns("A").Find(.Cells(lrow, "D"), , , xlWhole)
          
          If rng Is Nothing Then
            r = ÚltimaLinha(ws, 1) + 1
            ws.Cells(r, "A") = .Cells(lrow, "D")
          Else
            r = rng.Row
          End If
          c = -1
          Do
            c = c + 3
          Loop While ws.Cells(r, c) <> vbNullString
          ws.Cells(r, c) = .Cells(r, "C")
          ws.Cells(r, c + 1) = .Cells(r, "F")
          ws.Cells(r, c + 2) = .Cells(r, "G")
        Next lrow
        
        'Reseta search ao padrão
        Set rng = .Range("A1").Find("", , , xlPart)
      End With
    End Sub
    
    Private Function ÚltimaLinha(ws As Worksheet, c As Long) As Long
      With ws
        ÚltimaLinha = .Cells(.Rows.Count, c).End(xlUp).Row
      End With
    End Function


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    • Marcado como Resposta Richard Juhasz quinta-feira, 26 de maio de 2011 19:27
    terça-feira, 24 de maio de 2011 23:25
  • Fabio Costa,

     

    O cód está funcionando. Rodando certinho. O problema é que o resultado não está saindo certo.

     

    Quando executo o código, ele cria uma nova planilha, coloca os nomes dos clientes no lugar certo, mas quando eu vou verificar as notas estão repetindo o mesmo valor e algumas estão saindo com o valor de outro cliente.

     

    Como poderia consertar isso?

     

    Obrigado pela atenção e ajuda.

    quarta-feira, 1 de junho de 2011 14:15
  • Nos teste que fiz, a macro rodou corretamente. Uma hipótese para isto estar acontecendo é o fato da sua estrutura de dados estar diferente da que tenho.

    Sugiro você disponibilizar uma parte do seu modelo de dados para que eu possa fazer uns testes e adequar o código.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    quarta-feira, 1 de junho de 2011 14:37