[ konislav @ 16.09.2009. 00:19 ] @
Koja bi kombinacija funkcija mogla da prebrojava celije, ali samo pod uslovom da se oni ponavljaju u nizu od dvai vise ponaljanja.
Pr.
A A A B C C B C B

kako da u ovom nizu da broj uzastopnog ponavljanja za A, za B i za C. Trebalo bi da se dobije vrednost A=3, B=0, C=2.
Probao sam funkcijom COUNIF, ali ne ide.
[ Jpeca @ 16.09.2009. 07:49 ] @
Ukoliko ti ne smeta korišćenje medjurezultata moguće je sledeće
U redu ispod prve ćelije u nizu (D10 u tvom primeru) upiši formulu:
Code:
=IF(D9=C9;C10+1;1)

pa kopiraj ovu formulu u ceo opseg D10:L10. Ova formula broji elemente u neprekinutom nizu.
Sad pomoću matrične (array) formule odredi maximum za zadatu vrednost. (tzv maxif). Npr za A
Code:
=MAX((D9:L9="A")*(D10:L10))

Doduće za B rezultat će biti 1 (broj ponavljanja) što je meni logičnije ali ako baš treba 0 može se rešiti sa dodatnim IF.
[ 3okc @ 16.09.2009. 11:00 ] @
Zanimljivo. Uz malo drugačiju logiku može se izbeći međurezultat.
Dodatno, ako još možemo i da uposlimo SUMPRODUCT(), poštedećemo se i matričnog unosa. :)

Kao prvo, treba izbeći logičko grananje kad god je moguće jer to usložnjava logiku. Ovde npr nije potrebno da za svaku pojavu ispisujemo koja je po redu (pa da posle računamo MAX), dovoljno je ispitati da li je levo do nje isti unos.

Code:
=SUMPRODUCT((D9:L9=F16)*(D9:L9=C9:K9))+1


[att_img]

Za postavljeni model, dobijamo iste rezultate; ali, treba primetiti da drugačija logika dovodi i do drugačijih rezultata kada se model usložnjava.

Npr, f-jom MAX() vraćamo uvek samo najveću oblast sa ponavljanjem. Upotrebom SUMPRODUCT() već brojimo sve slučajeve gde dolazi do ponavljanja ali taj broj će uvek biti manji za 1 (otuda korekcija u formuli). Međutim, problem nastaje ako imamo više oblasti, jer bismo umesto 1 morali da korigujemo sa 'brojem oblasti' a to je već malo teže izračunati. :)
[ 3okc @ 16.09.2009. 11:30 ] @
Ok, odmah ću i da se korigujem, nije baš toliko teško izračunati broj oblasti. :)

Ako smo sa
Code:
=SUMPRODUCT((D9:L9=F16)*(D9:L9=C9:K9))

računali broj ćelija "koje imaju istu vrednost kao ćelija levo", onda sa
Code:
=SUMPRODUCT((D9:L9=F16)*(D9:L9<>C9:K9))

računamo broj ovakvih oblasti. ;)

Sad, potrebno je još samo ove veličine dovesti u saglasje sa potrebama.. Konačna formula će zavisiti od toga da li se i usamljene vrednosti računaju u zbiru ili ne.

Dobro, logično je da se "usamljene vrednosti" ne računaju, inače bismo u zbiru imali ukupan broj ćelija (koje inače dobijamo sa COUNTIF). Ali, to nas već dovodi do rešenja.. :)

Znači, dovoljno bi bilo izračunati broj usamljenih ćelija i ovaj broj oduzeti od ukupnog.
Možda nešto ovako
Code:
=SUMPRODUCT((D9:L9=F16)*(D9:L9<>C9:K9)*(D9:L9<>E9:M9))

(broj usamljenih ćelija)


[Ovu poruku je menjao 3okc dana 16.09.2009. u 12:46 GMT+1]
[ konislav @ 16.09.2009. 13:53 ] @
Primenio sam sve gor navedene funkcije, ali nesto ne radi kako trebe. Evo sta se desava ako se primene ove funkcije, ali se na primer promene vrednsti. Jednostavn dolazi do greske, ili ja negde gresim??
[ 3okc @ 16.09.2009. 22:18 ] @
Da, primenio si poslednju f-ju a nisi pročitao "uputstvo za upotrebu". Ništa nisi pogrešio ali to je f-ja koja računa broj "usamljenih vrednosti", dakle, one koje nisu uzastopno ponovljene. Rekao sam da ovaj broj treba oduzeti od ukupnog broja pojava te vrednosti (koji računamo sa COUNTIF()) i imamo broj ponovljenih.
[ konislav @ 17.09.2009. 04:44 ] @
PRIZNAJEM, nisam lepo procitao uputsvo koje je bilo napisano i izvinjavam se zbog toga. Ali opet imamo mali problem, pretpostavljam da je moguce da je sad nesporazum kod postavljanja pitanja ili kod pogresnog razumevanja pitanja. Vazno je da smo jako blizu resenju.
Na primeru koji saljem vidi se o cemu pricam. Moguce je da dolazi do pogresnog tumacenja uzastopnih ponavljanja ili niz.
[ 3okc @ 17.09.2009. 08:10 ] @
Što se "neporazuma" tiče, budi ljubazan, pročitaj još jednom inicijalni post (koji si, valjda, sam pisao). Ne samo da se jasno traži prebrojavanje ćelija (a ne oblasti) nego si to ilustrovao i primerom, pa tako imaš da je A=3 -- iako su svi grupisani u jednoj oblasti.

Kako onda treba da glasi tema?! Prebrojavanje (ponovljenih) ćelija? Prebrojavanje oblasti (sa ponovljenim stringom)? Ili i jedno i drugo?!?

Ok, recimo da si u međuvremenu došao na ideju da ti treba (i) ovo drugo. U svom drugom postu, gde se ispravljam, naveo sam ti f-ju koja računa broj oblasti. Pa tako imamo da se za uk. broj oblasti proverava jednakost samo sa "jedne strane", za razliku od uk. broja "usamljenih" ili pojedinačnih ćelija, kada proveravamo sa obe strane.

Ako ti treba broj oblasti u kojima se ponavljaju stringovi, prosto, napiši razliku ova dva broja.
[ konislav @ 17.09.2009. 18:44 ] @
u svakom slucaju hvala na vasim odgovorima.Moguce je da je moje pitanje pogresno postavjeno, moguce je da niste dobro razumeli sta mi treba, ali u svakom slucaju hvala na svim vasim odgovorima.

Da bi probali da se bolje razumemo, dacu pojasnjenje jos jednim pojasnjenjem.

Uzmimo jedan fudbalskih tim. Koji ima sledecu statistiku:
nereseno, pobeda, poraz, pobeda, pobeda, nereseno pobeda,pobeda, poraz, poraz, poraz, poraz

ovaj tim u poslednjih 12 utakmica ima niz od cetiri poraza i dva niza od po dve pobede.

To bi trebalo da bude cilj izracunavanja.

U svakom slucaju hvala jos jednom .
[ Jpeca @ 18.09.2009. 06:24 ] @
Meni se i dalje čini da je rezultat korišćenjem medjurezultata ispravan? Evo za tvoj poslednji primer dobijem
Nerešeno -1
Pobeda - 2
Poraz - 4
Šta ti očekuješ kao rešenje? Ukoliko nije tako postavi pet-šest primera sa očekivanim rezultatima, pa ćemo valjda ukapirati.

Ako ti ne odgovara korišćenje medjurezultata pretpostavljam da je moguće sastaviti neku složenu formulu kako je 3okc predložio, a ja lično bi napravio korisničku funkciju koja će to da računa, jer mi je to manje vremena oduzima. Funkcija bi trebalo da bude prilično jednostavna.
[ konislav @ 23.09.2009. 00:03 ] @
Uzmimo jedan fudbalskih tim. Koji ima sledecu statistiku:
nereseno, pobeda, poraz, pobeda, pobeda, nereseno pobeda,pobeda, poraz, poraz, poraz, poraz


Po meni bi trebalo da dobijem sledeci rezultat

Nereseno 0
Pobeda 2
Poraz 4

Kod neresenog nemozemo da dobijemo vrednost 1, zato sto nema uzastopnog ponavljanja, nereseno se pojavljuje dva puta, ali su odvojeni slucaji, nisu jedno za drugim.

OSTALI PRIMERI:

poraz, pobeda, nereseno, nereseno, nereseno, pobeda, poraz, nereseno, pobeda, poraz, poraz, nereseno

Pobeda 0
Nereseno 3
Poraz 2

poraz, poraz, pobeda, pobeda, poraz, poraz, pobeda, nereseno, poraz, pobeda, nereseno

Pobeda 2
Nereseno 0
Poraz 2
[ Jpeca @ 23.09.2009. 06:26 ] @
U redu. Meni se činilo logičnije da se rezultat interpretira na sledeći način:
1 - Nema uzastopnih ponavljanja (npr. po jedan nerešen rezultat u nizu)
0 - Nema određenog stringa u posmatratnom opsegu (npr. fudbalski tim nije igrao nerešeno)

U svakom slučaju, lako je ispraviti matričnu formulu da daje rezultat prema tvojim zahtevima. Može se dodati IF koji će rezultat MAX funkcije 1 pretvoriti u 0 ili možda još bolje u matričnu formulu dodati uslov da se Max uzima samo od medjurezultata koji su veći od 1
Code:
=MAX(($D$9:$O$9=G16)*($D$10:$O$10>1)*($D$10:$O$10))
[ konislav @ 23.09.2009. 14:37 ] @
To je to sto meni treba, a nikako da se razumemo. HVALA ti sto si mi resio problem. Ja se nebih setio da koristim MAX, a pretpostavljao sam da je resenje jednostavno, samo ajde pa se seti.
[ 3okc @ 24.09.2009. 00:09 ] @
Za računanje najvećeg niza stvarno ne vidim kako bi se moglo bez medjurezultata.. Ne znam ni da li je uopšte moguće, bez obzira koliko bi to komplikovano bilo. :) Volim da pomeram granice a ovo mi se upravo čini kao neka "viša matematika".

Svejedno, evo u jednoj tabeli i ostalih prebrojavanja: sve na jednom mestu.
[ 3okc @ 20.11.2013. 19:18 ] @
Naiđoh na rešenje Roberta Mense bez korišćenja pomoćnih ćelija i, ne znam kako, ali sam se setio da smo i ovde nekad nešto 'slično' rešavali.

Za opseg $D$9:$O$9 recimo da se zove rng
i recimo da u G16 imamo "Pobeda"
Code:
=MAX(FREQUENCY(IF(rng=G16;COLUMN(rng));IF(rng<>G16;COLUMN(rng))))


Ili, kao test, prema nizu u prvoj poruci:
Code:
=MAX(FREQUENCY(IF({"A";"A";"A";"B";"C";"C";"B";"C";"B"}="A";ROW($1:$9));
IF({"A";"A";"A";"B";"C";"C";"B";"C";"B"}<>"A";ROW($1:$9))))


[Edit: U prvom primeru se radni opseg pruža horizontalno pa ide COLUMN(rng)]

[Ovu poruku je menjao 3okc dana 20.11.2013. u 20:41 GMT+1]