[ zormar @ 13.09.2007. 22:33 ] @
Kako sabrati celije iz jednog zapisa FlexGrida u koje su upisani brojevi manji od 10, i taj zbir prikazati u labeli? |
[ zormar @ 13.09.2007. 22:33 ] @
[ rgdrajko @ 14.09.2007. 19:15 ] @
Evo.
Code: Private Sub Form_Load() Dim zbir As Integer Randomize Timer MSFlexGrid1.Cols = 10 MSFlexGrid1.Rows = 10 'Spoljasnje odbrojcavanje sivih polja For k = 0 To MSFlexGrid1.Cols - 1 MSFlexGrid1.TextMatrix(0, k) = k Next k For r = 0 To MSFlexGrid1.Rows - 1 MSFlexGrid1.TextMatrix(r, 0) = r Next r 'Upisivanje slucajnih brojeva od 0 do 9 kao proba For k = 1 To MSFlexGrid1.Cols - 1 For r = 1 To MSFlexGrid1.Rows - 1 MSFlexGrid1.TextMatrix(r, k) = Int(Rnd * 10) Next r Next k 'Sabiranje svih kolona prvog reda zbir = 0 For k = 1 To MSFlexGrid1.Cols - 1 zbir = zbir + Val(MSFlexGrid1.TextMatrix(1, k)) Next k 'Zbir svih kolona prvog reda Label2.Caption = zbir 'Sabiranje svih redova prve kolone zbir = 0 For r = 1 To MSFlexGrid1.Rows - 1 zbir = zbir + Val(MSFlexGrid1.TextMatrix(r, 1)) Next r 'Zbir svih redova prve kolone Label4.Caption = zbir End Sub [ Marko_L @ 15.09.2007. 06:11 ] @
Ovako, nisam siguran da li misliš na jednu kolonu, jedan red ili kompletan grid gde su vrednosti manje od 10, ali evo i sva tri rešenja.
Sabrati samo jednu kolonu: Code: Private Function SumColumn(lColumn As Long) As Long Dim i As Long Dim lZbir As Long lZbir = 0 For i = 1 To MSFlexGrid1.Rows - 1 If Val(MSFlexGrid1.TextMatrix(i, lColumn)) < 10 Then lZbir = lZbir + Val(MSFlexGrid1.TextMatrix(i, lColumn)) Next i SumColumn = lZbir End Function Sabrati samo jedan red: Code: Private Function SumRow(lRow As Long) As Long Dim i As Long Dim lZbir As Long lZbir = 0 For i = 1 To MSFlexGrid1.Cols - 1 If Val(MSFlexGrid1.TextMatrix(lRow, i)) < 10 Then lZbir = lZbir + Val(MSFlexGrid1.TextMatrix(lRow, i)) Next i SumRow = lZbir End Function Sabrati ceo grid Code: Private Function SumGrid() As Long Dim i As Long Dim j As Long Dim lZbir As Long lZbir = 0 For i = 1 To MSFlexgrid1.Rows - 1 For j = 1 To MSFlexgrid1.Cols - 1 If Val(MSFlexGrid1.TextMatrix(i, j)) < 10 Then lZbir = lZbir + Val(MSFlexGrid1.TextMatrix(i, j)) Next j Next i SumGrid = lZbir End Function Primetićeš da sam izračunavanje stavio u funkcije, što je uvek dobra praksa, jer dobijamo na fleksibilnosti. Ovako ne moraš da se vežeš za jednu labelu ili samo jedan red ili kolonu, već jednom linijom koda pozivaš ono što ti treba i smeštaš gde god ti želiš. Recimo... Hoćeš da sabereš samo drugi red i smestiš u Label1, samo ukucaš Code: Label1.Caption = SumRow(2) ili hoćeš treću kolonu u textbox Code: Text1.Text = SumColumn(3) ili ceo grid u drugu labelu Code: Label2.Caption = SumGrid Uz malo dorade, mogao bi da prosleđuješ i vrednost ispod koje treba sabirati brojeve, prostim dodavanjem još jedne varijable kojom ćeš zameniti broj 10, no da ne dužimo sad. [ zormar @ 16.09.2007. 12:44 ] @
Hvala obojici na odgovorima, moje pitanje je bilo nejasno.
Radi se o f-ji Count za sabiranje broja celija u jednom zapisu (redu) koje ispunjavaju dati uslov. [ BinLaden @ 16.09.2007. 17:53 ] @
Ako nije ni ovo onda ne budi skrt na rijecima, i polako objasni sve sta ti treba.
Code: Dim I as Integer Dim iCount as Integer Dim iRow as Integer iRow = 1 'Ovde odredjujes koji red ispitujes, a ako hoces za sve redove onda ti trba jos jedna petlja 'koja ce prolaziti kroz njih For I = 0 to MSFlexGrid1.Cols - 1 If Val(MSFlexGrid1.TextMatrix(iRow, I)) < 10 Then iCount = iCount + 1 Next I Label1.Caption = iCount [ zormar @ 17.09.2007. 11:23 ] @
Hvala, to je upravo ono sto mi je trebalo.
[ Marko_L @ 17.09.2007. 13:19 ] @
Pa upravo to si i dobio, i to sve u jednoj funkciji, ostalo ti samo da pozoveš SumRow(n) gde je n broj reda koji ti treba.
[ BinLaden @ 17.09.2007. 18:44 ] @
Citat: Marko_L: Pa upravo to si i dobio, i to sve u jednoj funkciji, ostalo ti samo da pozoveš SumRow(n) gde je n broj reda koji ti treba. Vjerovatno nisi dobro gledao razliku izmedju mog i tvog rjesenja odnosno tvoje funkcije SumRow. Tvoja funkcija zbraja vrijednosti polja koje se nalaze unutar jednog reda, a moja broji koliko takvih polja ima u redu. Zbog cega posle deklaracije lokalne promjenjive "lZbir" dodjeljujes joj vrijednost 0 kada je ona po default-u 0? Da je u pitanju globalna promjenjiva pa ajde, imalo bi svrhe, ili ja mozda ne znam nesto sto bi trebao? [ Marko_L @ 17.09.2007. 18:59 ] @
Citat: Vjerovatno nisi dobro gledao razliku izmedju mog i tvog rjesenja odnosno tvoje funkcije SumRow. Tvoja funkcija zbraja vrijednosti polja koje se nalaze unutar jednog reda, a moja broji koliko takvih polja ima u redu. Au jes, u pravu si, nisam obratio pažnju uopšte. Izvinjavam se. Citat: Zbog cega posle deklaracije lokalne promjenjive "lZbir" dodjeljujes joj vrijednost 0 kada je ona po default-u 0? Da je u pitanju globalna promjenjiva pa ajde, imalo bi svrhe, ili ja mozda ne znam nesto sto bi trebao? Profesionalna deformacija :) Navikao sam da uvek dodeljujem početnu vrednost promenljive, čak i kada je ona nula (ili "" ako je u pitanju string). Naravno, nije greška izostaviti to. Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|