Não posso fazer isso sem VBA, estou criando um programinha de finanças e preciso que seja tudo automatizado, mas vendo o que o Mandrix mandou na tabela eu consegui resolver via vba.
abaixo segue o código
Public Sub CALCULASALDO()
' CALCULA AO SALDO FINAL DAS CONTAS
' CLASSIFICA AS CONTAS
Sheets("CADASTROCONTA").Select
Range("A3:F53").Select
ActiveWorkbook.Worksheets("CADASTROCONTA").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("CADASTROCONTA").Sort.SortFields.Add Key:=Range("C4:C53"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("CADASTROCONTA").Sort.SortFields.Add Key:=Range("F4:F53"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("CADASTROCONTA").Sort.SortFields.Add Key:=Range("B4:B53"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("CADASTROCONTA").Sort
.SetRange Range("A3:F53")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' CLASSIFICA O FLUXO
Sheets("FLUXO").Select
Range("A3:K50003").Select
ActiveWorkbook.Worksheets("FLUXO").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("FLUXO").Sort.SortFields.Add Key:=Range("F4:F50003"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("FLUXO").Sort.SortFields.Add Key:=Range("G4:G50003"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("FLUXO").Sort.SortFields.Add Key:=Range("K4:K50003"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("FLUXO").Sort
.SetRange Range("A3:K50003")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
' SOMA O SALDO TOTAL DAS CONTAS DO USUÁRIO
Dim DEBITO As Currency
Dim CREDITO As Currency
Dim LIN As Integer
Dim LINB As Integer
Dim CD As String
Dim MSG As String
DATA = 0
DEBITO = 0
CREDITO = 0
LIN = 4
LINB = 4
Do While Worksheets("CADASTROCONTA").Cells(LIN, 2).Value <> ""
If Worksheets("CADASTROCONTA").Cells(LIN, 2).Value = Worksheets("FLUXO").Cells(LINB, 7).Value And Worksheets("FLUXO").Cells(LINB, 6).Value = "FECHADO" Then
If Worksheets("FLUXO").Cells(LINB, 8).Value = "C" Then
If CDate(Format(Worksheets("FLUXO").Cells(LINB, 11).Value, "DD/MM/YYYY")) >= DateAdd("M", -1, CDate(Format(Worksheets("CADASTROCONTA").Cells(LIN, 6).Value, "DD/MM/YYYY"))) And CDate(Format(Worksheets("FLUXO").Cells(LINB, 11).Value, "DD/MM/YYYY")) <= CDate(Format(Worksheets("CADASTROCONTA").Cells(LIN, 6).Value, "DD/MM/YYYY")) Then
If Worksheets("FLUXO").Cells(LINB, 10).Value = "D" Then
DEBITO = DEBITO + Worksheets("FLUXO").Cells(LINB, 5).Value
LINB = LINB + 1
ElseIf Worksheets("FLUXO").Cells(LINB, 10).Value = "C" Then
CREDITO = CREDITO + Worksheets("FLUXO").Cells(LINB, 5).Value
LINB = LINB + 1
Else
LINB = LINB + 1
End If
Else
LINB = LINB + 1
End If
Else
If Worksheets("FLUXO").Cells(LINB, 10).Value = "D" Then
DEBITO = DEBITO + Worksheets("FLUXO").Cells(LINB, 5).Value
LINB = LINB + 1
ElseIf Worksheets("FLUXO").Cells(LINB, 10).Value = "C" Then
CREDITO = CREDITO + Worksheets("FLUXO").Cells(LINB, 5).Value
LINB = LINB + 1
Else
LINB = LINB + 1
End If
End If
Else
LINB = LINB + 1
End If
If Worksheets("FLUXO").Cells(LINB, 2).Value = "" Then
Worksheets("CADASTROCONTA").Cells(LIN, 5).Value = CREDITO - DEBITO
If Worksheets("CADASTROCONTA").Cells(LIN, 4).Value > Worksheets("CADASTROCONTA").Cells(LIN, 5).Value And Worksheets("CADASTROCONTA").Cells(LIN, 3).Value <> "N" Then
MSG = MsgBox("A CONTA " & Worksheets("CADASTROCONTA").Cells(LIN, 2).Value & " ULTRAPASSOU O LIMITE ESTABELECIDO, POR FAVOR, VERIFIQUE POSSÍVEIS ERROS, OU SE É NECESSÁRIO A ATUALIZAÇÃO DA COTA, OU AINDA, SE O VALOR REALMENTE SERÁ LANÇADO NEGATIVO.", vbOKOnly, "CUIDADO LIMITE ULTRAPASSADO")
End If
LIN = LIN + 1
LINB = 4
CREDITO = 0
DEBITO = 0
End If
Loop
End Sub
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 08/02/2012 9:49 am