SOMAR DADOS DO FLEXGRID BASEADO EM CRITERIOS

WEBIER 16/10/2010 18:53:29
#355250
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.
BMSOFTWARES2010 16/10/2010 19:12:44
#355252
Vc ja escreveu o codigo ? Se sim, mostre ele para tentarmos resolver seu problema...
WEBIER 16/10/2010 19:18:07
#355253
tenho somente o codigo que soma a coluna inteira... eu nao tenho o q faz a filtragem dos dados

MOREIRA 16/10/2010 19:22:41
#355254
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...
BMSOFTWARES2010 16/10/2010 19:35:42
#355255
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....
WEBIER 16/10/2010 19:55:57
#355256
eu uso uma função para somar toda uma coluna no flexgrid:

[ô]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
MARCIOR 16/10/2010 21:19:18
#355263
Resposta escolhida
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
Tópico encerrado , respostas não são mais permitidas