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.
Vyskúšajte či je toto správne (maticovo Ctrl+Shift+Enter):
=IF(SUM(COUNTIFS($B$21:$B$35;$B3;$C$21:$C$35;C$2;INDEX(Dochadzka;;MATCH($A$1;$E$18:$M$18;0));INDIRECT($A3)&"*"));"OK";"NOK")
=KDYŽ(SUMA(COUNTIFS($B$21:$B$35;$B3;$C$21:$C$35;C$2;INDEX(Dochadzka;;POZVYHLEDAT($A$1;$E$18:$M$18;0));NEPŘÍMÝ.ODKAZ($A3)&"*"));"OK";"NOK")
A čo ak by to bol jednoduchý PQ dotaz?
To by ma zaujímalo ako sa dá zistiť, že dnes na riadku 15 výraz "Praha 10" znamená "Praha 10", a zajtra na riadku 15 bude výraz "Praha 4" znamenať "Praha 10"
Alebo inak, že výraz "Praha 4" na riadku 50 znamená vlastne "Praha 10" a má byť na riadku 15 medzi ostatnými "Praha 10" ale zapísaný ako "Praha 4".
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.