Dám len nástrel riešenia, odchádzam. Keď to nedáte, tak možno keď prídem Vám to tam zakomponujem.
Sub pokus()
Dim Text As String, S() As String, Litrov As Single, Suma As Single
Text = "2.1.2020 Tankování Litrů: 32,45, Cena za l : 1,24 EUR, Cena celkem: 40,37 EUR"
S = Split(Replace(Text, ",", "."), ": ")
Litrov = Val(Split(S(1), ". ")(0))
Suma = Val(Split(S(3), " EUR")(0))
End Sub
Dá sa to aj maticovými vzorcami...
Pošlite súbor Excelu, nie obrázok. Nemám predstavu takto dobrú predstavu ako vyzerajú a kde sú dáta. Zmažte nepotrebné a citlivé dáta, len zachovajte danú časť makra a vymyslené údaje na miestach presne kde sú, a kde potom majú byť. Celé Know-how nepotrebujem :)
Nevidím problém, prečo by to nemalo ísť.
Power Query sa mi zdá na toto celkom dobré riešenie, bez makra. Na PQ je perfektný odborník "mepexg", ale toto podľa mňa zvládnete aj Vy. Skúste si to zatiaľ bez parametru umiestnenia.
Nový súbor - Údaje - Získať údaje - Zo súboru - Zo zošita - vyberte ho - Importovať - označte zdroj.xlsx (budú pod ním všetky listy) - Upraviť - v hlavičke stĺpca Data je dvojšípka - OK - označte posledné 3 stĺpce a dajte [Domov - Odstrániť stĺpce] - Zavrieť a načítať.
A potom si už iba vedľa dajte cez KT vypísať jedinečné položky z prvého stĺpca, tak, že v KT zrušíte všetky označenia, súčty a pod...
A ten parameter umiestnenia - vzorcom treba zistiť aktuálne umiestnenie súboru a z neho zdroja. Toto musí byť objekt Tabuľka, nie iba tabuľka. To môžete opísať z môjho v prvom riadku PQ kódu, ku ktorému sa dostanete takto:
-stojte na PQ dotaze - Dotaz - Upraviť - Rozšírený editor - upravíte Váš prvý riadok.
Ten koniec má byť takto:
With Sheets("Sammelliste").Cells(Radek, 2).Resize(, 11) ' Cílové buňky
.Formula = Zdroj & "B3" ' Zdrojové buňky
.Value = .Value
End With
Môžete použiť Application.Transpose() namiesto cyklu. Má to iba obmedzenie na 32768 položiek. Veľkosť poľa zistíte pomocou Ubound() a Lbound(), prípadne veľkosť oblasti pomocou Rows.Count a Columns.Count. Skúste priložiť príklad v súbore.
CountIf nie, ale Match áno. Skúste mu dať zožrať Date, dostanete chybu. Nemusí to byť Double, môže to byť CLng(), len ja som zvyknutý viac na Double, keďže môže obsahovať aj čas.
Makro ani netreba. Tu sú príklady na vzorec aj makro. Ostatné makrá som neriešil.
Samozrejme, len sa budete odkazovať na oblasť. Ktorá Tabuľka má byť teda tabuľka? Zdroj, ciel, obidve?, ktorý stĺpec rozhoduje o počte riadkov. Vo Vašom príklade má najviac riadkov 6. stĺpec, ale to asi tak nebude. Bude to prvý? Alebo sa môže brať v úvahu celá použitá časť listu ? (teda niesú žiadne iné údaje pod tabuľkou ani vedľa nej).
EDIT:
Tu máte ten najjednoduchší spôsob s použitím UsedRange, keď nieje ani jedna Tabuľka.
A čo keby ste použil na načítanie dát zo zatvoreného listu PQ? 2 príklady.
Neviem, ako to presne myslíte, ale napadajú ma hneď 2 varianty výsledkov...
JoKe: Vy ste to pochopil? A že vraj ja mám krištáľovú guľu.
Imh0tep: Vy chcete kopírovať ľubovoľne voliteľné listy? Na to predsa musíte mať pre každý list zatržítko.
Alebo chcete presunúť/kopírovať listy napr. staršie ako 3 mesiace? Tam sa dá použiť cyklus, ktorý pripraví pole, ktoré následne použijete, ako popísal JoKe. Určite, to nemusíte vypodmienkovávať. Lepšie to popíšte.
Ak sa pozriete sem, tak sa dočítate, že prehľadávané údaje musia byť zoradené vzostupne alebo údaje typu True/False, a funkcia vráti najvyššiu hodnotu vektora (2.param, podmienka), ktorá je <= hľadanej. Testovacia podmienka dá True/False (teda 1/0). Odstránime nevyhovujúce tak, že číslo 1 vydelíme práve týmito 1/0. Nulou sa deliť nesmie, takže tam vzniknú chyby, a ostanú jedničky. My hľadáme akože číslo 2. A keďže sú tie 1 akože zoradené vzostupne, vráti nám funkcia najvyšší "index" hodnoty <= hodnote 2. A to je posledná jednička. A keď máme index tak priradíme riadok (posledný param)
normálny vzorec číslo riadku
=IFERROR(LOOKUP(2;1/($A$3:$A$13=E8);ROW($A$3:$A$13));0)
=IFERROR(VYHLEDAT(2;1/($A$3:$A$13=E8);ŘÁDEK($A$3:$A$13));0)
normálny vzorec index
=IFERROR(LOOKUP(2;1/($A$3:$A$13=E8);ROW($A$3:$A$13)-2);0)
=IFERROR(VYHLEDAT(2;1/($A$3:$A$13=E8);ŘÁDEK($A$3:$A$13)-2);0)
maticovo číslo riadku (Ctrl+Shift+Enter)
=MAX(($A$3:$A$13=E8)*(ROW($A$3:$A$13)))
=MAX(($A$3:$A$13=E8)*(ŘÁDEK($A$3:$A$13)))
maticovo index (Ctrl+Shift+Enter)
=MAX(($A$3:$A$13=E8)*(ROW($A$3:$A$13)-2))
=MAX(($A$3:$A$13=E8)*(ŘÁDEK($A$3:$A$13)-2))
A čo to má presne vracať? Toto Vám vráti číslo riadku:
=LOOKUP(2;1/NOT(ISBLANK(A2:A10)*ISBLANK(B2:B10)*ISBLANK(C2:C10));ROW(A2:A10))
=VYHLEDAT(2;1/NE(JE.PRÁZDNÉ(A2:A10)*JE.PRÁZDNÉ(B2:B10)*JE.PRÁZDNÉ(C2:C10));ŘÁDEK(A2:A10))
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.