Ešte o mikrokúštik kratšie :)
=LEFT(A1;LEN(A1)-IFERROR(RIGHT(A1)*0;1))
=ZLEVA(A1;DÉLKA(A1)-IFERROR(ZPRAVA(A1)*0;1))
Áno myslel som na to, no nakoniec prevážila myšlienka, že nevieme čo obsahuje ten "txt", a čo ak tam bude tiež "/", tak som to spravil radšej takto :)
Skúsim iba zľahka.
Pomocný stĺpec je v oboch Tabuľkách na konci - skrytý.
Vypozoroval som, že dátumu vždy predchádza "/".
Vzorec funguje približne takto:
-nahradí "/" za počet medzier rovnajúcich sa dĺžke raťazca, tento trik sa používa na rozdelenie textu na úseky/slová či získanie N-tej časti.
txXt010018/24.01.2020
txXt010018 24.01.2020
-Teraz zoberieme zprava toľko znakov, aká je dĺžka origo textu
24.01.2020
-A teraz keď máme 11 medzier a textodátum, prevedieme tento textodátum na dátum
DATEVALUE(" 24.01.2020")
DATUMHODN(" 24.01.2020")
-a máme dátum 24.1.2020, ktorý môžeme testovať voči našej podmienke Datum!D3 a Datum!D4 (preto musí byť vo vzorci ešte jedno rovnaké počítanie pre druhý interval)
-samozrejme je to obalené v IFERROR, pre prípad, že tam dátum nebude, a pri prevode na dátum nastane chyba.
-lenže my toto celé nerobíme s bunkou, ale s 18-stimi, a teda nám vznikne maticovým vzorcom pole 0 a 1, ktoré pomocou SUM/SUMA spočítame.
Napr v 4. raidku
SUM(0/1/1/1/FALSE/FALSE/FALSE/FALSE/FALSE/FALSE/FALSE/FALSE/FALSE/FALSE/FALSE/FALSE/FALSE/FALSE)
SUMA(0/1/1/1/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA/NEPRAVDA)
-a tento súčet nám udáva koľkokrát sa v 18 stĺpcoch nachádza dátum v rozmedzí intervalov, ak je >0 tak je výsledkom číslo riadku dát v Tabuľke, ak je 0 tak ""
-tieto výsledky (čísla riadkov) sú logicky teda aj zoradené vzostupne.
A teda vo výslednej Tabuľke:
-potom pomocou vzorca zisťujeme na každom riadku zdrojový riadok
SMALL(stĺpec;koľká najmenšia hodnota)
"stĺpec" - je ten výsledný pomocný skrytý stĺpec na konci zdrojovej Tabuľky
"koľká najmenšia hodnota" - tu si pomocou relatívneho adresovania zabezpečíme, že vzorec na každom riadku bude ťahať o jedno väčšie číslo z výsledkov v zdroji (vždy ďalší riadok)
ROW(A1)
ŘÁDEK(A1)
-A potom už iba indexujeme data tak, že ich najskôr skontrolujeme, či nieje výsledná bunka prázdna, lebo by nám to ťahalo 0.
fertig
Najjednoduchší spôsob vzorcami je asi takto - pomocný stĺpec v každej Tabuľke.
Maticový vzorec vynechá prázdne riadky.
Podľa toho, čo som čítal na niekoľkých fórach, nie si sám čo mu tento bug "spríjemňuje" život. Opravujú to už vraj 2 roky, tak by som sa príliš na nápravu nespoliehal. Všeobecná zhoda je zatiaľ na použití ExcelTable ako jediného objektu na liste a začínajúcej v A1. Číta to potom ako akýkoľvek iný list bez ExcelTable.
let
Source = Excel.Workbook(File.Contents("D:\Dokumenty\pom.xlsb"), null, true),
xlTbl_CatalogueData_Table = Source{[Name="CataloguedData"]}[Data],
#"Hlavičky so zvýšenou úrovňou" = Table.PromoteHeaders(xlTbl_CatalogueData_Table, [PromoteAllScalars=true])
in
#"Hlavičky so zvýšenou úrovňou"
Presne tak. Snažíte sa vytvoriť podadresár v neexistujúcom adresári. Použite nejakú parametrizovanú procedúru na vytvorenie celej adresárovej štruktúry. Napr. narýchlo takéto niečo:
Sub VytvorAdresar(Cesta As String)
Dim sC() As String, dC() As String, i As Byte
If Right$(Cesta, 1) <> "\" Then Cesta = Cesta & "\"
dC = Split(Cesta, ":\")
sC = Split(dC(1), "\")
Cesta = dC(0) & ":"
For i = 0 To UBound(sC)
If sC(i) <> "" Then
Cesta = Cesta & "\" & sC(i)
If Len(Dir(Cesta, vbDirectory)) = 0 Then MkDir Cesta
End If
Next i
End Sub
Areas za iných okolností áno, ale nie v UsedRange. Tu by sa muselo asi zisťovať po jednom, či bunka obsahuje rám, podmienený formát, overenie údajov a pod. Samozrejme hodnotu, ale tá by sa ako jediná dala testovať rýchlo cez pole, či hromadne cez SpecialCells, prípadne maticovým EVALUATE s testom riadkov aj stĺpcov. Jednoduché to nebude.
Ukážte presne čo obsahuje
FolderPath
aFolder
Sheets("Definice poptávky").Cells(a, 1).Value
v momente chyby
Všetko variabilné:
Sub VyberOdDo()
Dim CisloRadkuOd As Long, CisloRadkuDo As Long
Dim CisloSloupceOd As Long, CisloSloupceDo As Long
CisloRadkuOd = 2
CisloRadkuDo = 3
CisloSloupceOd = 5
CisloSloupceDo = 8
ActiveSheet.Cells(CisloRadkuOd, CisloSloupceOd).Resize(CisloRadkuDo - CisloRadkuOd + 1, CisloSloupceDo - CisloSloupceOd + 1).Select
End Sub
Sub VyberOdPocet()
Dim CisloRadkuOd As Long, PocetRadku As Long
Dim CisloSloupceOd As Long, PocetSloupcu As Long
CisloRadkuOd = 2
PocetRadku = 2
CisloSloupceOd = 5
PocetSloupcu = 4
ActiveSheet.Cells(CisloRadkuOd, CisloSloupceOd).Resize(PocetRadku, PocetSloupcu).Select
End Sub
pavol14pavol napsal/a:
v Tabulke A prvy stpec(nazov) musi byt umiestneni v bunkach C32 az C60 a druhy stlpec (predaj) I32 az I60 presne tak ako je ulozena v tejto tabulke.
pavol14pavol napsal/a:
...presne tak ako je ulozena v tejto tabulke...
Ale veď ono to je vlastne jednoduché. INDEX+MATCH zabezpečí výber stĺpca s požadovaným dátumom. COUNTIFS vyberie z neho iba riadky spĺňajúce pracovnú pozíciu podľa B a tím podľa riadku 2. A potom príde to čaro, že COUNTIFS ako podmienku pre spĺňajúce riadky daného stĺpca, otestuje či začínajú na písmená smeny uvedenej v A ako názov oblasti smeny. Maticový vzorec to musí byť práve preto aby COUNTIFS testoval a vrátil toľko výsledkov, koľko je parametrov v danej smene, teda 5. Týchto 5 výsledkov bude vždy vyzerať tak, že budú 4x0 a 1x1, lebo bude daná bunka začínať práve jedným označením smeny. Preto to musíme potom zrátať cez SUM. A buď dostaneme 0 alebo 1.
EDIT:
Ešte ma napadlo, aby to nebol maticový vzorec ale normálny, stačí vymeniť SUM/SUMA za SUMPRODUCT/SOUČIN.SKALÁRNÍ.
Pr.
ata napsal/a:
...Nějaký rychlejší způsob ?...
Ak poznáte meno súboru, mená listov a umiestnenie dát, teda netreba napr zisťovať počet riadkov a pod, tak stačí makrom hromadne zapísať vzorec do buniek cieľového zošita s odkazom na bunky, ktoré nás zaujímajú v tom zatvorenom. To je tiež rýchlejšie ako otváranie súboru.
Treba prílohu zdroju aj cieľa.
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.