Sarakkeessa A on Asioita ja sarakkeessa B on niille Arvoja, alkaen riviltä 2.
Rivi 1 on otsikkorivi (Asiat, Arvot).
Haluan soluun C1 uniikkien Asioiden määrän.
Saan sen kaavalla =LASKE.A(AINUTKERTAISET.ARVOT(A2:Axxxx)), missä xxxx on riittävä.
Laitan sarakkeille A ja B suodatuksen päälle.
Miten saan tuon kaavan toimimaan, kun suodatan sarakkeesta B näkyviin tietyt arvot? Eli uniikkien Asioiden määrä suodatetuilla Arvoilla.
Yritin tyyliin =VÄLISUMMA(3;AINUTKERTAISET.ARVOT(A2:Axxxx)), mutta ilmoittaa kaavan virheelliseksi.
Ainutkertaisten arvojen laskenta suodatetuista riveistä
36
1181
Vastaukset
- AnonyymiTämä funktio ottaa huomioon myös pois suodatetutut 
 Function uniikit(rng As Range)
 nc = rng.Count
 ReDim asiat(nc)
 uniikit = 0
 For Each c In rng
 sama = False
 For i = 1 To uniikit
 If c = asiat(i) Then
 sama = True
 Exit For
 End If
 Next i
 If Not sama Then
 uniikit = uniikit + 1
 asiat(uniikit) = c
 End If
 Next c
 End Function- AnonyymiTuohan on loista ohjelma, pistänkin heti testiin. 
- Kiitos! 
 Näin vähän arvelinkin, että pitää itse koodata.
 Rivi uniikit = uniikit 1 pitänee olla uniikit = uniikit + 1
 Mutta ei toimi, palauttaa aina saman arvon eli suodattamattomien uniikkien määrän ikään kuin sarakkeessa Arvot ei olisi mitään suodatusta.
- JartsaPartsa kirjoitti:- Kiitos! 
 Näin vähän arvelinkin, että pitää itse koodata.
 Rivi uniikit = uniikit 1 pitänee olla uniikit = uniikit 1
 Mutta ei toimi, palauttaa aina saman arvon eli suodattamattomien uniikkien määrän ikään kuin sarakkeessa Arvot ei olisi mitään suodatusta.- kas, se plus-merkki jää pois, heh 
 eli pitää olla uniikit = uniikit "plus" 1
- AnonyymiJartsaPartsa kirjoitti:kas, se plus-merkki jää pois, heh 
 eli pitää olla uniikit = uniikit "plus" 1Harmillinen kiusa tuo plus-merkki joka ei viesteissä näy. 
- Anonyymi kirjoitti:- Harmillinen kiusa tuo plus-merkki joka ei viesteissä näy. - Jep. 
 Mutta mitenkähän tuon funktion saisi korjattua siten, että ei juokse läpi alkuperäistä rangea vaan ne, jotka ovat suodatetuilla riveillä...?
- JartsaPartsa kirjoitti:- Jep. 
 Mutta mitenkähän tuon funktion saisi korjattua siten, että ei juokse läpi alkuperäistä rangea vaan ne, jotka ovat suodatetuilla riveillä...?- Pistin messageboxin rivin nc = rng.Count jälkeen ja filtteröinnistä riippumatta nc saa aina arvoksi rivien kokonaismäärän... 
- AnonyymiJartsaPartsa kirjoitti:Pistin messageboxin rivin nc = rng.Count jälkeen ja filtteröinnistä riippumatta nc saa aina arvoksi rivien kokonaismäärän... Jokaista arvoa on verrattava jokaiseen muuhun arvoon. 
- AnonyymiAnonyymi kirjoitti:Jokaista arvoa on verrattava jokaiseen muuhun arvoon. Ei, vaan tässä tapauksessa jokaista suodatuksen jälkeen näkyvää arvoa on verrattava jokaiseen suodatuksen jälkeen näkyvään arvoon, jotta suodatuksen jälkeen näkyvistä arvoista saisi uniikkien määrän. Eli sarakkeessa Asiat näkyvistä arvoista uniikkien määrä, kun saraketta Arvot on suodatettu milloin milläkin arvoilla. 
- AnonyymiAnonyymi kirjoitti:Ei, vaan tässä tapauksessa jokaista suodatuksen jälkeen näkyvää arvoa on verrattava jokaiseen suodatuksen jälkeen näkyvään arvoon, jotta suodatuksen jälkeen näkyvistä arvoista saisi uniikkien määrän. Eli sarakkeessa Asiat näkyvistä arvoista uniikkien määrä, kun saraketta Arvot on suodatettu milloin milläkin arvoilla. Joo, juuri noin. 
- AnonyymiAnonyymi kirjoitti:Harmillinen kiusa tuo plus-merkki joka ei viesteissä näy. Muistakaa aina laittaa erikoismerkeistä vaikkapa ∔ siihen plussalle kuuluvaan kohtaan. Erikoismerkki löytyy valikosta joka avautuu näppäinkombolla Win ∔ piste. 
- AnonyymiJartsaPartsa kirjoitti:Jep. 
 Mutta mitenkähän tuon funktion saisi korjattua siten, että ei juokse läpi alkuperäistä rangea vaan ne, jotka ovat suodatetuilla riveillä...?Tämä funktio toimii entiseen tapaan ja laskee uniikit soluista. Jos annetaan toinen parametri ja se on False, vain näkyvät solut huomioidaan. 
 Suomi24 poistanee plus-merkin, joten rivillä uniikit = uniikit + 1 ennen 1 on plus
 Function uniikit(rng As Range, Optional f)
 nc = rng.Count
 ReDim asiat(nc)
 If IsMissing(f) Then f = True
 uniikit = 0
 For Each c In rng
 sama = False
 For i = 1 To uniikit
 If c = asiat(i) Then
 sama = True
 Exit For
 End If
 Next i
 If Not sama And (f Or Not (c.EntireRow.Hidden Or c.EntireColumn.Hidden)) Then
 uniikit = uniikit + 1
 asiat(uniikit) = c
 End If
 Next c
 End Function
- AnonyymiAnonyymi kirjoitti:Muistakaa aina laittaa erikoismerkeistä vaikkapa ∔ siihen plussalle kuuluvaan kohtaan. Erikoismerkki löytyy valikosta joka avautuu näppäinkombolla Win ∔ piste. Suomi24:n plussa-merkki suodattuu pois vain ruudulla näytettäessä. 
 Se tallentuu kyllä tietokantaan ja tulee esiin jos keskustelu luetaan kolmannen osapuolen ohjelmalla
 https://i.ibb.co/WywqDXv/suomi24-plussa.jpg
 kuten kuvasta näkyy.
- Anonyymi kirjoitti:- Tämä funktio toimii entiseen tapaan ja laskee uniikit soluista. Jos annetaan toinen parametri ja se on False, vain näkyvät solut huomioidaan. 
 Suomi24 poistanee plus-merkin, joten rivillä uniikit = uniikit 1 ennen 1 on plus
 Function uniikit(rng As Range, Optional f)
 nc = rng.Count
 ReDim asiat(nc)
 If IsMissing(f) Then f = True
 uniikit = 0
 For Each c In rng
 sama = False
 For i = 1 To uniikit
 If c = asiat(i) Then
 sama = True
 Exit For
 End If
 Next i
 If Not sama And (f Or Not (c.EntireRow.Hidden Or c.EntireColumn.Hidden)) Then
 uniikit = uniikit 1
 asiat(uniikit) = c
 End If
 Next c
 End Function- Turhaa luuppaamista. 
 Oletetaan , että dataa olisi vaikka 1000 riviä ja suodatuksen tuloksena tulisi 10 riviä, jolloin ylläoleva koodi tekee 990 turhaa ja ylimmääräistä luuppia, toisin kuin alleoleva koodi tekee vain tarvittavat10 luuppia...
 Sub LaskeUniikit()
 Dim Solu As Range
 Dim vika As Long
 vika = Range("A65536").End(xlUp).Row
 Dim uniikit As New Collection
 Application.Volatile
 On Error Resume Next
 For Each Solu In Range(Range("A2:A" & vika).SpecialCells(xlVisible).Address)
 uniikit.Add Solu, CStr(Solu)
 Next
 Range("C1") = uniikit.Count
 End Sub
 Keep EXCELing
 @Kunde
- AnonyymiAnonyymi kirjoitti:Tämä funktio toimii entiseen tapaan ja laskee uniikit soluista. Jos annetaan toinen parametri ja se on False, vain näkyvät solut huomioidaan. 
 Suomi24 poistanee plus-merkin, joten rivillä uniikit = uniikit 1 ennen 1 on plus
 Function uniikit(rng As Range, Optional f)
 nc = rng.Count
 ReDim asiat(nc)
 If IsMissing(f) Then f = True
 uniikit = 0
 For Each c In rng
 sama = False
 For i = 1 To uniikit
 If c = asiat(i) Then
 sama = True
 Exit For
 End If
 Next i
 If Not sama And (f Or Not (c.EntireRow.Hidden Or c.EntireColumn.Hidden)) Then
 uniikit = uniikit 1
 asiat(uniikit) = c
 End If
 Next c
 End FunctionKiitos todella paljon!!!!! 
 Tämä toimii.
 Uniikkien arvojen laskentaanhan voi käyttää valmiita LASKE.A ja AINUTKERTAISET.ARVOT -funktioita, mutta LASKE.A ei toimi VÄLISUMMA-funktion kanssa, jos LASKE.A:n parametrina on AINUTKERTAISET.ARVOT-funktio, vaikka ko. pari toimii sellaisenaan. Tämä on mielestäni virhe tai ainakin selvä puute excelissä!
 Mutta todella mahtavaa, että autoit!
 I owe you one!
- AnonyymiAnonyymi kirjoitti:Kiitos todella paljon!!!!! 
 Tämä toimii.
 Uniikkien arvojen laskentaanhan voi käyttää valmiita LASKE.A ja AINUTKERTAISET.ARVOT -funktioita, mutta LASKE.A ei toimi VÄLISUMMA-funktion kanssa, jos LASKE.A:n parametrina on AINUTKERTAISET.ARVOT-funktio, vaikka ko. pari toimii sellaisenaan. Tämä on mielestäni virhe tai ainakin selvä puute excelissä!
 Mutta todella mahtavaa, että autoit!
 I owe you one!Eihän tuo toimi, mitä ihmettä sinä mesot sen kanssa! 
- AnonyymiAnonyymi kirjoitti:Suomi24:n plussa-merkki suodattuu pois vain ruudulla näytettäessä. 
 Se tallentuu kyllä tietokantaan ja tulee esiin jos keskustelu luetaan kolmannen osapuolen ohjelmalla
 https://i.ibb.co/WywqDXv/suomi24-plussa.jpg
 kuten kuvasta näkyy.Mikä kolmannen osapuolen ohjelma? 
- Anonyymikunde kirjoitti:Turhaa luuppaamista. 
 Oletetaan , että dataa olisi vaikka 1000 riviä ja suodatuksen tuloksena tulisi 10 riviä, jolloin ylläoleva koodi tekee 990 turhaa ja ylimmääräistä luuppia, toisin kuin alleoleva koodi tekee vain tarvittavat10 luuppia...
 Sub LaskeUniikit()
 Dim Solu As Range
 Dim vika As Long
 vika = Range("A65536").End(xlUp).Row
 Dim uniikit As New Collection
 Application.Volatile
 On Error Resume Next
 For Each Solu In Range(Range("A2:A" & vika).SpecialCells(xlVisible).Address)
 uniikit.Add Solu, CStr(Solu)
 Next
 Range("C1") = uniikit.Count
 End Sub
 Keep EXCELing
 @KundeKiitos Kunde! 
 Tuntuu tämäkin toimivan, testaan massan kanssa (n. 700.000 riviä) huomenna, niin näen, kuinka kauan tuon toisen suoritus kestää.
 Se toinen ratkaisu on siinä mielessä yleiskäyttöisempi, että se on funktio eikä tee oletuksia, esim. että Asiat ovat juuri sarakkeessa A ja että rivejä on maksimissaan joku määrä ja että vastaus pitää olla juuri tietyssä solussa (ne olivat vain tuossa kysymyksen asettelussani noin).
 Tarve on soveltaa ratkaisua tuohon massaan siten, että suodatus tehdään milloin milläkin sarakkeilla (sarakkeita yhteensä n. 100 ja kerrallaan suodatetaan n. 10-20 sarakkeen arvoilla) ja uniikkien määrä lasketaan n. 10 sarakkeesta, jotka eivät ole noita suodatukseen käytettäviä.
 EXCELIing is fun!
- Anonyymikunde kirjoitti:Turhaa luuppaamista. 
 Oletetaan , että dataa olisi vaikka 1000 riviä ja suodatuksen tuloksena tulisi 10 riviä, jolloin ylläoleva koodi tekee 990 turhaa ja ylimmääräistä luuppia, toisin kuin alleoleva koodi tekee vain tarvittavat10 luuppia...
 Sub LaskeUniikit()
 Dim Solu As Range
 Dim vika As Long
 vika = Range("A65536").End(xlUp).Row
 Dim uniikit As New Collection
 Application.Volatile
 On Error Resume Next
 For Each Solu In Range(Range("A2:A" & vika).SpecialCells(xlVisible).Address)
 uniikit.Add Solu, CStr(Solu)
 Next
 Range("C1") = uniikit.Count
 End Sub
 Keep EXCELing
 @KundeFunction uniikit(rng As Range, Optional f) 
 Dim keruu As New Collection
 If IsMissing(f) Then f = True
 On Error Resume Next
 For Each c In rng
 If (f Or Not (c.EntireRow.Hidden Or c.EntireColumn.Hidden)) Then
 keruu.Add c, CStr(c)
 End If
 Next
 uniikit = keruu.Count
 End Function
- Anonyymi kirjoitti:- Kiitos Kunde! 
 Tuntuu tämäkin toimivan, testaan massan kanssa (n. 700.000 riviä) huomenna, niin näen, kuinka kauan tuon toisen suoritus kestää.
 Se toinen ratkaisu on siinä mielessä yleiskäyttöisempi, että se on funktio eikä tee oletuksia, esim. että Asiat ovat juuri sarakkeessa A ja että rivejä on maksimissaan joku määrä ja että vastaus pitää olla juuri tietyssä solussa (ne olivat vain tuossa kysymyksen asettelussani noin).
 Tarve on soveltaa ratkaisua tuohon massaan siten, että suodatus tehdään milloin milläkin sarakkeilla (sarakkeita yhteensä n. 100 ja kerrallaan suodatetaan n. 10-20 sarakkeen arvoilla) ja uniikkien määrä lasketaan n. 10 sarakkeesta, jotka eivät ole noita suodatukseen käytettäviä.
 EXCELIing is fun!- Specialcellsillä on joku solumäärärajoitus, mutta en nyt muista kuinka iso se on. Kerran se on tullut vastaan ohjelmassani. 
 Tee tuosta funktio-kaikkitarvittavat pelimerkithän siinä on.
- AnonyymiAnonyymi kirjoitti:Function uniikit(rng As Range, Optional f) 
 Dim keruu As New Collection
 If IsMissing(f) Then f = True
 On Error Resume Next
 For Each c In rng
 If (f Or Not (c.EntireRow.Hidden Or c.EntireColumn.Hidden)) Then
 keruu.Add c, CStr(c)
 End If
 Next
 uniikit = keruu.Count
 End FunctionVirheenkäsittely määritellään näin: 
 On Error Resume Next
 . . .
 . . .
 Resume Next
 EI NOIN KUN OLET SEN TEHNYT
- AnonyymiAnonyymi kirjoitti:Mikä kolmannen osapuolen ohjelma? Mikäli sinulla on PHP-tulkki laitteessasi, niin voit ladata ja ajaa selaimessa "kolmannen osapuolen" viestilukijan osoitteesta 
 https://pastebin.com/06u4LMzc
 Ohjelmaan kopioidaan halutun ketjun url-osoite ja viestit näkyy siellä ilman mainoksia. Ja myös ne plus-merkit kuten edellä jo mainittiin. Sitä kautta on myös helppo tallentaa koko keskusteluketju jos sellaiseen on tarvetta.
- AnonyymiAnonyymi kirjoitti:Virheenkäsittely määritellään näin: 
 On Error Resume Next
 . . .
 . . .
 Resume Next
 EI NOIN KUN OLET SEN TEHNYTIhan oikein se on. Tässä ei ole varsinaista virheen käsittelyä, joten ehdottamasi lisärivi on turha. On Error Resume Next jättää vain virheen huomiotta, ei anna virheilmoitusta, vaan jatkaa seuraavalle riville. Kunden ratkaisussa Collection kasvaa, kun sinne lisätään uusi asia. Jos yritetään lisätä jotain, mitä siellä jo on, tulisi normaalisti virhe, mutta nyt sen yli vain hypätään. Uniikkien tapausten määrä nähdään Collection'in koosta. 
 Jos virhe vaatii toimenpiteitä, se pitää käsitellä erikseen On Error Goto virhe. Täältä palattaisiin virheen aiheuttanutta seuraavalle rivile käskyllä Resume Next
- Anonyymikunde kirjoitti:Turhaa luuppaamista. 
 Oletetaan , että dataa olisi vaikka 1000 riviä ja suodatuksen tuloksena tulisi 10 riviä, jolloin ylläoleva koodi tekee 990 turhaa ja ylimmääräistä luuppia, toisin kuin alleoleva koodi tekee vain tarvittavat10 luuppia...
 Sub LaskeUniikit()
 Dim Solu As Range
 Dim vika As Long
 vika = Range("A65536").End(xlUp).Row
 Dim uniikit As New Collection
 Application.Volatile
 On Error Resume Next
 For Each Solu In Range(Range("A2:A" & vika).SpecialCells(xlVisible).Address)
 uniikit.Add Solu, CStr(Solu)
 Next
 Range("C1") = uniikit.Count
 End Sub
 Keep EXCELing
 @KundeToimimaton räpellys, ilkeätkin esitellä sitä toimivana. 
- AnonyymiAnonyymi kirjoitti:Mikäli sinulla on PHP-tulkki laitteessasi, niin voit ladata ja ajaa selaimessa "kolmannen osapuolen" viestilukijan osoitteesta 
 https://pastebin.com/06u4LMzc
 Ohjelmaan kopioidaan halutun ketjun url-osoite ja viestit näkyy siellä ilman mainoksia. Ja myös ne plus-merkit kuten edellä jo mainittiin. Sitä kautta on myös helppo tallentaa koko keskusteluketju jos sellaiseen on tarvetta.Esimerkki tämän ketjun 
 https://www.docdroid.net/tt0mjAf/keskustelu-17792375-pdf
 tallennetusta PDF -tiedostosta.
- AnonyymiAnonyymi kirjoitti:Harmillinen kiusa tuo plus-merkki joka ei viesteissä näy. Käyttäkää tätä leveää plussaa: ++++++++ 
 Ottaa siitä talteen.
 Se ei tosin toimi kaavoissa plussana, eli pitää vaihtaa normaaliin plussaan jos kopioi viestistä koodia suoraan exceliin.
- Anonyymi kirjoitti:- Eihän tuo toimi, mitä ihmettä sinä mesot sen kanssa! - Kyllä se minulla toimii; ainakin muutaman kymmenen rivin testiaineistolla. 
- Anonyymi kirjoitti:- Toimimaton räpellys, ilkeätkin esitellä sitä toimivana. - Tämä makrokin toimii testiaineistollani ihan ok! 
- Anonyymi kirjoitti:- Function uniikit(rng As Range, Optional f) 
 Dim keruu As New Collection
 If IsMissing(f) Then f = True
 On Error Resume Next
 For Each c In rng
 If (f Or Not (c.EntireRow.Hidden Or c.EntireColumn.Hidden)) Then
 keruu.Add c, CStr(c)
 End If
 Next
 uniikit = keruu.Count
 End Function- Toimii tämäkin! 
- AnonyymiAnonyymi kirjoitti:Ihan oikein se on. Tässä ei ole varsinaista virheen käsittelyä, joten ehdottamasi lisärivi on turha. On Error Resume Next jättää vain virheen huomiotta, ei anna virheilmoitusta, vaan jatkaa seuraavalle riville. Kunden ratkaisussa Collection kasvaa, kun sinne lisätään uusi asia. Jos yritetään lisätä jotain, mitä siellä jo on, tulisi normaalisti virhe, mutta nyt sen yli vain hypätään. Uniikkien tapausten määrä nähdään Collection'in koosta. 
 Jos virhe vaatii toimenpiteitä, se pitää käsitellä erikseen On Error Goto virhe. Täältä palattaisiin virheen aiheuttanutta seuraavalle rivile käskyllä Resume NextHaista paska, minä en ole ehdottanut mitään lisä rivejä, eikä tuota virheenkäsittelyä ohjelmaan sijoiteta siksi että se jättää virheen muomioimatta, vaan juuri päin vastoin. 
 Voi vittu miten typeriä aivopieruja.
 VIRHEEN KÄSITTELYSSÄ tavoitellaan nimen omaan hallittua virheen käsittelyä ja virheen aikaansaaman haitan minimoimista.
 Kato nyt miten sinä tuon komennon tuonne sekaan sijoitit, päin persettä.
 On Error Resume Next
 ......
 next
 KUN SE OIKEIN TEHTYNÄ MENEE NÄIN
 On Error Resume Next
 . . .
 Resume Next
 Vittu että pitää olla älykääpiö kun ei tuollaistakaan ymmärrä. Samoja vitun virheitä joka ohjelmassa.
- AnonyymiAnonyymi kirjoitti:Ihan oikein se on. Tässä ei ole varsinaista virheen käsittelyä, joten ehdottamasi lisärivi on turha. On Error Resume Next jättää vain virheen huomiotta, ei anna virheilmoitusta, vaan jatkaa seuraavalle riville. Kunden ratkaisussa Collection kasvaa, kun sinne lisätään uusi asia. Jos yritetään lisätä jotain, mitä siellä jo on, tulisi normaalisti virhe, mutta nyt sen yli vain hypätään. Uniikkien tapausten määrä nähdään Collection'in koosta. 
 Jos virhe vaatii toimenpiteitä, se pitää käsitellä erikseen On Error Goto virhe. Täältä palattaisiin virheen aiheuttanutta seuraavalle rivile käskyllä Resume NextJa samalla tässä on syytä oikaista nuo harhakäsitykset virheen käsittelyssä, koska näyttää ettei ole läksyjä luettu ollenkaan. Älkää kirjoitelko mitään "Minusta Tuntuu Siltä Että" vaan kun on ohjelmoinnista kysymys kaikki testataan toimivaksi. Ei ole mitään järkeä sijoittaa virheellistä virheen käsittelyä ohjelmaan, jättää sen pois sitten kokonaan, ellei osaa. 
 MAHDOLLISET OHJAUKSET VIRHETILANTEEN HALLINTAAN
 1.) On Error GoTo LINE
 2.) On Error Resume Next
 3.) On Error GoTo 0
 1.) On Error GoTo LINE
 Sub eka
 On Error GoTo line
 Exit Sub
 LINE:
 ....
 End Sub
 LINE on joko, numeroitu rivi tai nimetty rivi, ja tuolla aloitetaan se hallittu haittojen minimoiminen. Huomaa että rivin numero tai nimi päättyy kaksoispisteeseen (:).
 2.) On Error Resume Next
 Tämä varmaankin selvisi jo edellisestä viestistäni.
 3.) On Error GoTo 0
 Poistaa käytöstä kaikki virheenkäsittelijät nykyisessä rutiinissa.
- AnonyymiAnonyymi kirjoitti:Haista paska, minä en ole ehdottanut mitään lisä rivejä, eikä tuota virheenkäsittelyä ohjelmaan sijoiteta siksi että se jättää virheen muomioimatta, vaan juuri päin vastoin. 
 Voi vittu miten typeriä aivopieruja.
 VIRHEEN KÄSITTELYSSÄ tavoitellaan nimen omaan hallittua virheen käsittelyä ja virheen aikaansaaman haitan minimoimista.
 Kato nyt miten sinä tuon komennon tuonne sekaan sijoitit, päin persettä.
 On Error Resume Next
 ......
 next
 KUN SE OIKEIN TEHTYNÄ MENEE NÄIN
 On Error Resume Next
 . . .
 Resume Next
 Vittu että pitää olla älykääpiö kun ei tuollaistakaan ymmärrä. Samoja vitun virheitä joka ohjelmassa.Toivotaan, että huomenna olisi parempi päivä. 
 
- Anonyymionko hyvä tietokone tämä lenovo-kiinalaisten tekem'ä==) 
- Kiitos kaikille avustanne! 
 Palaan huomenna, kun laitan ratkaisunne tosi toimiin.
 Ja älkää nyt hyvät ystävät tukkanuottasille ruvetko! :-)- AnonyymiParempi kun et palaa. 
 
- Tämä: 
 Function uniikit(rng As Range, Optional f)
 Dim keruu As New Collection
 If IsMissing(f) Then f = True
 On Error Resume Next
 For Each c In rng
 If (f Or Not (c.EntireRow.Hidden Or c.EntireColumn.Hidden)) Then
 keruu.Add c, CStr(c)
 End If
 Next
 uniikit = keruu.Count
 End Function
 Pelittää massan kanssa riittävän hyvin.
 Kun n. 700.000 rivin suodatuksen tulos sisältää noin 50.000 riviä, laskee tuo uniikit n. 10 sekunnissa.
 Suuret kiitokset tekijälle!
 Ja mukavaa viikkoa kaikille, myös äksypöksyille!
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- Sanna Marin teki sen, mihin muut eivät pystyneet - sote kerralla maaliinYli 15 vuotta Suomessa vatvottu sote-uudistus meni lopulta läpi Sanna Marinin hallituksen aikana. Edeltävät hallitukset738114
- Marinin hallitus hyväksyi soten (105-77) vuonna 2021vastaan äänesti Kok, persut, KD, Liike Nyt. Nyt on sitten käynyt niin kuin on käynyt. Pääkirjoitus: Sanna Marin jätti905737
- Enää viisi yötä Sannan kirjaanIhan täpinöissään tässä odotellaan. Vaikea pysytellä aloillaan, kun koko ajan tekisi mieli jo kirjakauppaan rynnätä, mut443882
- Pikkupersu osoitti olevansa hieman yksinkertainen"Heikosti älykkyystesteissä pärjänneistä lapsista tulee muita todennäköisemmin ennakkoluuloisia ja konservatiivisia", uu923652
- Sanna-kulttilaiset hehkuttaa edelleen Marinia, vaikka esim. Sote oli susi jo syntyessäänmutta kulttilaiset eivät ole järjen jättiläisiä, ja sanoihin Lasse Lehtinenkin, että Suomessa on pohjoismaiden tyhmimmät443645
- Kannattaako suomalaisen duunarin enää äänestää vasemmistopuolueitasillä eivät ne tunnu kovasti ajavan suomi-duunarin etuja. Jos katsotaan Vasemmistoliittoa, niin sehän on ihan feministi603594
- Jos on heikkolahjainen ja laiska koulupudokas, niin silloin äänestää vasemmistopuolueitanäin tämä on käytännössä aina mennyt. Jos ei älyä ole paljon suotu, niin ei silloin inssiksi opiskella, vaan päädytään263236
- Lehtinen: "Oli demareidenkin onni, että valkoiset voittivat sodan 1918"Lasse Lehtisen mukaan vasemmalla on radiohiljaisuus hänen uutuuskirjastaan, "Läheltä piti. Kansakunnan hurjat hetket" L1133060
- IL - 100 000 potentiaalista sotilasta pakeni Ukrainasta!"Ukrainasta nuorten miesten joukkopako Liki 100 000 asevelvollisuusikäistä miestä on poistunut Ukrainasta parin viime k572859
- SDP:n valtuutettu valehtelee koulutuksensaSDP:n helsinkiläinen kaupunginvaltuutettu Mahad Ahmed käyttää maisterin titteliä suoritettuaan 60 opintopisteen epäviral972833