Ak sa to chce niekomu rozpitvávať, tak UndoHandler :
http://www.jkp-ads.com/Download.asp#UndoHandler
Je ale potrebné dopredu vedieť čo sa bude meniť. Ak to nevieme, tak musíme v OnChange, odložiť nové hodnoty po zmene, urobiť Undo (rovno v OnChange to ide), zistiť čo bolo pred zmenou (vieme ktoré bunky sa menili), a aplikovať tie odložené nové hodnoty do UndoHandler-u. Všetko z tej OnChange.
Nič jednoduché to teda nieje. Navyše treba UndoHandler ešte dosť prispôsobiť svojím potrebám. Ale takto ako je tam naprogramovaný funguje - sfunkční šípky Undo+Redo na vybrané druhy zmien.
No a teraz sa pripravte na totálny HardCore vzorec (maticový). Nechal som tam aj stĺpce, v ktorých som si najskôr rátal potrebné veci, aby bolo vidno, ako som sa k tej ozrute dopracoval. Teda:
-pozícia "číslo-číslo"
-posledné slovo
-ako hľadať prvé nečíslo
-skrátiť reťazec pred prvé nečíslo (alebo koniec) za nájdeným "číslo-číslo"
-No a Výsledok, je len podopĺňanie sa navzájom
Žiadne stĺpce okrem zdroju a výsledku nieje potrebné nechávať, to je len na ukážku.
Je to fakt brutalita... ALE (!) :
-nájde všetko čo môžete chcieť
-akonáhle je tam "číslo pomlčka číslo" tak ho nájde
-na začiatku
-na konci
-v prostriedku
-rôzny počet čísel pred pomlčkou
-rôzny počet čísel za pomlčkou
-kombinácie uvedených vecí
Na mojich testoch to našlo čo potrebujete. Len si neviem predstaviť výpočet na 10K riadkoch. Otestujte.
PS: Určite by to šlo upraviť na znesiteľnejšiu dĺžku, ale som rád, že som sa dopracoval konca aspoň takto.
=ABS(A4-A3)
Vložiť do B3, a nakopírovať po B1001. V B2 nič nebude, lebo nemá čo odčítať z predošlého riadku, keďže žiaden predošlý nieje. Ak potrebujete aj záporné hodnoty výsledku, tak bez toho ABS().
PS: Stále som neprišiel na to, ako Vám sfunkčniť to FREQUENCY().
Ak by bol všade zápis : 2 čísla pomlčka 3 čísla
nieje problém použiť zástupné znaky:
=IFERROR(MID(A1;SEARCH("??-???";A1);6);"")
čiže vynechá : písmená pomlčka písmená
Áno, problém robí práve to overenie dát. Zrušil som ho, a nahradil bezproblémovou podmienkou.
Prosím vyskúšajte funkčnosť, a či sa zapisujú tie firmy (aj vyplnené aj nevyplnené) tak ako majú, alebo to treba upraviť. Práve sa mi už nechce rozmýšľať nad tým, čo som napísal ja, a čo Vy
Z Vašeho popisu mi vychádza, že vy nepotrebujete tie súbory otvárať, ani importovať pre zobrazenie. Vy potrebujete na tých súboroch iba urobiť presne stanovené výpočty, a iba konečné výsledky týchto výpočtov zobraziť.
Nastavil som to tak, že v adresári s týmto zošitom sa musí nachádzať podadresár "CSV", v ktorom sú všetky *.csv súbory. V tomto zošite som vytvoril nový list "Final", kde sa nakoniec uložia výsledky vo Vami požadovanej forme (názov súbor a súčet).
Testoval som to na 50000 kópiách csv súboru, ktorého náhľad ste poslal. U mňa to pracuje 11,2 sekundy.
Makro má nastavenú klávesovú skratku Ctrl+M. Prípadne si ho nastavte na nejaké tlačítko.
PS: Ak Vám nejde nahrať príloha, tak ju zabaľte do RAR alebo ZIP.
1. Chýba Vám tam "End If" - nezkopírovali ste to poriadne.
2. Odstránil som Vám tam zbytočné neustále adresovanie Sheetov, selektovanie, odomykanie... Otestujte to.
3. Nerozumiem ale tomu, prečo sa má zapisovať aj firma, v ktorej nič nevyplníte do evidencie ? To ste mal asi na mysli tým, že sa Vám zapisuje iba dátum (to je inak zmenené dátum + čas). To by sa malo ošetriť podmienkou ešte.
Navrhoval by som riešenie od pepe74287
http://wall.cz/index.php?m=topic&id=24292&page=1#post-24295
skombinovať so vzorcom čo som Vám dal do tabuľky. Žiaľ mne sa to nedarí funkčne skombinovať. Niekto iný Vám to snáď bude vedieť urobiť ...
EDIT: Najnovšia verzia :
List3 na 4 riadky
List4 na 3 riadky
Všimol som si, že 4. riadok odspodu v List1 máte hodnotu ako DÁTUM ! Pretože je tam 19.2 namiesto 19,2 (bodka/čiarka). To robí galibu pri kopírovaní.
Iba toto
If Not IsEmpty(Bunka) Then .Value = Bunka.Offset(0, 1).Value 'Ak zmenu nevyvolalo vymazávanie, tak zapíš hodnotu z bunky vpravo od zmenenej
zmeňte na toto:
If Not IsEmpty(Bunka) Then
.Value = Bunka.Offset(0, 1).Value 'Ak zmenu nevyvolalo vymazávanie, tak zapíš hodnotu z bunky vpravo od zmenenej
.Offset(0, 1).Value = Date 'a pripíš aktuálny dátum
End If
Nie som uz pri Pc a na zajtra mam uz asi plan, ale tak narychlo z tabletu:
Urobte si napr dalsi prepinac2, a riadok so zapisom Today do bunky. obdobne ako sme to roboli doteraz. Z tablet a v polospanku vam nedokazem pomoct. Jedina zajtra ked budem ready, a inak ste to mohli supnut tam kde sme riesili tento problem 1x.
TO by som určite do prevádzky bez vyskúšania na konkrétnej tlačiarni nerobil. Každá tlačiareň má iné nastavenie. Ak dáte 600 dpi a tlačiareň bude na 300, bude stránka sploštená, treba nastaviť okraje na konkrétny typ tlačiarne a obsahu dokumentu. Napr. moja tlačiareň potrebuje vľavo, vpravo 0,5 cm, dole 1,2 cm (netlačiteľný okraj). Nevieme či má Vaša tlačiareň podávač na tie lístky A6, alebo budú vsúvané do podávača na A4 do rohu (alebo inde). Na ležato, na stojato. Ak na A4 a potom strihať/rezať, tak skúsiť dať 4 stránky na 1 A4, ... Neviem, ako to urobiť na konkrétne zariadenie, bez toho zariadenia, a bez vizuálneho výsledku a vizuálnych požiadaviek.
EDIT: V hore uvedenom kóde ak nastavím Landscape, tak je každý list na 1 stránku, ale ak dám Portrait, tak je na 1 stránku iba prvý list, ostatné sú na 2 stránky. Bez ohľadu na 300 či 600 dpi.
No ja som to samozrejme čítal. Dal som to tak do pľacu pre všetkých na nejaký ten pokus, pretože mne to vytlačí na normálnej tlačiarni, ale ak to dám do PDF cez PDFCreator, tak mi to neviem prečo rozdelí na jedno PDF prvý list, a ostatné listy do druhého PDF. Preto som to dal na vyskúšanie ostatným.
PS: Pre tých čo to nepoznajú, tak PDFCreator je vyrtuálna tlačiareň do PDF. Tvári sa ako tlačiareň, ale pritom ukladá to čo chcete vytlačiť do PDF. Je to dobré na pokusy bez nákladov... Export do PDF je niečo iné.
Treba vyskúšať:
Sub Tlac()
' tisk tiskárna
Dim ws As Worksheet
For Each ws In ActiveWindow.SelectedSheets
Application.PrintCommunication = True
ws.PageSetup.PrintArea = "$A$1:$BC$38"
Application.PrintCommunication = False
With ws.PageSetup
.PaperSize = 70
.Orientation = xlPortrait
.BlackAndWhite = True
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintQuality = 600
End With
Next ws
Application.PrintCommunication = True
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End Sub
Týmto finančným veciam vôbec nerozumiem, ale keď pozerám na tie vzorce, hneď ma napadá:
-Vo všetkých listoch sa v stĺpci D počíta s tým, že sa začína 1. Januára, neznámeho roku. Každý riadok sa vkladá počet dní mesiaca. No ale keď to má byť také presné, tak nemôžeme opomenúť na 29 dňový február, a vysokú pravdepodobnosť, že sa úver nebude čerpať presne od 1.1.XXXX.
-V poslednom liste je už počítané stále iba s 30 dňami.
To je len taká poznámka, pretože fakt netuším, ako tieto finančné výpočty fungujú, možno to tak proste má byť. A makrom by sa takáto tabuľka snáď dala vytvoriť
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.