Option Explicit
Dim tbcongelada(1000000, 5) As Variant
Dim colunaB(1000000) As String
Dim tbprincipal(3 To 100000, 7) As Variant
Dim linhaspreenchidas As Long
Public NomePlan As String
Sub CalcularPrecoMedio()
'On Error GoTo fim
Erase colunaB
Dim linha As Long
Dim linha2 As Long
Dim precomedio As Double
Dim achou As Boolean
Dim corretora As String
Dim ativo As String
Dim linha3 As Long
Dim linha7 As Long
Dim LINFINAL As Long
Dim LININICIAL As Long
Dim LINHA9 As Long
Dim PRECO As Double
Dim achouvenda As Boolean
Dim linTbPrincipal As Long
Dim LR As Long
linha3 = 3
linhaspreenchidas = 3
While Sheets(NomePlan).Range("F" & linhaspreenchidas).Value <> ""
linhaspreenchidas = linhaspreenchidas + 1
Wend
LR = linhaspreenchidas - 1
Dim PREENCHEU As Boolean
For linTbPrincipal = 3 To LR
PREENCHEU = False
If Sheets(NomePlan).Range("F" & linTbPrincipal).Value <> "" Then
If Sheets(NomePlan).Range("T" & linTbPrincipal).Value <> "" Then
If Sheets(NomePlan).Range("U" & linTbPrincipal).Value <> "" Then
If Sheets(NomePlan).Range("AB" & linTbPrincipal).Value <> "" Then
PREENCHEU = True
tbprincipal(linTbPrincipal, 0) = Sheets(NomePlan).Range("B" & linTbPrincipal).Value
tbprincipal(linTbPrincipal, 1) = Sheets(NomePlan).Range("F" & linTbPrincipal).Value
tbprincipal(linTbPrincipal, 2) = Sheets(NomePlan).Range("T" & linTbPrincipal).Value
tbprincipal(linTbPrincipal, 3) = Sheets(NomePlan).Range("U" & linTbPrincipal).Value
tbprincipal(linTbPrincipal, 4) = Sheets(NomePlan).Range("AB" & linTbPrincipal).Value
tbprincipal(linTbPrincipal, 5) = Sheets(NomePlan).Range("AC" & linTbPrincipal).Value
End If
End If
End If
End If
Next linTbPrincipal
If PREENCHEU = False Then
Exit Sub
End If
' Application.EnableEvents = False
' linhaspreenchidas = 3
'
'
' While tbprincipal(linhaspreenchidas, 2) <> ""
'
' linhaspreenchidas = linhaspreenchidas + 1
' Wend
linha = 3
While tbprincipal(linha, 2) <> ""
If linhaspreenchidas > 4 Then
If tbprincipal(linha, 0) <> "ZERADA" Then
If tbprincipal(linha, 3) <> "" Then
If tbprincipal(linha, 1) <> "" Then
If VerificarQuantidade(tbprincipal(linha, 2), tbprincipal(linha, 1)) = True Then
MsgBox "Não insira mais vendas que compras."
GoTo fim
End If
achou = False
achouvenda = False
For linha2 = linha + 1 To linhaspreenchidas
If UCase(tbprincipal(linha, 2)) = UCase(tbprincipal(linha2, 2)) And _
UCase(tbprincipal(linha, 1)) = UCase(tbprincipal(linha2, 1)) Then
If UCase(colunaB(linha)) <> "B" Then
If tbprincipal(linha, 3) <> "" Then
If tbprincipal(linha, 4) <> "" Then
achou = True
corretora = tbprincipal(linha, 2)
ativo = tbprincipal(linha, 1)
For linha7 = 3 To linhaspreenchidas - 1
If tbprincipal(linha7, 3) < 0 Then
achouvenda = True
Exit For
End If
Next linha7
If achouvenda = False Then
Call preenchertabelaauxiliar(corretora, ativo)
Else
Call preenchertabelaauxiliar2(corretora, ativo)
End If
' Exit For
End If
End If
End If
End If
Next linha2
If achou = False Then
If UCase(colunaB(linha)) <> "B" Then
If tbprincipal(linha, 3) > 0 Then
Sheets(NomePlan).Range("AC" & linha).Value = tbprincipal(linha, 4)
tbprincipal(linha, 5) = tbprincipal(linha, 4)
colunaB(linha) = "B"
Else
End If
End If
End If
End If
End If
End If
Else
Call preenchertabelaauxiliar(tbprincipal(3, 2), tbprincipal(3, 1))
End If
linha = linha + 1
Wend
fim:
' Application.EnableEvents = True
End Sub
Sub preenchertabelaauxiliar(ByVal corretora As String, ByVal ativo As String)
'Dim colunaB(1000000) As String
On Error GoTo fim
Dim linha As Long
Dim linha2 As Long
Dim precomedio As Double
Dim achou As Boolean
Dim linha3 As Long
Dim linha4 As Long
' Dim linhaspreenchidas As Long
Dim qtdvendas As Double
Dim qtdgeralvendas As Double
Dim QTD As Double
Dim PRECO As Double
Dim TOTAL As Double
Dim QTDGERAL As Double
Dim TOTALGERAL As Double
achou = False
' linhaspreenchidas = 3
linha3 = 3
linha4 = 3
' While tbprincipal(linhaspreenchidas, 2) <> ""
'
' linhaspreenchidas = linhaspreenchidas + 1
' Wend
linha = 3
' Dim tbprincipal(1000000, 5) As Variant
Dim tbAuxiliar(1000000, 5) As Variant
While tbprincipal(linha, 2) <> ""
For linha2 = linha + 1 To linhaspreenchidas
If UCase(tbprincipal(linha, 2)) = UCase(corretora) And _
UCase(tbprincipal(linha, 1)) = UCase(ativo) Then
If UCase(colunaB(linha)) <> "B" Then
If tbprincipal(linha, 3) > 0 Then
tbAuxiliar(linha3, 0) = tbprincipal(linha, 2)
tbAuxiliar(linha3, 1) = tbprincipal(linha, 1)
tbAuxiliar(linha3, 2) = tbprincipal(linha, 3)
tbAuxiliar(linha3, 3) = tbprincipal(linha, 4)
linha3 = linha3 + 1
colunaB(linha) = "B"
End If
End If
End If
Next linha2
linha = linha + 1
Wend
linha3 = 3
QTD = 0
PRECO = 0
While tbAuxiliar(linha3, 0) <> ""
QTD = tbAuxiliar(linha3, 2)
PRECO = tbAuxiliar(linha3, 3)
TOTAL = QTD * PRECO
tbAuxiliar(linha3, 4) = TOTAL
linha3 = linha3 + 1
Wend
linha3 = 3
TOTALGERAL = 0
QTDGERAL = 0
While tbAuxiliar(linha3, 0) <> ""
QTD = tbAuxiliar(linha3, 2)
TOTAL = tbAuxiliar(linha3, 4)
TOTALGERAL = TOTALGERAL + TOTAL
QTDGERAL = QTDGERAL + QTD
linha3 = linha3 + 1
Wend
precomedio = TOTALGERAL / QTDGERAL
linha = 3
linha3 = 3
While tbprincipal(linha, 2) <> ""
If UCase(tbprincipal(linha, 2)) = UCase(corretora) And _
UCase(tbprincipal(linha, 1)) = UCase(ativo) Then
If tbprincipal(linha, 3) > 0 Then
' If tbprincipal(linha, 3) > 0 Then
colunaB(linha) = "B"
Sheets(NomePlan).Range("AC" & linha) = precomedio
'End If
End If
End If
linha = linha + 1
Wend
fim:
End Sub
Sub preenchertabelaauxiliar2(ByVal corretora As String, ByVal ativo As String)
On Error GoTo fim
Dim achouvenda(1000000) As Variant
' Dim colunaB(1000000) As String
Dim LINHA20 As Long
Dim linha As Long
Dim linha2 As Long
Dim precomedio As Double
Dim achou As Boolean
Dim QTD As Double
Dim PRECO As Double
Dim TOTAL As Double
Dim qtd2 As Double
Dim preco2 As Double
Dim total2 As Double
Dim QTDGERAL2 As Double
Dim TOTALGERAL2 As Double
Dim linha5 As Long
Dim linha3 As Long
Dim linha4 As Long
Dim LININICIAL As Long
Dim LINFINAL As Long
Dim LINHA9 As Long
'Dim linhaspreenchidas As Long
Dim precomedio2 As Double
'Dim tbprincipal2(1000000, 6) As Variant
'Dim tbprincipal(3 To 1000000, 5) As Variant
achou = False
'linhaspreenchidas = 3
linha3 = 3
linha4 = 3
' While tbprincipal(linhaspreenchidas, 2) <> ""
'
' linhaspreenchidas = linhaspreenchidas + 1
' Wend
linha = 3
linha3 = 3
QTD = 0
PRECO = 0
While tbprincipal(linha3, 1) <> ""
If tbprincipal(linha3, 0) <> "ZERADA" Then
If UCase(tbprincipal(linha3, 2)) = UCase(corretora) And _
UCase(tbprincipal(linha3, 1)) = UCase(ativo) Then
QTD = tbprincipal(linha3, 3)
If QTD > 0 Then
PRECO = tbprincipal(linha3, 4)
Else
LINFINAL = linha3 - 1
For LINHA9 = LINFINAL To 3 Step -1
If tbprincipal(LINHA9, 3) > 0 Then
If tbprincipal(LINHA9, 0) <> "ZERADA" Then
If UCase(tbprincipal(LINHA9, 2)) = UCase(corretora) And _
UCase(tbprincipal(LINHA9, 1)) = UCase(ativo) Then
LININICIAL = LINHA9
End If
End If
End If
Next LINHA9
PRECO = PRECODEVENDA(LININICIAL, LINFINAL, corretora, ativo)
End If
TOTAL = QTD * PRECO
tbprincipal(linha3, 6) = TOTAL
End If
End If
linha3 = linha3 + 1
Wend
linha3 = 3
Dim QTDGERAL As Double
Dim TOTALGERAL As Double
TOTALGERAL = 0
QTDGERAL = 0
While tbprincipal(linha3, 1) <> ""
If tbprincipal(linha3, 0) <> "ZERADA" Then
If UCase(tbprincipal(linha3, 2)) = UCase(corretora) And _
UCase(tbprincipal(linha3, 1)) = UCase(ativo) Then
QTD = tbprincipal(linha3, 3)
TOTAL = tbprincipal(linha3, 6)
TOTALGERAL = TOTALGERAL + TOTAL
QTDGERAL = QTDGERAL + QTD
End If
End If
linha3 = linha3 + 1
Wend
If QTDGERAL = 0 Then
Dim j As Long
Dim LINHA8 As Long
linha2 = linhaspreenchidas - 1
If tbprincipal(linha2, 3) < 0 Then
'If tbprincipal(linha2, 0) = "ZERADA" Then
' If tbprincipal(linha2, 3) < 0 Then
If Sheets(NomePlan).Range("AC" & linha2).Value = "" Then
LINFINAL = linha2 - 1
For LINHA9 = LINFINAL To 3 Step -1
If tbprincipal(LINHA9, 3) > 0 Then
'If tbprincipal(LINHA9, 0) <> "ZERADA" Then
If UCase(tbprincipal(LINHA9, 2)) = UCase(corretora) And _
UCase(tbprincipal(LINHA9, 1)) = UCase(ativo) Then
LININICIAL = LINHA9
'End If
End If
End If
Next LINHA9
PRECO = PRECODEVENDA(LININICIAL, LINFINAL, corretora, ativo)
Sheets(NomePlan).Range("AC" & linha2).Value = PRECO
tbprincipal(linha2, 5) = PRECO
colunaB(linha2) = "B"
End If
End If
For LINHA8 = linha3 - 1 To 3 Step -1
If tbprincipal(LINHA8, 0) <> "ZERADA" Then
If tbprincipal(LINHA8, 2) = corretora And _
tbprincipal(LINHA8, 1) = ativo Then
If tbprincipal(4, 3) <> "" Then
Sheets(NomePlan).Range("B" & LINHA8).Value = "ZERADA"
tbprincipal(LINHA8, 0) = "ZERADA"
End If
End If
End If
Next LINHA8
For j = linha3 - 1 To 3 Step -1
If tbprincipal(j, 1) = ativo Then
If tbprincipal(j, 0) = corretora Then
Exit For
End If
End If
Next j
precomedio = tbprincipal(j, 5)
Else
precomedio = TOTALGERAL / QTDGERAL
linha = 3
While tbprincipal(linha, 2) <> ""
If tbprincipal(linha3, 0) <> "ZERADA" Then
If UCase(tbprincipal(linha, 2)) = UCase(corretora) And _
UCase(tbprincipal(linha, 1)) = UCase(ativo) Then
'If tbprincipal(linha, 3) > 0 Then
If tbprincipal(linha, 0) <> "ZERADA" Then
If colunaB(linha) <> "B" Then
colunaB(linha) = "B"
Sheets(NomePlan).Range("AC" & linha).Value = precomedio
End If
End If
End If
End If
'End If
linha = linha + 1
Wend
End If
fim:
End Sub
Public Function VerificarQuantidade(ByVal corretora As String, ByVal ativo As String) As Boolean
Dim contqtdpositiva As Double
Dim contqtdnegativa As Double
'Dim linhaspreenchidas As Long
Dim linha As Long
Dim linha2 As Long
' Dim corretora As String
'Dim ativo As String
Dim linha3 As Long
Dim tbprincipal(1000000, 5) As Variant
Dim ColunaC(1000000) As Variant
Dim linha5 As Long
Dim qtd2 As Double
' linhaspreenchidas = 3
' While tbprincipal(linhaspreenchidas, 2) <> ""
'
' linhaspreenchidas = linhaspreenchidas + 1
' Wend
linha3 = 3
linha = 3
While tbprincipal(linha, 2) <> ""
For linha2 = linha + 1 To linhaspreenchidas
If tbprincipal(linha, 0) = "ZERADA" Then
Exit For
End If
If UCase(tbprincipal(linha, 2)) = UCase(corretora) And _
UCase(tbprincipal(linha, 1)) = UCase(ativo) Then
If UCase(ColunaC(linha)) = "B" Then
Exit For
End If
If UCase(ColunaC(linha)) <> "B" Then
If tbprincipal(linha, 0) <> "ZERADA" Then
tbprincipal(linha3, 0) = tbprincipal(linha, 2)
tbprincipal(linha3, 1) = tbprincipal(linha, 1)
tbprincipal(linha3, 2) = tbprincipal(linha, 3)
tbprincipal(linha3, 3) = tbprincipal(linha, 4)
linha3 = linha3 + 1
ColunaC(linha) = "B"
End If
End If
End If
Next linha2
linha = linha + 1
Wend
contqtdpositiva = 0
contqtdnegativa = 0
linha5 = 3
qtd2 = 0
'preco2 = 0
While tbprincipal(linha5, 1) <> ""
qtd2 = tbprincipal(linha5, 2)
If qtd2 > 0 Then
contqtdpositiva = contqtdpositiva + qtd2
Else
contqtdnegativa = contqtdnegativa - qtd2
End If
linha5 = linha5 + 1
Wend
If contqtdnegativa > contqtdpositiva Then
VerificarQuantidade = True
End If
End Function
Function PRECODEVENDA(ByVal LINHAINICIAL As Long, ByVal LINHAFINAL As Long, ByVal corretora As String, ByVal ativo As String) As Double
On Error GoTo fim
Dim linha As Long
Dim linha2 As Long
Dim precomedio As Double
Dim achou As Boolean
Dim linha3 As Long
Dim linha4 As Long
' Dim linhaspreenchidas As Long
Dim qtdvendas As Double
Dim qtdgeralvendas As Double
Dim QTD As Double
Dim PRECO As Double
Dim TOTAL As Double
Dim QTDGERAL As Double
Dim TOTALGERAL As Double
achou = False
' linhaspreenchidas = 3
linha3 = 3
linha4 = 3
linha = 3
' Dim tbprincipal(1000000, 5) As Variant
Dim tbAuxiliar(3 To 1000000, 5) As Variant
'While tbprincipal(linha, 2) <> ""
For linha2 = LINHAINICIAL To LINHAFINAL
If UCase(tbprincipal(linha2, 2)) = UCase(corretora) And _
UCase(tbprincipal(linha2, 1)) = UCase(ativo) Then
If tbprincipal(linha2, 3) > 0 Then
If tbprincipal(linha2, 0) <> "ZERADA" Then
tbAuxiliar(linha3, 0) = tbprincipal(linha2, 2)
tbAuxiliar(linha3, 1) = tbprincipal(linha2, 1)
tbAuxiliar(linha3, 2) = tbprincipal(linha2, 3)
tbAuxiliar(linha3, 3) = tbprincipal(linha2, 4)
linha3 = linha3 + 1
End If
End If
End If
Next linha2
' linha = linha + 1
' Wend
linha3 = 3
QTD = 0
PRECO = 0
While tbAuxiliar(linha3, 0) <> ""
QTD = tbAuxiliar(linha3, 2)
PRECO = tbAuxiliar(linha3, 3)
TOTAL = QTD * PRECO
tbAuxiliar(linha3, 4) = TOTAL
linha3 = linha3 + 1
Wend
linha3 = 3
TOTALGERAL = 0
QTDGERAL = 0
While tbAuxiliar(linha3, 0) <> ""
QTD = tbAuxiliar(linha3, 2)
TOTAL = tbAuxiliar(linha3, 4)
TOTALGERAL = TOTALGERAL + TOTAL
QTDGERAL = QTDGERAL + QTD
linha3 = linha3 + 1
Wend
precomedio = TOTALGERAL / QTDGERAL
PRECODEVENDA = precomedio
fim:
End Function