Normálne to funguje. Dajte prílohu.
A ako vyzerajú tie listy? Majú rovnaké rozloženie dát na rovnakých miestach? Veď potom stačí iba označiť všetky pôvodné dáta, Ctrl+C, označiť prvú bunku týchto dát na tom druhom liste, pravý klik, vybrať Možnosti prilepenia - Formátovanie. Prípadne ukážte prílohu s tými 2 listami.
Pokusy robte výhradne na kópii súboru !!!
Tu máte úpravu, zisťuje si to aj formát, viď krátky popis v makre. Zadávate iba indexy stĺpcov, ostatné si to urobí (snáď správne ).
Napr. takto ?
Momentálne mám Covid, a možno mi to nemyslí, ale nemôže tú exportovaciu Tabuľku vytvoriť ten PQ??? Veď to urobí z tých údajov, ktoré načítava to tej Tabuľky DataTab. Na skrytom liste, a makro urobí iba export toho skrytého listu do XLS. Či?
EDIT:
Príklad makrom ...
Logika makra s takouto možnosťou neráta. Udalosť zmeny volá makro s parametrami. Ide o to, že volané makro nevie na ktorom riadku sa zmena vykonáva, a naopak volacie makro nevie výsledok volaného makra (mohlo sa meno nenájsť a dátum nezapísať). Takže nie je možné ani do jednej časti len tak doplniť zápis do G.
Takže odporúčam buď :
a) zmeniť "MojeMakro" na funkciu s návratovou hodnotou, či bol zápis dátumu vykonaný korektne (meno sa našlo) a zápis do G vykonávať v "Worksheet_Change" na základe výsledku funkcie, alebo
b) odovzdávať makru "MojeMakro" buď
b.1) o jeden parameter "Cislo_Radku as long" navyše, alebo
b.2) jednému z parametrov "Objednal"/"Jmeno"/"Datum" zmeniť typ na Range
aby sa dal identifikovať riadok, ktorý sa rieši, a zapísať G v "MojeMakro"
Sub pokus()
Dim a_bunka_r As Long, c_sn As Long
Dim subor As String, cesta As String, oblast As String
a_bunka_r = 4
c_sn = 3
subor = "PokusSubor.xlsx"
cesta = "e:\Download\"
oblast = "DATA"
With List1.Cells(a_bunka_r, c_sn)
.Formula = "=VLOOKUP(B" & a_bunka_r & ",'" & cesta & subor & "'!" & oblast & ",21,FALSE)"
.Value = .Value
End With
End Sub
Tak napr. spojené pole a Application.Vlookup. Ak toho bude veľa, tak rýchlejšia bude kolekcia. Urobená obdobne - spojený kľúč. Prípadne namiesto IsEmpty() použiť asi rýchlejšie LenB()=0. Každopádne v prvom rade sa zbaviť "prázdnych" desaťtisícov riadkov.
"vlookup z jiného listu" - tým myslíte z iného zošitu, áno? A zatvoreného?
Príloha?
Sub pokus()
Dim a_bunka_r As Long, c_sn As Long
Dim subor As String, cesta As String, lst As String
a_bunka_r = 4
c_sn = 3
subor = "PokusSubor.xlsx"
cesta = "e:\Download\"
lst = "DATA"
With List1.Cells(a_bunka_r, c_sn)
.Formula = "=VLOOKUP(B" & a_bunka_r & ",'" & cesta & "[" & subor & "]" & lst & "'!B2:Z20,21,FALSE)"
.Value = .Value
End With
End Sub
Takže je medzi podmienkami operátor AND? A platí teda, že ak sa nájde prvá podmienka na 6 riadku, tak hľadanie pokračuje logicky až od 6. riadku pre druhú podmienku, a ak nájde 2. podmienku, tak pre tretiu začína hľadanie až od riadku s 2. podmienkou?
Inak šlo by to aj maticovým vzorcom
=INDEX(HNV!$B$3:$B$6;MATCH(1;(HNV!$O$3:$O$6=E5)*(HNV!$L$3:$L$6=C5)*(HNV!$Q$3:$Q$6=H5);0))
=INDEX(HNV!$B$3:$B$6;POZVYHLEDAT(1;(HNV!$O$3:$O$6=E5)*(HNV!$L$3:$L$6=C5)*(HNV!$Q$3:$Q$6=H5);0))
Naschvál som tam pridal aby bola zobrazená pomlčka v tých bunkách so vzorcami v stĺpci Zařízení, aby neboli prázdne. Aby Vás trklo, že tam niečo je. Vidíte, že je tam vzorec odkazujúci na hlavičku Tabuľky? A tie krásne červeno+zelené dvojice súvisiacich dát (teda názov zariadenia+spotreba) mali byť jasné - pridávate dvojice stĺpcov, NIE RIADKY.
Riadky Tabuľky pridávate iba v prípade nedostatku predimenzovaných riadkov v ktoromkoľvek stĺpci, a to natiahnutím za pravydolný roh. Najskôr si ale posuňte tie spodné tbl. Samozrejme má Tabuľka vlastnosť automatického pridávania riadkov pripísaním dát do niektorého stĺpca, ale keďže vidím, že ste schopný prepísať ručne aj stĺpec so vzorcom, tak preto vravím ťahať za pravýdolný roh.
Ak tam chcete dať zariadenie ako zdroj energie, tak ho zapíšte so zápornou spotrebou. No akékoľvek počítanie prijatej energie z nestálych zdrojov diskvalifikuje celý výpočet - je nestabilné. Veď ten solár predsa nedodáva 24/7...
No ak ste dal povoliť pri otvorení súboru, tak fakt netuším, čím je táto hláška spôsobená. Ale vynašiel ste sa. Každopádne makro nepotrebujete, ak tie dáta ostávajú v Exceli. Potom je to zbytočný krok, a stačí to PQ.
PQ: A čo sa Vám na tom nezdá? Veď to dáva správny výsledok.
Iba v prípade, že súbor obsahuje diakritiku zmeňte
Encoding=1250
na
Encoding=65001
V PQ od "veny" je iba 1 parameter navyše, ktorý môj PQ nežerie, ak ani Váš, tak si parameter zmažte
#"Přidané: Index" = Table.AddIndexColumn(#"Změněný typ", "Index", 0, 1, Int64.Type),
na
#"Přidané: Index" = Table.AddIndexColumn(#"Změněný typ", "Index", 0, 1),
Inak oba PQ dávajú rovnaký výsledok. Len "lubo" konvertoval GB/US hodnoty na CZ a "veny" nie.
"Marekh" napsal/a:
ale pak při exportu do původního formátu zase ano.
Upozornenie vybehne, aj keď je spustené iné makro. Tu je príklad.
Aktivujte si v
Workbook_Open
Workbook_BeforeClose
variant, ktorý chcete.
Maticový vzorec (Ctrl+Shift+Enter) ?
=INDEX($C$3:$C$8;MATCH(MIN(IF($B$3:$B$8>=F3;$B$3:$B$8-F3;FALSE));IF($B$3:$B$8>=F3;$B$3:$B$8-F3;FALSE);0))
=INDEX($C$3:$C$8;POZVYHLEDAT(MIN(KDYŽ($B$3:$B$8>=F3;$B$3:$B$8-F3;NEPRAVDA));KDYŽ($B$3:$B$8>=F3;$B$3:$B$8-F3;NEPRAVDA);0))
prípadne
=LOOKUP(MIN(IF($B$3:$B$8>=F3;$B$3:$B$8-F3;FALSE));IF($B$3:$B$8>=F3;$B$3:$B$8-F3;FALSE);$C$3:$C$8)
=VYHLEDAT(MIN(KDYŽ($B$3:$B$8>=F3;$B$3:$B$8-F3;NEPRAVDA));KDYŽ($B$3:$B$8>=F3;$B$3:$B$8-F3;NEPRAVDA);$C$3:$C$8)
ale to je to isté. Nič iné ma nenapadá.
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
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.