Vytvorte si novú tabuľku, rovnakú ako pre SUMPRODUCT, a vymente vzorce napr. za niečo takéto:
PS: Pozor na zaokrúhľovanie, hodnotu z E18 (0,22) číta ako 0,218. Vypočítaná je 0,218, ale v hornej tabuľke je zaokrúhlená na 0,22.
No zapracoval som na Vašom probléme, a je s toho nasledovné.
-Je použitý skrytý list "Temp", v ktorom sa vytvárajú makrom vzorce, ktoré vyťahujú data zo súborov.
-Všetko prebieha hromadne, s čo najmenším počtom prestupov medzi VBA a Makrom (to je totiž pomalé)
-Je to nastavené na Váš adresár.
-Testované je to na 211 súboroch a 71 riadkoch dát, a rýchlosť vytiahnutia dát zo všetkých súborov, porovnania, vyfiltrovania prázdnych hodnôt, vytvorenie HyperTextových odkazov, všetko dokopy trvá na mojom PC 2,1 sekundy.
-Ošetrené je aj to, že ak je súborov so zhodou viac ako 6 (počet vyhradených riadkov), tak sa zobrazí len prvých 6.
-Ak by v F2 nebola hodnota, musí sa zobraziť "-" (kvôli nasledujúcim procedúram to nemôže ostať na "")
-Pozor si dávajte pri vytváraní nových riadkov, nezabúdajte, že musia byť zlúčené bunky (6 riadkov), a to v prvom rade v stĺpci A, pretože ten je smerodajný pre počet "výpočtov".
-Snáď ste myslel tie odkazy takto, ako som to spravil.
-Opravil som Vám formátovanie stĺpca E, ktoré bolo nastavené tak, že sa hodnoty nezobrazovali, aj keď v bunke boli (nie "Centrovať na stred výberu", je potrebné iba "Centrovať").
A čo sa týka toho kde prečo Vám nefunguje to čo ste poslal naposledy, tak hneď vo vkladanom vzorci máte na konci mať odkaz na "BOM" a nie na "Figur". ďalej som neskúmal, pretože ako som vravel, je to bezpredmetné.
Vyskúšajte túto novú verziu, a dajte vedieť. Len to nechcite vysvetľovať, lebo pri tom ma už asi naozaj klepne
Presne tak, dajte sem prílohu 2 súborov na aktualizovanie a 1 súbor z ktorého sa ťahajú data. Svoje data si zmažte a nechajte len 1-2 riadky vymyslených dát.
Na to čo som Vám poslal zabudnite, netrápte sa. To bolo vyvinuté na základe 1. požiadavky, tá bola ale neskôr úplne zmenená. Vy potrebujete od nuly vymyslieť a vyvinúť niečo úplne iné. Vymyslené to už snáď mám, hlavné veci už aj vyvinuté, len to musím dopracovať. Dnes som sa k PC nedostal, uvidím zajtra. Zatiaľ to testujem na 210 súboroch čo ste poslal, a cca 60 záznamoch v hlavnom liste, a hľadám ešte možnosti v rýchlosti aplikácie.
Koľko tam bude asi riadkov v hlavnom zošite?
No ale to je zásadne iné, ako to čo ste popisoval !
Ktorá hodnota sa má hľadať ? Tá čo je v stĺpci D ?
Ak je to tak ako si myslím, tak potrebujete nájsť číslo 6145709 (D3), a prípadné nálezy vypísať do E3:E5 (len 3 riadky, alebo ak sa jedná o E3:E8 tak 6 riadkov). Čo ak bude treba viac riadkov ?
Ten prepočet spustí napr tlačítko "Najdi BOM", ale ako makru určíte, ktorý riadok (ktoré číslo) sa má hľadať, a na ktoré bunky sa má zapisovať ?
Ak tlačítkom, tak by musel každý trojriadok (šesťriadok) mať svoje tlačidlo, alebo by jedno tlačidlo spustilo prepočet všetkých trojriadkov/šesťriadkov v liste Figur.
Ak cez OnChange (zmena v bunke), tak to môže byť pri zmene bunky a veľkom počte prehľadávaných súborov (rádovo 100-ky) pomalé.
Musíte to značne, ale naozaj značne upresniť, čo presne chcete meniť, aký a kde očakávate výsledok, čo v prípade prekročenia rozsahov, o aký počet súborov sa jedná, ako chcete spúšťať prepočet, chcete vypisovať niekde aj názov zošitu v ktorom sa našla zmena, to je obrovské množstvo otázok, na ktoré ste nemyslel.
Ste na ťahu...
EDIT:
A ešte pozerám, že ste si nezmenil ani názvy listov na korektné
Hodnoty(UBound(Hodnoty)) = "=IF(ISERROR(MATCH(Figur!$A$1,'" & Cesta & "[" & Subor & "]BOM'!$C$5:$C$19,0)),"""",'" & Cesta & "[" & Subor & "]BOM'!$F$2)"
ani cestu na korektnú v
Cesta = "z:\Hľadaj v zošitoch\"
Navyše ste kód skopírovali do modulu, ale on nebol v module ale ako makro konkrétneho listu.
Ešte ma napadlo upraviť to tak, aby sa nepoužíval pomocný skrytý list. A pridal som Vám aj to tlačítko. Takže si vyberte, či tlačítko alebo zmena v bunke má vyvolať hľadanie. Ak tlačítko, tak zmažte procedúru Worksheet_Change v makre.
Nie je to len čisto Váš názor - ale aj môj. Už sme dvaja. Tiež si myslím, že to je čisto len cielená komercia...
Ja som Vám urobil riešenie na inom princípe.
Zadajte do bunky A1 v zošite Hľadaj.xlsm, čo sa má hľadať, a v E Vám vypíše hodnoty buniek F2 zo zošitou, v ktorých sa vyhľadávaná hodnota nachádza v rozsahu C5:C19 na liste BOM. Tak ako ste chcel.
Len si v makre najskôr zmente
Cesta = "z:\Hľadaj v zošitoch\"
na Vašu cestu (s koncovým lomítkom)
Teraz je to urobené tak, že sa spustí hľadanie pri zmene v bunke A1, ale lepšie by bolo asi toto makro priradiť tlačítku. To si už snáď dorobíte.
??? Už v predošlom dotaze som doporučoval prílohu.
Aký priemer ? Ako sa dá vypočítať priemer z údajov typu "01-A-001" ? Podľa mňa pletiete stĺpec "Kód" so stĺpcom "Výroba".
Príloha by to ako tak objasnila, včetne toho, kde máte aké vzorce.
Zvýraznenie môžete urobiť Podmieneným formátovaním, napr. takto:
-Vytvorený nový Definovaný názov "Check", vzorec si pozrite, odkrokujte.
-tento "Check" sa dá ako podmienka pre Podmienené formátovanie.
A preto je vhodné dávať prílohu...
Ešte ma napadlo, že ak budú kódy rovnaké, tak VLOOKUP zlyhá a ukáže na prvý. Potom to vyriešiť zmenou vzorca na druhú maticu. Potom je to OK.
A čo takéto niečo ? Urobil som Vám to tak, že je to nastavené najviac na 20 hodnôt v Hárok2, a dynamicky (akékoľvek množstvo) na Hárok1.
Tu som Vám urobil makro s rekurzívnou funkciou vyhľadania všetkých súborov xls a xlsx v zadanom adresári (a podadresároch). Každý otvorí, urobí RefreshAll na všetky pripojenia, uloží a zatvorí.
Treba to overiť na skúšobnej kópii Vašich dát, pretože to robím iba teoreticky. Funguje to na lokálnom disku aj na sieti.
Dnes som sa hral
Ak by ste to chcel mať s dynamicky počítanou oblasťou, a dynamickým orámovaním, tak napr. takto.
Žiaľ ak to budete chcieť tlačiť, tak to je problém, kvôli hrubému orámovaniu, ktoré inak ako takto (a makrom) nieje možné asi urobiť. V podmienenom formátovaní ide iba tenké, a preto musí byť nastavené na celú oblasť do r. 2020 hrubé orámovanie, a potom sa podmieneným formátovaním ruší podľa potreby, a to má za následok tlač prázdnych strán.
Taká vizuálna drobnosť, to komplikuje
Do F1 toho súboru, čo som Vám poslal minule, dajte:
=IF(hyplnk(E1)="";"";HYPERLINK(hyplnk(E1)))
a do Module1 pridajte túto funkciu:
Function HYPLNK(C As String) As String
Dim Cesta As String, Subor As String
With ThisWorkbook
Cesta = .Path & "\Files\"
Subor = Dir(Cesta & "*.pdf") 'Ak má ísť o hociaký typ súboru tak : Subor = Dir(Cesta & "*")
On Error Resume Next
While Subor <> vbNullString
If InStr(Subor, C) > 0 Then HYPLNK = Cesta & Subor: Exit Function
Subor = Dir()
Wend
End With
End Function
V bunke F1 bude teraz vždy hyperlink na prvý súbor, ktorý obsahuje zadaný reťazec v E1. Ak taký nieje, nebude tam nič.
Inak mali by ste sa rozhodnúť, čo tam má byť, veď to stále meníte. Ak nechcete už otvárať všetky súbory, tak to tlačítko aj s procedúrou zmažte, a nechajte len Hyperlink na prvý nájdený súbor.
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.