< návrat zpět

MS Excel


Téma: Porovnání dvou polí - VBA rss

Zaslal/a 5.9.2017 13:48

Zdravím,

mám prosím takvý dotaz:

mám dvě dynamické pole (Day1 a Day2). V jednom poli je uloženo 6 jmen a v jednom 5 jmen. Potřebuji, abych mohl tyto dvě pole porovnat a aby výstup byl takový:

Program vypíše, jaké jméno je v Day1 ale není v Day2 a zároveň číslovkou napíše, o kolik takových jmen se jedná (v našem případě to je logicky 1).

Později bude tento sysém aplikovaný na mnohem více jmen. Takže potřebuji aby to bylo vyřešeno makrem.

Za rady moc díky :)

Zaslat odpověď >

Strana:  « předchozí  1 2 3 4 5   další »
#037576
Stalker
Ne, funkce resize mění velikost vybrané oblasti. Proto sem ve videu vložil do kódu ty selecty, aby bylo vidět co se děje na listu.

Day1 = .Cells(2, 1).Resize(R1).Value2
Pole Day1 načte hodnoty z oblasti A2:A7.

Cells(2,1) vybere buňku A2 a funkce rezize roztáhne oblast o 6 (hodnota proměnné R1) řádků včetně. Tedy z oblasti A2 je pomocí resize oblast A2:A7

Co se týče vypsání obsahu pole do listu např:
Cells(1, 2).Resize(UBound(Day1)).Value = Day1

Opět Cells (1,2) vybere buňku B1 resize rozšíří oblast(funkce UBound(Day1) určí horní mez pole - kolik jmen je v poli, tedy 6) na B1:B6 a vloží se hodnoty z pole Day1.

Ještě přiložím upravený soubor ať se v tom můžeš štourat
Příloha: zip37576_test_1_select_1.zip (19kB, staženo 30x)
citovat
#037577
avatar
díky moc :))!!citovat
#037582
elninoslov
Díky Stalker za zastúpenie pri objasňovaní :) Nebolo času.
Tu máte narýchlo verziu s pomocným reťazcom. Rozdiel je enormný.
Porovnanie robím na 20 000 záznamoch vs. 20 000 záznamov, pričom je 19 902 výsledkov aj v jednom aj v druhom prípade.

Čas pri metóde Match : 00:03:50
Čas pri metóde String: 00:00:20

Tu na fórum dávam prílohu bez dát.
Kompletná príloha s 20 000 záznamami je na GoogleDrive
Příloha: zip37582_vymenuj-zhodne-mena-v-poli-2-bez-dat.zip (28kB, staženo 38x)
citovat
#037597
avatar
Ahoj,

díky za super rychlejší úpravu. Jen bych potřeboval opět pár řádku objasnit.

Hlavně ten nový, na kterém je ten program pomocí stringu postaven:

sDay1 = "•" & Join(WorksheetFunction.Transpose(Day1), "•") & "•"

u dalších dnů to je podobné. Co se prosím uvnitř děje? K čemu tam jsou ty tečky?

Díky moccitovat
#037601
avatar
Pokouším se nyní aplikovat makro na originální data. Potřeboval bych makro ale upravit tak, aby nyní byly zdrojem dat externí soubory. Tzn třeba soubor s názvem obchod1 a list s názvem zaměstnanci a soubor obchod2 a list zaměstnanci. Šlo by tady popsat, jak a co mám upravit, abych nyní netahal data ze dvou sloupců v jednom souboru, ale z jinéh souborů? A ještějednu úpravu musím udělat.

Nyní jsme vzali z jednoho sloupce Day1 jméno a porovnali se sloupcem Day2, zda tam je to samé. Když tam nebylo, vypsali jsme ho do jiného sloupce.

Nyní mám ale situaci, kdy mám v jednom sloupci jméno a v druhém sloupci příjmení. Je to export z jednoho programu. Takže nemůžu zařídit to, aby bylo jméno i příjmení v jednom sloupci. Musím tedy porovnávat dva sloupce se dvěmi sloupci. Napadlo mě, že by se dalo nějak sjednotit jméno v jednom sloupci s příjmením v druhém sloupci (nějaký join) a pak porovnávat takto sjednocené celé jména. Ale jak na to prakticky, nevim... Měl by si nápad prosím?

Díky moc :)citovat
#037603
elninoslov
To sú ale mimoriadne podstatné zmeny.
Nápad mám, no nemám čas.
-Makro si bude musieť tie externé súboru otvoriť a prečítať dáta.
-Spojí si 2 stĺpce v 2 poliach do jedného v cykle.
-Dôležité bude, či sa budú listy so zamestnancami vždy volať "Zaměstnanci", či budú v rovnakých stĺpcoch atď., a kde budú tie súbory uložené. Či tam, kde je tento súbor, alebo v nejakom stálom adresári.

PS: Tie bodky sú tam kvôli tomu, aby sme pri vyhľadávaní mali jednoznačne určený začiatok aj koniec mena. Ťažko bude mať niekto v mene znak "•" (Alt+0149). Lebo inak by pri hľadaní "Jan Thomas" našlo aj meno "Jan Thomas Burger", ale takto budeme hľadať "•Jan Thomas•" a "•Jan Thomas Burger•" nás nemôže pomýliť. Túto metódu by sme aj naďalej používali.

Čas ale nieje ...citovat
#037604
avatar
Ahoj,

chapu :(...

no, soubory budou ve stejnem adresáři jako soubor, kde bude napsano makro. SLoupce se vždy budou jmenovat stejně a vždy budou na stejne pozici. Jenom bude mít soubor jiný počet řádků v různých obchodech a každý měsic. Takže třeba v Lednu bude mít obchod 1 17000 zaměstnanců (list zaměstnanci, tzn 17000 řádků. V únoru třeba 17844 řádků. Když budou tedy stále stejné pozice, bylo by to lehčí na imlpementaci?

Díky moccitovat
#037606
elninoslov
Nie, myslel som to tak, aby boli rovnako umiestnené. Teda budú vždy v liste "Zaměstnanci" v stĺpcoch napr. A a F a začínať budú v 5. riadku. Koľko ich bude, je putna, to si zistíme, keď si makro súbory otvorí.citovat
#037607
avatar
Ano, vždy budou na stejnem mistě. Bude se jednat o exportované soubory. Tzn, hlavičky sloupců budou vždy na tom samém místě. Rozdíl bude jenom v názvu souboru se zdrojovými daty. Tedy - první soubor bude třeba 01_Leden_obchod a druhý bude 02_unor_obchod. List, ve kterém budou data uložena se jmenuje všude stejně - month... SOubor, ve kterém bude napsáno makro, bude v té samé složce, ve které budou zdrojové souborycitovat
icon #037609
eLCHa
@elninoslov

Nedalo mi to a musel jsem to vyzkoušet.
Váš kód jede na mém PC 40 vteřin.

Využití Collection mi vychází 4x rychlejší (jel 8 vteřin), navíc má výhodu, že odhalí duplicity (proto se naše výsledky nebudou shodavat - nějaké tam máte). A je obecný (nepoužívá transpose)
Ještě by to šlo možná optimalizovat, ale už nemám čas ;))
Příloha: txt37609_vymenuj4.txt (3kB, staženo 49x)
citovat

Strana:  « předchozí  1 2 3 4 5   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