- 27 Set 2021 às 20:59
#67209
Olá a todos, gostaria de uma dica em um código.
Eu até consegui resolver meu problema, porém o código ficou um pouco redundante, e quando executado em uma base com mais de 1000 linhas de dados, algo comum quando eu trato esse tipo de dado.
O Problema em questão é o seguinte:
tenho uma coluna que é tipo de operação que pode ser "Venda" ou "Devolução", depois o numero do pedido o numero da NF e o valor.
Em um a ultima coluna preciso que me aponte o status que para exemplificar resumi em um para venda. Zero para devoluções até ai blz, uma macro simples resolveu esse problema, mas tem um porem. toda devolução foi oriunda de uma venda, preciso identificar a venda que teve a respectiva devolução. Para isso tenho como indicador o numero do pedido que tanto na venda quanto na devolução são os mesmos. vou deixar abaixo o código que estou usando, até resolve mas estou inseguro quanto a lógica e ao fazer um teste com uma base de dados um pouco extensa o código demorou um tempo considerável pra executar por conta dos dois laços for que tem no código. Não consegui contornar esse problema. Qualquer ajuda será bem vinda.
Segue o código que estou usando:
Eu até consegui resolver meu problema, porém o código ficou um pouco redundante, e quando executado em uma base com mais de 1000 linhas de dados, algo comum quando eu trato esse tipo de dado.
O Problema em questão é o seguinte:
tenho uma coluna que é tipo de operação que pode ser "Venda" ou "Devolução", depois o numero do pedido o numero da NF e o valor.
Em um a ultima coluna preciso que me aponte o status que para exemplificar resumi em um para venda. Zero para devoluções até ai blz, uma macro simples resolveu esse problema, mas tem um porem. toda devolução foi oriunda de uma venda, preciso identificar a venda que teve a respectiva devolução. Para isso tenho como indicador o numero do pedido que tanto na venda quanto na devolução são os mesmos. vou deixar abaixo o código que estou usando, até resolve mas estou inseguro quanto a lógica e ao fazer um teste com uma base de dados um pouco extensa o código demorou um tempo considerável pra executar por conta dos dois laços for que tem no código. Não consegui contornar esse problema. Qualquer ajuda será bem vinda.
Segue o código que estou usando:
Código: Selecionar todos
Sub devolucao()
Dim limite As Integer
Dim i As Integer
Dim pedido As Long
Dim operacao As String
Dim somaDevolucao As Integer
Dim valor As Integer
Range("a1").Select
limite = ActiveCell.End(xlDown).Row
For i = 1 To limite - 1
operacao = ActiveCell.Offset(i, 0)
pedido = ActiveCell.Offset(i, 1)
valor = ActiveCell.Offset(i, 3)
If operacao = "devolução" Then
somase pedido, i, limite, valor
End If
'MsgBox "operação: " & operacao & " Pedido: " & pedido & " Valor: " & valor
Next
End Sub
Function somase(pedido, indice, limite, valor)
Dim somaDevolucao As Integer
Dim pedidoVenda As Long
somaDevolucao = WorksheetFunction.SumIf(Range("B2:B10"), pedido, Range("D2:D10"))
If somaDevolucao = 0 Then
ActiveCell.Offset(indice - 1, 4).Value = 0
Else
For i = 1 To limite
pedidoVenda = ActiveCell.Offset(i, 1)
If pedido = pedidoVenda Then
If Abs(valor) = ActiveCell.Offset(i, 3) Then ActiveCell.Offset(i, 4).Value = 0
End If
Next
End If
End Function