Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda só para guru, com contribuição pix


luciano piler

Pergunta

Senhores bom dia, eu tenho uma planilha que preciso auditar, e ela vem assim
(exemplo em anexo)

Repare que tem item com quantidade 1, até ai tudo bem, esta ok.

O problema acontece quando tem item com quantidade 02 ou 03 ou 04... e por ai vai..

eu preciso que:
quando tiver 02 unidade ou mais , o excel repita a mesma coisa embaixo , e divida o valor

ex
codigo guia item qtd valor
39770698 90470800 Novalgina 500mg / Ml Sol . Inj . 2ml (Amp) 2,00 5,38

neste caso, ele teria que manter uma linha com a quantidade 1, repetir o codigo e numero da guia, em qt ficaria 1 e valor dividia por 2

ficando
ex
codigo guia item qtd valor
39770698 90470800 Novalgina 500mg / Ml Sol . Inj . 2ml (Amp) 1,00 2,69
39770698 90470800 Novalgina 500mg / Ml Sol . Inj . 2ml (Amp) 1,00 2,69

deu para entender? agradeço demais se me ajudar, e faço uma contribuição pela solucao

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Fiz um teste e aparentemente esta correto.

Foi criado código para fazer a leitura do conteudo do excel olhando para a a coluna de quantidade (usando constante, dessa forma você pode adaptar para sua planilha emprecisar procurar no código aonde usar ela).

Public Sub DuplicarItemListaEDividirDinheiro()
  Dim totalLinhasPlanilha       As Long
  Dim linhaAtual                As Long
  Dim quantidadeAtual           As Long
  Dim valorNovo                 As Double
  
  Const ACRESCIMO_LINHAS        As Long = 1
  Const LINHAS_INICIAL_LOOP     As Long = 2
  Const QUANTIDADE_MIN_DIVISOR  As Long = 1
  Const COLUNA_QUANTIDADE       As String = "D"
  Const COLUNA_VALOR            As String = "E"
  
  
  'Captura a ultima linha da planilha
  totalLinhasPlanilha = fnTotalLinhas
  
  For linhaAtual = totalLinhasPlanilha To LINHAS_INICIAL_LOOP Step -ACRESCIMO_LINHAS
    'Verificar se a quantida é maior de 1
      quantidadeAtual = Cells(linhaAtual, COLUNA_QUANTIDADE).Value
      If quantidadeAtual > QUANTIDADE_MIN_DIVISOR Then
        'Dividir o valor total pela quantidade
        valorNovo = Cells(linhaAtual, COLUNA_VALOR).Value / quantidadeAtual
        
        'Inserir linha abaixo
        Rows(linhaAtual + ACRESCIMO_LINHAS & ":" & linhaAtual + quantidadeAtual - ACRESCIMO_LINHAS).Insert Shift:=xlDown
        
        'Inicial um loop
        'Caso a linha esteja vazia repete o valor da linha superior
        'Coloca o valor da quantidade pelo mínimo definido
        'Coloca o valorNovo na coloca valor
        ReplicarValorLinhaAbaixo linhaAtual, _
                                 quantidadeAtual, _
                                 QUANTIDADE_MIN_DIVISOR, _
                                 valorNovo
        
        
      End If
  Next linhaAtual
  
  
  
End Sub

Para fazer o preenchimento da linhas abaixo coloquei ou outro procedimento, só para não ficar tudo misturado:
 

Public Sub ReplicarValorLinhaAbaixo(linhaInicial As Long, quantidadeTotal As Long, quantidadeMinima As Long, novoValor As Double)
  
  Dim linhaAtual  As Long
  Dim ultimaLinha As Long
  
  Const CORRECAO_LINHA  As Long = -1
  Const COL_CODIGO      As String = "A"
  Const COL_GUIA        As String = "B"
  Const COL_ITEM        As String = "C"
  Const COL_QTD         As String = "D"
  Const COL_VALOR       As String = "E"

  
  ultimaLinha = linhaInicial + quantidadeTotal + CORRECAO_LINHA
  
  For linhaAtual = linhaInicial To ultimaLinha
    'Caso a linha não esteja preenchida pega o texto da linha superior
    If Cells(linhaAtual, COL_CODIGO).Value = "" Then
      Cells(linhaAtual, COL_CODIGO).Value = Cells(linhaAtual + CORRECAO_LINHA, COL_CODIGO).Value
      Cells(linhaAtual, COL_GUIA).Value = Cells(linhaAtual + CORRECAO_LINHA, COL_GUIA).Value
      Cells(linhaAtual, COL_ITEM).Value = Cells(linhaAtual + CORRECAO_LINHA, COL_ITEM).Value
    End If
    
    'Atualizar quantidade e valor
    Cells(linhaAtual, COL_QTD).Value = quantidadeMinima
    Cells(linhaAtual, COL_VALOR).Value = novoValor
  Next linhaAtual
  
  

End Sub

E como a planilha pode aumentar de tamanho deixei a ultima linha dinâmica fazendo uma função:
 

Public Function fnTotalLinhas() As Long
  fnTotalLinhas = Cells(Rows.Count, "A").End(xlUp).Row
End Function

 

Segue o link do arquivo excel para download e teste: SepararItemResumo.xlsm

 

Antes de processar:

image.png.e22f7ef34d5f767bc67183ec40dfcfde.png

Depois de processar:

image.png.e80a946c69db49acd4000f3451c58556.png

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...