SOMAR DADOS DO FLEXGRID BASEADO EM CRITERIOS
Tenho um flexgrid que possui varias colunas... a coluna 4 exibe o tipo de compra (DINHEIRO, CHEQUE, CARTAO, ETC) e na coluna 5 exiber o campo VALOR.
então meu grid fica mais ou menos assim:
| CLIENTE | TIPO | VALOR |
| Maria | Dinheiro | 10,00 |
|João | Cartao | 22,00 |
| Raimundo | Dinheiro | 15,00 |
| Ana | Cheque | 50,00 |
então gostaria de mostrar num textbox a soma somente dos dinheiros
txtDinheiro.text = 25,00
ou seja, ele tem que ver na coluna 4 o que é dinheiro e pegar o valor na coluna 5... o que não tiver a palavra [Ô]dinheiro[Ô] na coluna 4 ele não deve somar.
acho q era só isso.
então meu grid fica mais ou menos assim:
| CLIENTE | TIPO | VALOR |
| Maria | Dinheiro | 10,00 |
|João | Cartao | 22,00 |
| Raimundo | Dinheiro | 15,00 |
| Ana | Cheque | 50,00 |
então gostaria de mostrar num textbox a soma somente dos dinheiros
txtDinheiro.text = 25,00
ou seja, ele tem que ver na coluna 4 o que é dinheiro e pegar o valor na coluna 5... o que não tiver a palavra [Ô]dinheiro[Ô] na coluna 4 ele não deve somar.
acho q era só isso.
Vc ja escreveu o codigo ? Se sim, mostre ele para tentarmos resolver seu problema...
tenho somente o codigo que soma a coluna inteira... eu nao tenho o q faz a filtragem dos dados
veja aà se te ajuda...
TxtVlr_SubTotal.Text = Format(CDbl(TxtVlr_SubTotal.Text) + CDbl(Sgrid.TextMatrix(Sgrid.Rows - 1, 7)), [Ô]###,##0.00[Ô])
nesse meu caso estou somando a coluna 7..
aà é só vc adaptar na sua necessidade...
TxtVlr_SubTotal.Text = Format(CDbl(TxtVlr_SubTotal.Text) + CDbl(Sgrid.TextMatrix(Sgrid.Rows - 1, 7)), [Ô]###,##0.00[Ô])
nesse meu caso estou somando a coluna 7..
aà é só vc adaptar na sua necessidade...
Manda o codigo da coluna inteira que vo fez para eu tentar ver o que pode ser alterado para que se ajuste ao seu caso....
eu uso uma função para somar toda uma coluna no flexgrid:
[ô]função
[ô]usando a função (esse numero 5 é o numero da coluna)
eu tenho tambem um código que mudar a cor da linha baseado no texto que está na coluna 4
entao o que precisava era uniar as duas coisas...
-ver o texto da coluna 4 e somar todos que possuissem o mesmo texto
[ô]função
Public Function SomaGrid(var_Grid As MSFlexGrid, Col As Integer) As Double
Dim i As Integer, Valor As Double
For i = 0 To var_Grid.Rows - 1
If IsNumeric(var_Grid.TextMatrix(i, Col)) Then
Valor = Valor + CDbl(var_Grid.TextMatrix(i, Col))
End If
Next i
SomaGrid = Valor
End Function
[ô]usando a função (esse numero 5 é o numero da coluna)
txtTotalDinheiro.Text = Format(SomaGrid(Grid, 5), [Ô]##,##0.00[Ô])
eu tenho tambem um código que mudar a cor da linha baseado no texto que está na coluna 4
For yx = 1 To .Rows - 1
For xx = 0 To .Cols - 1
.Col = xx
.Row = yx
If .TextMatrix(yx, 4) = [Ô]CARTAO[Ô] Then
.CellForeColor = &H8000&
.CellFontBold = True
ElseIf .TextMatrix(yx, 4) = [Ô]DINHEIRO[Ô] Then
.CellForeColor = vbBlack
ElseIf .TextMatrix(yx, 4) = [Ô]SAÃDA[Ô] Then
.CellForeColor = vbRed
.CellFontBold = True
End If
Next xx
Next yx
End With
entao o que precisava era uniar as duas coisas...
-ver o texto da coluna 4 e somar todos que possuissem o mesmo texto
Private Sub Form_Load()
With MSFlexGrid1
.TextMatrix(1, 0) = [Ô]Maria[Ô]
.TextMatrix(2, 0) = [Ô]João[Ô]
.TextMatrix(3, 0) = [Ô]Raimundo[Ô]
.TextMatrix(4, 0) = [Ô]Ana[Ô]
.TextMatrix(1, 1) = [Ô]Dinheiro[Ô]
.TextMatrix(2, 1) = [Ô]Cartão[Ô]
.TextMatrix(3, 1) = [Ô]Dinheiro[Ô]
.TextMatrix(4, 1) = [Ô]Cheque[Ô]
.TextMatrix(1, 2) = 10
.TextMatrix(2, 2) = 22
.TextMatrix(3, 2) = 15
.TextMatrix(4, 2) = 50
End With
somaFlex
End Sub
Private Sub somaFlex()
Dim soma As Currency
Dim i As Integer
On Error GoTo errorhandeler
With MSFlexGrid1
For i = 1 To .Rows - 1
If .TextMatrix(i, 1) = [Ô]Dinheiro[Ô] And IsNumeric(.TextMatrix(i, 2)) Then
soma = soma + CCur(.TextMatrix(i, 2))
Else
End If
Next
Text1.Text = Format(soma, [Ô]#,##0.00[Ô])
End With
errorhandeler:
End Sub
With MSFlexGrid1
.TextMatrix(1, 0) = [Ô]Maria[Ô]
.TextMatrix(2, 0) = [Ô]João[Ô]
.TextMatrix(3, 0) = [Ô]Raimundo[Ô]
.TextMatrix(4, 0) = [Ô]Ana[Ô]
.TextMatrix(1, 1) = [Ô]Dinheiro[Ô]
.TextMatrix(2, 1) = [Ô]Cartão[Ô]
.TextMatrix(3, 1) = [Ô]Dinheiro[Ô]
.TextMatrix(4, 1) = [Ô]Cheque[Ô]
.TextMatrix(1, 2) = 10
.TextMatrix(2, 2) = 22
.TextMatrix(3, 2) = 15
.TextMatrix(4, 2) = 50
End With
somaFlex
End Sub
Private Sub somaFlex()
Dim soma As Currency
Dim i As Integer
On Error GoTo errorhandeler
With MSFlexGrid1
For i = 1 To .Rows - 1
If .TextMatrix(i, 1) = [Ô]Dinheiro[Ô] And IsNumeric(.TextMatrix(i, 2)) Then
soma = soma + CCur(.TextMatrix(i, 2))
Else
End If
Next
Text1.Text = Format(soma, [Ô]#,##0.00[Ô])
End With
errorhandeler:
End Sub
Tópico encerrado , respostas não são mais permitidas