Makro riešenie na KT-only
Sub Export_KT_do_XLSX()
Dim WB As Workbook
Set WB = Workbooks.Add
ThisWorkbook.Worksheets("přehled").PivotTables("Kontingenční tabulka1").TableRange2.Copy 'kopíruj oblast KT
With WB.Worksheets(1).Cells(1, 1)
.PasteSpecial xlPasteColumnWidths 'přilepit šířky sloupců
.PasteSpecial xlPasteValues 'přilepit hodnoty
.PasteSpecial xlPasteFormats 'přilepit formáty
.Select
End With
Application.CutCopyMode = False
WB.SaveAs ThisWorkbook.Path & "\přehled-export.xlsx", xlOpenXMLWorkbook 'uložit soubor XLSX
WB.Close False
Set WB = Nothing
End SubSub Export_KT_do_CSV()
Dim S As Integer, R As Long, i As Long, y As Long, Sirky() As Double, T As String
Const DELIMITER = ";"
With ThisWorkbook.Worksheets("přehled").PivotTables("Kontingenční tabulka1").TableRange2 'pro oblast KT
S = .Columns.Count
R = .Rows.Count
ReDim Sirky(1 To S)
For i = 1 To S 'odložit původní šířky KT sloupců
Sirky(i) = .Columns(i).ColumnWidth
Next i
.EntireColumn.AutoFit 'upravit šířky na zobrazení celých hodnot
For i = 1 To R
For y = 1 To S
T = T & IIf(y > 1, DELIMITER, "") & .Cells(i, y).Text 'poskládej výsledné zobrazení v buňkách jako text
Next y
T = T & vbNewLine
Next i
For i = 1 To S 'vrátit původní šířky KT sloupců
.Columns(i).ColumnWidth = Sirky(i)
Next i
End With
S = FreeFile
Open ThisWorkbook.Path & "\přehled-export.csv" For Output As #S
Print #S, T 'zápis textového souboru CSV
Close #S
End Sub
Ak by mohla byť tá "palička" znak "|" čiže CHAR(124) čiže pravý Alt+W, tak to ide. Optický rozdiel je skutočne minimálny, len rozhodujúce bude, čo sa s tým configom potom deje. Číta ho nejaký automat, ktorý je nastavený na Vašu "paličku", ktorá má úplne iný kód (pre VBA neprekusnuteľný)?
A preniesli ste si aj ten definovaný názov
CELY_ROK, ktorý odkazuje na
=List2!$B$2:$NC$3???
A musel som Vám nahradiť vzorec v C3 za takýto
=DATE(B3;MATCH(A3;List3!A1:A12;0);1)
=DATUM(B3;POZVYHLEDAT(A3;List3!A1:A12;0);1)
lebo v inom ako v CZ Exceli sa výraz
DATEVALUE("1-Leden-2022")
DATUMHODN("1-Leden-2022")na dátum 1.1.2022 neprevedie.
Upravil som Vám aj posledné vzorce v mesiaci aj v roku, aby to zohľadnilo február a rozdielnosť počtu dní.
Môžete uviesť prílohu?
Takto?
+- autobus ...
Najlepšie je vždy priložiť prílohu. Tu je nejaký príklad HLOOKUP/VVYHLEDAT
Sorry, včera sa to poriadne pretiahlo. Nestihol som. Teraz ráno som to ešte trochu prerobil, len už nestíham, a neviem či som správne zeditoval všetky popisy. Dajte vedieť. Riešené pomocou kolekcií. Aj jedinečnosť aj vzostupné zoradenie. Na počet a súčet klasická WorksheetsFunction.
Mam to vlastne hotove, len mi tam este 1 chybku hodilo, a uz nemam cas to debugovat. Pridem mozno o 3-4 hodky. Tak ak to sem nikto zatial neda, tak no problem.
Prvý riadok uvádzam variant do SK Excelu, a druhý riadok uvádzam variant do CZ Excelu. Niektoré krajiny majú niektoré funkcie preložené (nie všetky, čo vidieť aj v tomto prípade - ISEVEN nie je do CZ preložený). Ja sa takto snažím uvádzať vzorce vždy.
Inak napadlo ma aj nematicové riešenie, teda zadávané obyčajným Enter
=INDEX(C2:H2;LOOKUP(2;1/(ISODD(COLUMN(C2:H2))*(C2:H2=MIN(IF(ISODD(COLUMN(C2:H2));C2:H2;FALSE))));COLUMN(C2:H2)-1))
=INDEX(C2:H2;VYHLEDAT(2;1/(ISODD(SLOUPEC(C2:H2))*(C2:H2=MIN(KDYŽ(ISODD(SLOUPEC(C2:H2));C2:H2;NEPRAVDA))));SLOUPEC(C2:H2)-1))
Iba +1 som zabudol dať na konci - doplnil som do predošlého príspevku. Na môj príklad, kde sú dáta od B. Vy máte dáta od C, teda nie párny ale nepárny stĺpec, a preto len zmena z ISEVEN na ISODD:
=INDEX(C2:H2;MATCH(1;ISODD(COLUMN(C2:H2))*(C2:H2=MIN(IF(ISODD(COLUMN(C2:H2));C2:H2;FALSE)));0)+1)
=INDEX(C2:H2;POZVYHLEDAT(1;ISODD(SLOUPEC(C2:H2))*(C2:H2=MIN(KDYŽ(ISODD(SLOUPEC(C2:H2));C2:H2;NEPRAVDA)));0)+1)
Uveďte prílohu, záleží na párnosti čísla stĺpca (maticový vzorec Ctrl+Shift+Enter)
=INDEX(B2:G2;MATCH(1;ISEVEN(COLUMN(B2:G2))*(B2:G2=MIN(IF(ISEVEN(COLUMN(B2:G2));B2:G2;FALSE)));0)+1)
=INDEX(B2:G2;POZVYHLEDAT(1;ISEVEN(SLOUPEC(B2:G2))*(B2:G2=MIN(KDYŽ(ISEVEN(SLOUPEC(B2:G2));B2:G2;NEPRAVDA)));0)+1)
Aha, OK.
Počet riadkov sa dá riešiť niekoľkými spôsobmi:
a) dostatočným predimenzovaním vzorcov
b) použitím Tabuľky (to nie je prípad listov Y,X,Delus, lebo v nich sú závislé dáta)
c) natiahnutím vzorcov v makre na presnú veľkosť
d) použitím PowerQuery dotazu, ktorý vytvorí aktuálny výsledok (nebudú tam vzorce ale dáta), obnovuje sa cez Údaje - Obnoviť všetko, alebo toto obnovenie vyvolá makro na svojom konci.
e) samotné makro vyrobí presne veľký výsledok (teda nebudú tam vzorce ale dáta)
0 sa dajú skryť predsa priamo v tých vzorcoch pomocou IF/KDYŽ a "", alebo pomocou Podmieneného formátu "General;General;;@", alebo filtrom
Vy tie listy X a Y potrebujete, alebo ide iba o pomôcku pre list Delus?
O čo vlastne ide v tých listoch? O to aby ste v Delus zoradili za sebou najskôr upravené dáta ako v liste Y a hneď za nimi upravené dáta ako v X (teda bez "prázdnych"/"nulových" riadkov)? Je možné tie medzivýpočty v listoch vynechať a zapísať rovno hodnoty do Delus (či už makrom alebo PQ)?
Tie vždy nové dáta, ktoré kopírujete do "Vložení dat", to máte nejaký súbor exportu z nejakého SW, a ten si otvoríte a prekopírujete celé dáta? Tie dáta v tom súbore majú na začiatku aj tie "Výrobní dávka" a pod. čo sú na riadkoch 1 a 2?
A napadajú ma stále nejaké otázky, ktoré sú rozhodujúce pre návrh riešenia. Napr.:
Vy tie údaje potom ešte nejako upravujete/dopisujete v liste "Vložení dat"?
Ak áno, tak je potrebná kompletná aktualizácia po každej zmene, alebo pri kliknutí na tlačítko?
Sú dáta zoradené/zoskupené na "Y" a "X" alebo pomiešané?
Tu máte jednu z možností - kompletne spracované makrom - teda žiadne vzorce.
??? Tie listy "X", "Y", "Delus" sú predsa celé zle.
Ako viete, že budete mať nových dát zrovna po riadok 175 (teda 174 dátových) ?
V Delus majú byť pod sebou Y a X ? tak prečo sa z Y ťahá iba 99 riadkov a z X iba 100 riadkov, keď Y aj X sú nastavené na 174 riadkov?
Viete prečo máte v stĺpcoch:
Přední hrana - Tloušťka
Zadní hrana - Tloušťka
Levá hrana - Tloušťka
Pravá hrana - Tloušťka
samé 0 ? Lebo hľadáte napr. RIGHT('Vložení dat'!$J4;2)="45" a to nikdy nenastane, lebo dáta v zdrojových stĺpcoch tak nekončia. Majú tam ešte predsa veličinu "mm" napr
HD 241145 - ABS dub gravír 22x0,45mm
Tie 3 listy by sa mali plniť buď makrom alebo PowerQuery, obe si dokážu tie stĺpce dopočítať do Vami požadovaného tvaru.
Ja už to mám zhruba pre Vás aj prichystané, aj som rátal s číslami pomedzi, čakám len na ten rozsah
Takže to má reagovať na zmenu od 4. riadku (vrátane) ? Alebo má reagovať a odstraňovať diakritiku aj z riadkov 1-3 (kde 3. je hlavička dát)
Ak áno, tak ďalej od bunky A4 ľubovoľný počet riadkov a ľubovoľný počet stĺpcov ?
EDIT:
Tu máte zatiaľ nastrelenú prípravu.
Oblasť prevodu je nastavená konštantou na A4:BA10000
Na oddelenie čísel, riadkov, stĺpcov som použil tieto znaky "|", "¤", "•" v konštantách. Treba použiť také paznaky, ktoré sa v texte vyskytovať nebudú.
Uvádzam, že ako výkonnú časť makra som použil riešenie od eLCHa. Doprogramoval som len obslužnú časť.
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.