Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA Suodatin -ongelma

VBNewbie [16.07.2012 15:59:22]

#

Hei!

Olen kirjoittamassa koodinpätkää, joka suodattaisi dataa valittujen kriteerien perusteella. Käyttäjän ei siis tarvitsisi tehdä itse taulukkoa ja valita monien kymmenien sarakkeiden keskeltä haluttuja arvoja, vaan kriteerit voisi valita helposti erilliseltä välilehdeltä ja käynnistää makro napista.

Tällä hetkellä käyttäjä voi valita kolmesta eri sarakkeesta suodatettavia kriteerejä seuraavasti:

Sarake1 Sarake2 Sarake3
Kriteeri1 Kriteeri1 Kriteeri1 on yhtäsuuri tai pienempi kuin
Kriteeri2 Kriteeri2
Kriteeri3 Kriteeri3
Kriteeri4 Kriteeri4
Kriteeri5
Kriteeri6

Arvot sarakkeissa 1 sekä 2 ovat tekstiä ja sarakkeessa 3 numeroita.

-----------------------------------------------
Ratkaisuyritys 1 (silmukka):

Olen tehnyt yksinkertaisen silmukkarakenteen, joka piilottaa kaikki kriteereihin sopimattomat arvot, mutta se on ymmärrettävästi armottoman hidas suoritettaessa noin 8000 rivin datalle.

Ratkaisuyritys 2 (autofilter):

VBA:n autofilterissä voi asettaa vaan kaksi kriteeriä per sarake, joka on tässä tapauksessa liian vähän.

Ratkaisuyritys 3 (advanced filter):

VBA:n advanced filter on mielestäni liian kömpelö edellämainitun kriteeristön rakentamiseksi.
----------------------------------------------------

Olisiko teillä hyviä ehdotuksia nopeaan suodatukseen, vai pitääkö käyttäjän kuitenkin tyytyä vain taulukon luomiseen ja kriteerien valitsemiseen taulukon sarakkeista manuaalisesti?

Yst. VBNewbie

VBNewbie [17.07.2012 12:49:25]

#

Onnistuin ratkaisemaan ongelman käyttämällä autofilteriä apusarakkeen avulla seuraavasti:

Sarake N | Sarake N + 1

Datarivi | Totuusarvo
Datarivi | Totuusarvo
Datarivi | Totuusarvo
Datarivi | Totuusarvo

Elikkä autofilterin avulla dataa suodatetaan sarakkeessa N + 1 olevan totuusarvon mukaan. Totuusarvo, eli osuuko datarivin arvot kriteereihin (TOSI/EPÄTOSI tai 1/0 jne.) taas haetaan kaavojen avulla käyttäjän tekemien valintojen perusteella.

Tällä tavalla kikkailemalla autofilterin kahden kriteerin rajoite voidaan helposti kiertää.

T. VBNewbie

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta