Ainutkertaisten arvojen laskenta suodatetuista riveistä

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.
361351
Äänestä

Muut lukivat myös

Vastaukset 36

Vanhimmat

Tä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

Äänestä
  • Tuohan on loista ohjelma, pistänkin heti testiin.

    Äänestä

  • 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.

    Äänestä

  • 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

    Äänestä

  • JartsaPartsa kirjoitti:

    kas, se plus-merkki jää pois, heh
    eli pitää olla uniikit = uniikit "plus" 1

    Harmillinen kiusa tuo plus-merkki joka ei viesteissä näy.

    Äänestä

  • Anonyymi00003 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ä...?

    Äänestä

  • 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...

    Äänestä

  • JartsaPartsa 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.

    Äänestä

  • Anonyymi00005 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.

    Äänestä

  • Anonyymi00006 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.

    Äänestä

  • Anonyymi00003 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.

    Äänestä

  • 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ä...?

    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

    Äänestä

  • Anonyymi00008 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.

    Äänestä

  • Anonyymi00009 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

    Äänestä

  • Anonyymi00009 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

    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!

    Äänestä

  • Anonyymi00011 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!

    Äänestä

  • Anonyymi00010 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?

    Äänestä

  • kunde 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
    @Kunde

    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!

    Äänestä

  • kunde 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
    @Kunde

    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

    Äänestä

  • Anonyymi00014 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.

    Äänestä

  • Anonyymi00015 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

    Virheenkäsittely määritellään näin:

    On Error Resume Next
    . . .
    . . .
    Resume Next

    EI NOIN KUN OLET SEN TEHNYT

    Äänestä

  • Anonyymi00013 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.

    Äänestä

  • Anonyymi00016 kirjoitti:

    Virheenkäsittely määritellään näin:

    On Error Resume Next
    . . .
    . . .
    Resume Next

    EI NOIN KUN OLET SEN TEHNYT

    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 Next

    Äänestä

  • kunde 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
    @Kunde

    Toimimaton räpellys, ilkeätkin esitellä sitä toimivana.

    Äänestä

  • Anonyymi00017 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.

    Äänestä

  • Anonyymi00003 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.

    Äänestä

  • Anonyymi00012 kirjoitti:

    Eihän tuo toimi, mitä ihmettä sinä mesot sen kanssa!

    Kyllä se minulla toimii; ainakin muutaman kymmenen rivin testiaineistolla.

    Äänestä

  • Anonyymi00019 kirjoitti:

    Toimimaton räpellys, ilkeätkin esitellä sitä toimivana.

    Tämä makrokin toimii testiaineistollani ihan ok!

    Äänestä

  • Anonyymi00015 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!

    Äänestä

  • Anonyymi00018 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 Next

    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.

    Äänestä

  • Anonyymi00018 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 Next

    Ja 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.

    Äänestä

  • Anonyymi00022 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ä.

    Äänestä

onko hyvä tietokone tämä lenovo-kiinalaisten tekem'ä==)

Äänestä

Kiitos kaikille avustanne!
Palaan huomenna, kun laitan ratkaisunne tosi toimiin.

Ja älkää nyt hyvät ystävät tukkanuottasille ruvetko! :-)

Äänestä
  • Parempi kun et palaa.

    Äänestä

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!

Äänestä

Kommentoi aloitusta


Anonyymi-ap kirjoitti:

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.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu