< návrat zpět

MS Excel


Téma: Unikátní hodnoty - více podmínek (VBA či vzorec) rss

Zaslal/a 27.8.2013 22:48

Ahoj ve spolek.
Měl bych tu jeden dotaz, nad kterým laboruji už druhý den a stále se mi nedaří to nějak slušně vyřešit. Potřeboval bych zjistit počet unikátních položek v prvním sloupci splňujících podmínky v jiných sloupcích (viz přiložený soubor). Raději bych využil VBA (pokud bude vzorec, nevadí).

Předem díky
Roman


http://rombil.sweb.cz/EXCEL/uloha.xlsx

Příloha: zip14887_uloha.xlsm.zip (34kB, staženo 43x)
Zaslat odpověď >

Strana:  1 2   další »
#014888
M+
Ahoj,

kontingenční tabulka nebo countifs by měly vyřešit, to co potřebuješ. Jestli jsem tedy správně pochopil zadání.
Příloha: zip14888_uloha.zip (12kB, staženo 41x)
citovat
#014889
M+
A nebo pomocný sloupec pomocí concatenate a pak zas kontingenční tabulka.
Příloha: zip14889_uloha-2.zip (11kB, staženo 36x)
citovat
#014890
avatar

M+ napsal/a:

Ahoj,

kontingenční tabulka nebo countifs by měly vyřešit, to co potřebuješ. Jestli jsem tedy správně pochopil zadání.Příloha: 14888_uloha.zip


Díky za tip, ale potřebuji dále s daty pracovat, takže kontingenčka mi nevyřeší to, co potřebuji. Musel bych jí dát někde na skrytý list atd. Především mne zajímá číslo (resp. ten počet) se kterým dále v různých částech sešitu a ve VB počítám.
Ten výpis s pomocí countifs taky není to pravé ořechové... Těch jmén a vůbec těch hodnot bude hodně přes 500, takže by to bylo nepřehledné a za další, já ty jména (názvy výrobků) dopředu neznám... potřebuji teprve zjistit, o která se jedná a především kolik jedinečných jmén, splňujících kritéria, vůbec je.citovat
icon #014891
avatar
Rozšíreným filtrom:

aby sa Ti neplietol výsledok so vzorom, urob nasledujúce:
napr. na list 3 napíš niekam kritériá, t.j. typ a status a pod ne hodnoty, ktoré chceš filtrovať.
vyzeralo by to takto:
b1: typ
c1: status
b2: 1
c2: ok

do bunky b4 na tom istom liste napíš: Jméno

Teraz to dôležité: zostaň na tomto liste (musí byť aktívny)
Zapni rozšírený filter, zvoľ skopírovať do iného umiestnenia (copy to another location)
Ako list range zvoľ ten svoj pôvodný zoznam: Sheet1!$A$2:$C$14
ako kritériá kritériá vrátane záhlavia, t.j.: Sheet3!$B$1:$C$2
Za kam (copy to) uveď Sheet3!$B$4
Zatrhni voľbu iba jedinečné záznamy, daj o.k.

ten výsledok si môžeš dať na samostatný list, v tom prípade na tomto liste musíš do nejakej bunky napísať Jméno (názov poľa, ktorý chceš filtrovať), kritériá môžeš mať i na nejakom inom liste. Jediná podmienka, aby to fungovalo, je, že musíš pred zapnutím filtra stáť na liste, na ktorom cheš mať výstup.

edit: pokiaľ by sa Ti nechcel spustiť ten rozšírený filter, tak než ho spustíš, postav sa do nejakej prázdnej bunky, ktorá nehraničí so žiadnou neprázdnou bunkou, na liste, v ktorom chceš mať výstup (na liste, kde máš v samostatnej bunke napísané Jméno)citovat
#014892
avatar
Ahoj ALe

O této možnosti vím, avšak pro tento účel je dosti nepraktická. Soubor bude obsluhovat hodně kolegů v práci a bude to o tom, že okopírují databázi jmén, typů a statusů na první list a stisknou tlačítko které spustí makro, tím to pro ně končí. Makro už nastaví ty "typy" dle dalších kritérií atd.
Mezičlánek tohoto makra (nebo vložení vzorce v makru EVALUATE) by měl být (mimo jiné) počet jedinečných jmén, které splní podmínky "1" a "OK" abych dále mohl vypočítat např. průměr:
(celkový počet jmén které splnily podmínky / unikátní počet jmén které splnily podmínky = průměrna hodnota na osobu) atd.
S tímto číslem potom dále dělím a pokračuji ve výpočtech. Tzn. že tohle není výsledek ale jen pomocné číslo pro další výpočty. V tomto případě by musel uživatel zasáhnout a to je pravě nežádoucí. Představoval bych si nějakou formu =COUNTIFS či kódu Application.WorksheetFunction.Countifs(.... .citovat
icon #014893
avatar
Vytvorenie rozšíreného filtra si môžeš nahrať do makra.

Inou možnosťou je v kóde pracovať s Collection alebo Dictionary.

Dá sa použiť i SQL príkaz Distinct.

Možností je mnoho, stačí trochu pogooglovať.citovat
icon #014898
Poki
Ano, moznosti je opravdu spousta.
Mozna nejjednodussi pro vase ucely je pouziti COUNTIFS ve VBA, v tomto priklad jde o pocet, ktery obsahuje ve sloupci A hodnotu 'a' a ve sloupci B hodnotu '1':

Pocet = Application.WorksheetFunction.CountIfs(Range("A1:A10"), "=a", Range("B1:B10"), "=1") coz je klasicka counifs funkce.
Lze ji zapsat i kratsim zpusobem pomoci funkce EVALUATE, ale ja osobne ji moc nepouzivam, protoze mi prijde mene prehledna
Pocet = Evaluate("COUNTIFS(A1:A10,""=a"",B1:B10,""=1"")")citovat
#014907
Opičák
postup pomocí několika vzorců.
vyhodnocení podmínek
vyhodnocení duplicit
poskládání za sebou
Asi by to šlo některé vzorce sloučit a zbytek sloupců skrýt.
Příloha: zip14907_vypis_duplic_podminky2.zip (9kB, staženo 50x)
citovat
icon #014919
avatar
@ poki: tá Tvoja funkcia nespočíta jedinečné záznamy

@ rombil: počet unikátnych položiek spĺňajúcich podmienky podľa vzoru, ktorý si dal, na dátach z prílohy, zistíš maticovým vzorcom:=SUM(IFERROR(1/COUNTIFS($A$3:$A$14; $A$3:$A$14; $B$3:$B$14; 1; $C$3:$C$14; "OK");0 )*($B$3:$B$14=1)*($C$3:$C$14="OK"))citovat
icon #014920
Poki
@ AL: mas kazdopadne pravdu - nejak prehlidl ten pozadavek na unikatnost - timto se vsem omlouvam, sypu si popel na hlavu a zacinam znovu cist pohadku 'O Popelce'... 9citovat

Strana:  1 2   další »

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje