Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  4 5 6 7 8 9 10 11 12   další » ... 286

No ja neviem. To aktualizujete iba tie hodnoty, ktoré sú označené Selectom ? A to pole je iba ako infolog a súvisí to nejako s témou "Vybrané řádky do pole"? Idete bunku po bunke, to je pomalé. Čo je slKonec? Dodajte anonymizované prílohy oboch súborov a pozriem na to, či to lepšie poberiem. Ale v stĺpcoch kde sú vzorce nechajte nejaké vzorce, tam kde sú hodnoty, nechajte hodnoty rovnakého typu. Stačí pár riadkov.

Ak sa Vám zdalo Vaše makro preplácané, tak z môjho odpadnete. 5
Samotná výkonová časť (hľadanie) je triviálna, pár riadkov. Ale desaťnásobne to zväčšuje, zneprehľadňuje a znižuje čitateľnosť a prehľadnosť práve všetok potrebný balast, ako kontroly, výpis priebehu v StatusBare, čiastkové vyfarbovanie (aby Excel nehavaroval ak oblasť obsahuje príliš veľa podoblastí) a pod., messageboxy, 25 riadkov kódu len vytvára náhodných 100K dát, ...

Zajtra keď vyjde čas a aj trochu elánu, skúsim si Váš príspevok ešte párkrát prečítať, a uvidím či urobím nejaké zmeny.

Ale ako zabrániť zmazaniu listu, ... neviem, ... nič ma terazky už nenapadá ...

Nie. Výsledok obsahuje samostatné podoblasti, a niektoré vlastnosti toho celku sa nedajú prečítať tak, že budete mať uvedený spoločný počet. Musíte si prejsť každú podoblasť zvlášť, a prečítať jej samostatné vlastnosti. Vy keď sa hneď pokúsite zistiť danú vlastnosť, dostanete odpoveď z prvej podoblasti. Preto Vás mýli, že to má 1 riadok. Nemá.

Nemusíte načítať celé dátové pole. Mne to tak prišlo jednoduchšie. Môžete načítať pre každú podoblasť jej vlastné dáta, a korigovať posun vo výslednom poli. Podľa mňa je zvolený postup jednoduchší a rýchlejší. Načítať obrovské množstvo údajov naraz je rýchlejšie, ako načítať veľké množstvo malých podoblastí.

EDIT:
Reakcia na EDIT:
Práveže Vy si musíte zistiť pre každú podoblasť jej veľkosť
rngArea.Rows.Count
viď prvý odstavec.

Zabudol som na konci zmazať definíciu, ktorú som nepoužil
Set wsData = Nothing

Inak celé sa to dá ľahko prerobiť na funkciu, ktorá Vám vráti pole hodnôt. To ma napadlo, keď ste písal, že stĺpce budú variabilné. Vstupným parametrom by bola iba adresa hlavičky.

Momentálne mám v adresári, kde si dávam takéto prílohy čo riešim Excel, 1634 súborov. Pekný bordel. Kedy sme to riešili? Však to nemôžem nájsť...

Skúste

Vy tam chcete zistiť aj koľko je zobrazených stĺpcov?
cntCol = .SpecialCells(xlCellTypeVisible).Columns.Count
Teda hrozí, že niektoré budú skryté? Teda môže nastať, že budete chcieť spojiť do poľa nielen nesúvislé riadky, ale môže to byť ešte aj v nesúvislých stĺpcoch?

Nerobili sme to už náhodou???

Dám sem len texťák s makrom, netreba znovu tú veľkú prílohu...

Čím mám staršie kolená, tým som tvrdohlavejší a menej chápavý. Neviem, ako tie dva orgány spolu súvisia, veď sú tak ďaleko od seba ...

Príloha?
PowerQuery?
Zoznam a názvy listov sú premenlivé?
Mená zákazníkov sú variabilné?
...

Urobil som verziu cez vyhľadávanie v Collection. 100000 vyhľadávaní v ďalších 100000 riadkoch spracuje aj výpisom priebehu, konverziou stringov na čísla za cca 6-7 sekúnd. Problémom je vyfarbovanie. A to je ohromný časový problém. Zakomponoval som zložité kontroly a čiastkové zafabovanie po častiach. Potom to ide celkom dobre. Keď privriem oči, tak čo % to sekunda. Dôrazne neodporúčam pri vygenerovaní 100000 riadkov (na to je tam makro, aby nebola veľká príloha) odpovedať NIE na otázku, či má vyfarbovať po krokoch. Ide to ako raketa. Obmedzujú to len farby...
Ešte poriadne pochopiť tie podmienky...

Prvý nástrel len prasácky poupravované (zdôrazňujem prasácky) a povynechávané. Snáď to robí čo má. Niektoré tie podmienky som vôbec nepobral, tak som ich ponechal. Všetko, čo sa dalo, je cez polia.
Vyskúšajte.

Viac nemám čas. Všetci zdúchli, a tak idem nachystať na tajnáša nejaké Vianočné veci. Ale psst, nie že to tu rozkecáte ... 5

Ak to bude funkčné, tak to poupravujem, aj nejaký popis dodám.
PS: Inak prílohy ste dal presne také ako som nechcel. Nie je vidno, či niekde nie sú vzorce. Dalo by sa pre zjednodušenie preplácnuť všetky dáta (aj nemenené), bolo by menej polí...

EDIT:
Dnes som si to ráno vyskúšal, a Match je nedostatočný. Použijem Collection - mnohonásobne rýchlejšie hľadanie. Nachádzajú sa v prehľadávanom súbore duplicitné materiály?

EDIT2:
Tak sa snažím pochopiť tie Vaše podmienky... No, dobré by asi bolo, začať od začiatku, a to vysvetlením, čo to má robiť a za akých podmienok. Napr. ak dôjde k výpočtu (lebo je číslo a nie text) a zároveň pri výpočte dôjde k zmene očerveň, inak zachovaj pôvodnú farbu/ zmaž akúkoľvek farbu. Atď.
To makro je celé? K čomu potom toto?
Case existingPrice = 0
If calculatedPrice = 0 Then
End If

V tomto riadku
ElseIf existingPriceValue = 0 Or existingPrice = "no info" Or InStr(existingPrice, "*") And calculatedPrice <> 0 Then
sa zbytočne testuje
Or existingPrice = "no info"
lebo nikdy nenastane, pretože to je v bloku
Case IsNumeric(existingPrice)
Ďalej priložte takú prílohu, kde bude 1 riadok z každej eventuality, ktorá sa môže vyskytnúť, aj s jeho požadovaným výsledkom včetne farby (kedy ma červená vzniknúť, zaniknúť, ponechať).
text, číslo, farba, "*", "no info", "AT mat", ...
Desatinné čísla v stĺpci G neprevádzate na skutočné čísla. Ostávajú ako text. To sa má asi previesť, nie?

Presne ako vraví Milan. To treba celé prerobiť. Zapísať 10000 zbytočných buniek v poli (to isté na svoje miesto) je určite rýchlejšie ako 1000 buniek po jednej. Sú tam zbytočné podmienky (alebo makro nie je celé). Duplicitné operácie
wsJG.Cells(i, "G").Value = Replace(wsJG.Cells(i, "G").Value, "EUR", "")
robí predsa to isté s tou istou hodnotou ako toto
euroPrice = Replace(euroPrice, "EUR", "")
Vyfarbenie nerobiť po jednom, ale chystať si spoločnú Range a vyfarbiť naraz.
Prestupovanie medzi Excelom a makrom je pomalé, a preto neustále
wsVer1.Cells(j, 10)
spomaľuje
...

Prílohy, kde bude pár dát, s rovnakým usporiadaním, vzorcami, formátmi a pod, ako máte v reále. Anonymizované ale kde niečo je tak to tam nechajte len zmeňte. Nemažte napr. hlavičky.

Uvidíme...

pr.

Ak ide len o počet riadkov, ktoré sú označené (v akomkoľvek stĺpci) a zároveň viditeľné, stačí
pocet = Intersect(Selection.Parent.Columns(1), Selection.EntireRow).Cells.Count
Ale o to asi nepôjde.

Čo myslíte pod pojmom "pole"? Skutočný VBA Array()? Alebo oblasť buniek? Čo znamená naplniť hodnotami? Akými? Konštantou? Každá je variabilná a počítaná? Zložitosť a týchlosť zápisu bude záležať na množstve vecí. Napr. či sú zapisované stĺpce pri sebe alebo ob-stĺpce, či sú medzi hodnotami vzorce a pod. Čo predstavuje "poleHodnot(idx,0)"?

Musíte to podstatne upresniť, ideálne pomocou anonymizovanej prílohy formou súboru Excelu, kde bude znázornené čo máte, a manuálne vytvorené aj to čo má po úprave vzniknúť + popis podmienok, výpočtov dopĺňaných hodnôt a pod. V prílohe ale musíte zachovať štruktúru a formáty. Ak je niekde vzorec, nechajte ho tam. Je to dôležité napr., ak chcete hromadne zapisovať do viacerých nesúvislých stĺpcov/riadkov, tak sa dá použiť namiesto niekoľkonásobných zápisov, jeden, kde sa aj prepíšu nemenené hodnoty tými istými. Kvôli rýchlosti. To ale nie je celkom možné, ak sú tam vzorce.


Strana:  1 ... « předchozí  4 5 6 7 8 9 10 11 12   další » ... 286

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

Vynásobit hodnoty kurzem - Power Query

lubo • 25.4. 19:18

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 15:12

Relativní cesta - zdroje Power Query

Alfan • 25.4. 15:08

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 14:21

Relativní cesta - zdroje Power Query

Alfan • 25.4. 10:49

Relativní cesta - zdroje Power Query

elninoslov • 25.4. 10:47

Relativní cesta - zdroje Power Query

Alfan • 25.4. 10:40