Záleží, čo sa vložením riadku myslí . Pokiaľ je to tak, ako to chápem ja, tak stačí stáť v liste 1, pri zmačknutej klávese CTRL (prípadne SHIFT, pokiaľ je záložka listu 2 hneď vedľa záložky listu 1) kliknúť na záložku listu 2 a vložiť riadok. Vloží sa súčasne do oboch listov. Nesmieš ale zabudnúť na konci danú skupinu listov oddeliť, kliknutím na záložku iného listu.
nejdřív jsem zvolila ten rozšířený filtr, ale tam bylo taky potřeba výpočet těch vzorců (Kritérium) a samotný filtr se dlouho načítal, takže jsem od toho upustila Tu robíš niečo špatne, kritérium sú iba 2 bunky, t.j. hlavička + vzorec. A ten rozšírený filter pracuje rýchlo, skúsil som to na sade 1038 záznamov a žiadny problém s rýchlosťou...
tak ešte inak, k tým textom. Stačí, aby si si stĺpce A a B sformátovala ako text, a vo výstupe Query budeš vidieť okrem čísel i texty.
Vypisuje to jen čísla, text ne.
V uvedenom príklade to bolo len s číslami, takže Query pracuje s datovým typom poľa číslo. Pokiaľ to chceš na texty, tak si musíš rovnakým postupom vytvoriť query nové. Vytvor si nové query, pokiaľ si pochopila princíp, a uvidíš, že to funguje...
Šlo by to udělat tak, že by tam nebyli nadpisy SLPEC atd .nešlo, query potrebuje názov stĺpca (poľa), nemusí to byť zrovna názov STLPEC_1 ale nejaký názov to byť musí.
Viac neporadím, snaž sa sama
edit: V mojom príklade na query som použil čísla, a program si to prebral, že datavý typ poľa je číslo. Ako som povedal, vytvor si uvedeným spôsobom svoje vlastné guery na záznamy s textami a bude to fungovať, neboj.
Věřil bych, že to zvládnete sám, ale dobrá, zkusím něco vymyslet ;)
Kluci, toto ma zaujíma, ešte som sa k tomu nedostal, ale budem potrebovať to poriešiť. Tak pokiaľ by ste mali príklad funkčného kódu, ako porovnávať verzie doplnku na lokálnom disku voči serveru, tak budem naozaj vďačný. Inak by som to musel napísať sám a pokiaľ niečo hotové existuje, tak mi ušetríte čas
Všimla jsem si ještě, že zapsaná data do tabulky záznam smažou vše co přiléhá k nově vytvořené oblasti - písal som, makro vždy vytvorí celý zoznam znovu, pred jeho vytvorením zmaže pôvodne vytvorený, to sa deje v časti Set myRng = Sheets("ZAZNAM").[A9].CurrentRegion
With myRng
If .Rows.Count > 1 Then
Set myRng = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count)
myRng.ClearContents
End If
End Witha pokud není na listu leden ani jeden znkak, který se má přepsat do záznamu, skončí spuštění makra chybou. Je možné ošetriť, miestoSheets("ZAZNAM").[A10].Resize(UBound(myArray, 2) + 1, UBound(myArray, 1) + 1) = WorksheetFunction.Transpose(myArray)napísať: Select Case Not myArray
Case -1:
Case Else: Sheets("ZAZNAM").[A10].Resize(UBound(myArray, 2) + 1, UBound(myArray, 1) + 1) = WorksheetFunction.Transpose(myArray)
End SelectŠlo by to ještě upravit tak, že pokud bych měla více listů leden, únor, březen atd.. Tak, ako to je napísané, to pre daný prípad fungovať nebude, muselo by sa to prepísať. Bez nároku na odmenu ale riešim iba záležitosti, ktoré mi nezaberú viac, než hodinu času, takže doporučím vhodnejší prístup, ktorý nebude znamenať dramatickú úpravu makra, ktorú by si mohla zvládnuť, sama (písala si, že stačí nakopnúť, nie že to má niekto tvoriť celé za Teba). K zmienenej úprave: Nedoporučujem vytvárať samostatný list pre každý mesiac zvlášť. Miesto toho, zapisuj dáta za všetky mesiace do jednoho listu pod seba, akurát pridaj stĺpec s názvom mesiaca, ktorého sa záznam týka. Na liste výstup si tiež pridaj jeden stĺpec pre názov mesiaca. Prvý rozmer poľa myArray zvýš o jedna, t.j. miesto ReDim Preserve myArray(3, i) do kódu napíš ReDim Preserve myArray(4, i) kde do myArray(4, i) načítaj príslušnú bunku s názvom mesiaca. Podmienku v časti If .Offset(0, 3) = "C" Then
If .Offset(-1, 3) <> "C" Thenbudeš musieť ešte rozšíriť o test, či riadok X a riadok X-1 sa týka rovnakého mesiaca. Kód bude naďalej generovať vždy celý zoznam odznova za všetky mesiace.
a také nerozumím poslední části kódu od Sheets("Zaznam").[A10] - to je práve problém, že nerozumieš. Vtip je totiž v tom, že záznamy sú prvotne z Listu LEDEN ukladané v cykle do poľa myArray a až potom, čo je pole naplnené, tak je jeho obsah vložený do oblasti buniek, ktorá musí byť rovnakého rozsahu (rozmeru) ako uvedené pole. Ten rozsah buniek, kam sa má obsah poľa preniesť, sa deje práve cez inštrukciu:Sheets("ZAZNAM").[A10].Resize(UBound(myArray, 2) + 1, UBound(myArray, 1) + 1)
A taky tomu proč te tam Loop co to dělá? Ukončuje cyklus (vracia na jeho začiatok); začiatok cyklu je v tomto prípade slovo Do [While].
Nebolo mojim úmyslom v tomto príspevku motať Ti hlavu, ale je mi jasné, že chaos v tom mať budeš. Chce to študovať. Mňa zmiatla Tvoja poznámka úvodom:Ráda bych to vyřešila VBA makrem, které budu spouštět přes tlačítko poté co vyplním list, ale už nad tím dumám týden a nic mě nenapadá. Mal som za to, že VBA trochu ovládaš, ale pokiaľ nevieš, čo znamená Loop tak je pred Tebou ešte dlhá cesta
Pokiaľ by som to mal riešiť ja, tak by som použil MS Query. Príklad dotazu i s prinscreenom, ako to urobiť cez MS Query máš v prílohe spolu s obrázkom vlastností pripojenia. Tento súbor by som používal ako master a makrom (alebo ručne) doňho vždy nakopíroval dáta z jednoho z 20 súborov. Refreshom potom v stĺpci C získaš požadovaný výstup (data zo stĺpca A, ktoré nie sú v stĺpci B). V stĺpci A som ich pre názornosť zvýraznil žltou farbou. Spracovanie query trvá cca sekundu. SQL je násobne rýchlešie čo sa týka spracovania dát, než VBA. Keď, tak pozri do prílohy...
Súbor z archívu ulož niekam na lokál, než povolíš datové pripojenia tak zmeň vo vlastnostiach pripojenia cestu a názov súboru v pripojovacom reťazci a v texte príkazu v dialógovom okne vlastnosti pripojenia a až následne aktualizuj datové pripojenia (súbor odkazuje sám na seba). Prípadné chybové hlášky ignoruj, mala by si to rozchodiť i v prípade chybových hlášok. Prípadne si vygoogluj niečo k MS Query a skús to pochopiť, následne si dotaz môžeš vytvoriť sama, nie je rozhodne na škodu tento nástroj zvládať.
Dívala jsem se na nějaké články na internetu a návody a vypadá to, že se tam taky dá dělat dost věcí. Samozrejme, dá. VBA je mocný nástroj. Ale je potrebné ho zvládať, keď ho chceš používať.
K záznamu makra: Môžeš to vyskúšať. Potom, čo zapneš záznamník makra, budeš musieť vytvoriť vzorec s kritériom. Na to, aby makro fungovalo spoľahlivo v jednotlivých súboroch, ale so záznamníkom v tomto prípade nevystačíš. Rozsahy filtrovaných položiek a argumenty vo vzorci pre kritérium totiž budeš musieť pre jednotlivé súbory vymedzovať dynamicky a to bohužiaľ záznamník makra nedokáže. Však uvidíš. Nemám v úmysle ťa od toho zradzovať, ale buď pripravená na to, že to nebude pri tvojich znalostiach tak jednoduché, ako pravdepodobne čakáš... Základ kódu získaný záznamníkom makra je skutočne iba kostra, na to, aby si to mohla aplikovať pre rôzne datové rozsahy v stĺpcoch A a B si to budeš musieť dotvoriť. Nič zložité, ale nejaké malé znalosti to predsa len už vyžaduje a tie pmn zatiaľ nemáš. Mimochodom, záznamník určite nezaznamená to, aby sa filter spustil pri otvorení súboru, to budeš musieť tiež dopísať ručne ale to už je len detail, páč to je v podstate na jeden riadok. Tak skús a uvidíš, čo zvládneš
Teď je to ale kvůli tomu strašně pomalé a nedá se v tom skoro pracovat - takže ve výsledku jsem si práci stejně neušetřila Áno, to je nevýhoda maticových vzorcov. Radil som použiť rozšírený filter, ale ty si nechcela. Alternatívne sa dá použiť SQL: Left Join buď v MS query alebo Access. Spracovanie tisícov záznamov nie je pre databázový dotaz žiadny problém, ale zopakujem znovu, že človek má používať to, čomu rozumie.
.Characters(Start:=1, Length:=Len(ActiveCell)).Font.FontStyle = "Bold"
.Characters(Start:=InStr(1, ActiveCell, "až"), Length:=2).Font.FontStyle = "Italic"
Tučné a kurzíva mi nefungovalo, ale je možné že na CZ/SK exceloch funguje
V danej bunke by musela byť hodnota (reťazec), nie vzorec. A reťazec sa dá potom sformátovať, aby čísla v ňom boli boldom. Oboje, t.j. prevod vzorca na hodnotu i sformátovanie číselných znakov tučne by šlo makrom, žiadnou funkciou či nejakým vlastným formátom priamo v Exceli to bohužiaľ nepôjde. Časti reťazca síce môžeš sformátovať manuálne v riadku vzorcov, ale musí sa jednať o hodnoty (reťazce), nie vzorce.
V tomto prípade sa nebude jednať o formát, ale o funkciu TEXT (česky HODNOTA.NA.TEXT ):=TEXT(A1/A2; "0,00") & " až " & TEXT(B1/B2; "0,00")
Sub Zapis()
Dim cell As Range, srcSh As Worksheet
Set srcSh = Sheets("Zdroj")
Set cell = Sheets("cíl").[a1].End(xlDown).Offset(1, 0)
With cell
.Value = Format(cell.Row - 1, "000")
.NumberFormat = "@"
End With
With srcSh
cell.Offset(0, 1) = .[B1]
cell.Offset(0, 2) = .[B2]
.[B1:B2].ClearContents
End With
Set cell = Nothing
Set srcSh = Nothing
End Sub
Počet záznamov v bunke B9 na liste zdroj vzorcom:=COUNTA(cíl!A:A)-1
Ukladám link a niekedy koncom tohto/začiatkom budúceho týžďňa preštudujem. V prípade nejakých nejasností sa ozvem. Díky, Palooo.
Opakujem, že človek by mal používať to, čomu rozumie. Ale keď inak nedáš, v prílohe posielam riešenie cez vzorec. Za prvé, budeš si musieť v každom z 20 súborov i tak nastaviť rozsahy. Za druhé, pochybujem, že vzorcu v žltých bunkách porozumieš, dopredu však upozorňujem, že jeho logiku vysvetľovať nebudem
edit:
Prípadne, aby si rozsahy v jednotlivých 20 súboroch upravovať nemusela, tak maticový vzorec v C2 predpokladajúci riadky do 100, inak ešte musíš jednorázovo rozsahy zmeniť a pochopiteľne v prípade potreby si i preložiť do češtiny (IF=KDYŽ, ROW=ŘÁDEK):=IFERROR(INDEX($A$2:$A$100; SMALL(IF(COUNTIF($B$2:$B$100; ""&$A$2:$A$100)=0;ROW($A$2:$A$100)-1);ROW()-1));"") nakopírovať dolu.
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.