Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  75 76 77 78 79 80 81 82 83   další » ... 140

@elninoslov
s tím nejnovějším datem je to dobrý nápad
zběžně jsem koukal na Váš kód - jak píšete chce to ještě doladit
používáte fso pro zjištění nejnovějšího souboru - tady to není potřeba, stačí použít Dir + FileDateTime

Dal jsem si ranní rozcvičku

Pokud si uvědomíme, že csv je textový soubor, pro načtení dat bych naopak fso použil - stejně jako u Vás soubor není třeba otevřít, nevytvářím žádný dočasný list ale hlavně dodržuji zásadu co nejmenšího počtu přístupů na list - vše dělám v kódu a to jej značně zrychluje. Na list tak přistupuji pouze 2x - mazání starých dat a zápis nových (přímo do tabulky)
Ve Vašem kódu navíc něco způsobuje resize tabulky (rozšířil jsem ji o 3 sloupce a stále se vrací na 7)

Bohužel se mi nepovedlo (zatím) vymyslet, jak to udělat v jednom cyklu, proto jsem musel jet cykly 2 a využít dočasné pole.

V csv souboru jsem přidal záhlaví (které předpokládám) a rozšířil ho na 142831 řádků a 4 sloupce. Myslel jsem si že budu kvůli druhému cyklu delší než Vy, ale zas tak hrozné to není - můj kód jel 16s a Váš 13. Pokud by v něm byly další listy se vzorci, bude se to patrně přiklánět na stranu mého řešení.

Neberte jako kritiku, ale jako diskusi ;)

Sub subImportCSV()
Dim sFileTemp As String
sFileTemp = Dir(ThisWorkbook.Path & "\*.csv")

Dim sFile As String, dFileTime As Date
While Not sFileTemp = vbNullString
If FileDateTime(ThisWorkbook.Path & "\" & sFileTemp) > dFileTime Then
sFile = ThisWorkbook.Path & "\" & sFileTemp
End If
sFileTemp = Dir
Wend

If Not sFile = vbNullString Then
Dim vValuesTemp() As Variant
ReDim vValuesTemp(0)

With CreateObject("Scripting.FileSystemObject").OpenTextFile(sFile)
.ReadLine 'záhlaví

While Not .AtEndOfStream
If Not IsEmpty(vValuesTemp(0)) Then
ReDim Preserve vValuesTemp(UBound(vValuesTemp) + 1)
End If
vValuesTemp(UBound(vValuesTemp)) = Split(.ReadLine, ";")
Wend
.Close
End With 'CreateObject("Scripting.FileSystemObject").OpenTextFile(sFile)

Dim vValues() As Variant
ReDim vValues(UBound(vValuesTemp), UBound(vValuesTemp(0)))
Dim i As Long, j As Long
For i = 0 To UBound(vValues, 1)
For j = 0 To UBound(vValues, 2)
vValues(i, j) = vValuesTemp(i)(j)
Next j
Next i

With ActiveSheet.ListObjects("DataTab").DataBodyRange
If .Rows.Count > 1 Then
.Offset(1, 0).EntireRow.Delete
End If
.Cells(1).Resize(UBound(vValues, 1) + 1, UBound(vValues, 2) + 1).Value = vValues

End With 'ActiveSheet.ListObjects("DataTab").DataBodyRange
Else
MsgBox ("Neexistuje žiadny .csv súbor.")
End If
End Sub

@AL
už je to bezpředmětné, ale řekl bych, že ze 100 uživatelů
50 nepoužívá tabulku (excel-table)
30 používá, ale je ani nenapadne, že se to dá vypnout
10 si řekne, že to možná jde, ale nikde to nevidí, tak se nakonec připojí k těm 30
5 si řekne, že to určitě jde, ale nenajdou, bo je to fakt dobře schované
a těch chytrých 5 co to najde si zase řeknou, že snadnější než to vypnout je převést tabulku zpět na rozsah a pro další tabulku si to nechat zapnuté ;))

Něco budete mít v tabulce špatně, protože tento krok
Zkopíruji vzorce do všech řádků
by za Vás měl udělat excel rovnou při vložení nových dat...
Jak jsem psal - pokud je tabulka správně připravená - o formáty a vzorce se starat nemusíte.
Pokud je třeba oprava vzorce, můžete ji provést ve kterémkoliv řádku a vzorce se opraví v celém sloupci

Asi by bylo třeba ten soubor vidět, protože takhle se bavíme teoreticky (i v sousedním vlákně). Pokud řešíte 25k řádků, tak to by pro běžný počítač neměl být problém. Já mám soubor 138k řádků 20sloupců (z toho 12 vzorcových) + 4x KT = 20MB - jede to pomaleji, ale dělám s tím 1x měsíčně, takže mi to nevadí. Takže by mě zajímalo, co tam máte, že Vám to tak bobtná a brzdí.
Pokud ale s tím nejde nic dělat, dal bych např. KT nebo nějaké občasné výstupy, které obsahují vzorce do jiného sešitu nebo možná lépe čistě do kódu a vždy je vytvořil jen když je potřebuju (pod tlačítko) - tzn by se vůbec se sešitem neukládaly.

Mno, to si nejsem tak docela jistý. Píšete
to je při vyšším počtu řádků a s tím souvisejícími vzorci docela pomalé.
takže jste asi nepochopil. Nebo je pro Vás (když to přeženu) 5s ekvivalent pro pomalé....

Mno - pokud tomu rozumím, řešení je jednoduché:

1. odstraňte všechny řádky datové oblasti tabulky kromě prvního (aby zůstaly vzorce a formátování) - zůstane záhlaví a jeden řádek dat.
2. Označte data, která chcete vložit a nastavte kopírování (CTRL+C nebo jak jste zvyklý)
3. Vložte kurzor na první buňku jediného řádku datové oblasti, klepněte pravé tlačítko - zvolte vložit jinak-hodnoty.

Tabulka se opět rozšíří a nejsou v ní zbytečné řádky

Tabulka se vkládá na kartě Vložení - Vložit Tabulku (hned vedle kontingenční tabulky)
Označíte si oblast, kterou chcete převést na tabulku a klepnete na to tlačítko ;)

Pokud chcete přidat data, vložíte je o řádek pod tabulku a ona se automaticky rozšíří (včetně formátů, vzorců..)
Takže nepotřebujete dynamicky pojmenovanou oblast.
Do KT jako zdroj dat vložíte název tabulky a máte postaráno.

@kmarecek
soudím tak podle toho, že na obrázku vypadá ten kalendář stejně jako ten váš
pokud něco stáhnete z internetu, bylo by slušné dát odkaz a nevydávat to za své dílo - navíc nedotažené

http://excelplus.net/doplnek-kalendar/

nejprve soubor uložilo, provedlo akci a znovu uložilo
To by mně vážně zajímalo, k čemu slouží to první uložení...

Mno - myslím, že to víte, ale stejně to napíšu (spíše pro ostatní) - převeďte zdrojovou oblast na tabulku, přizpůsobte vzorec v pomocném sloupci (jste schopný si jej vymyslet sám) a máte to bezúdržbové.

Bohužel, toto zcela automaticky v KT asi neuděláte (mám E2007, možná v novějších verzích tato možnost existuje, ale nemyslím si to) - funguje zde hierarchie a tak nejdříve musíte řadit podle kódu a až pak podle názvu. Takže pro automatiku = prohodit, což asi nechcete.

Napadají mne dvě možnosti - pro tento konkrétní případ -
1) "ručně" vytvořit vlastní seznam (452008;590/2009;1542008;4182008 A;262008) a řadit podle něj
2) "ručně" přetahovat.

Obojí bude fungovat pouze za předpokladu, že jeden kód=jeden název.

Ručně berte z rezervou - máte v tom souboru už kód, tzn lze řešit pomocí VBA - obě varianty - ani jeden kód nebude složitý

Ohledně druhého dotazu - bohužel (zase mluvím za 2007 a starší) staré záznamy v KT zůstávají. Opět ale platí, že když už máte v souboru kód, tak to pro Vás není problém - přidejte si do projektu proceduru (v rychlosti jsem našel např.: http://www.vbaexpress.com/kb/getarticle.php?kb_id=930 - nejdříve otestujte, popřípadě dohledejte funkční) a vložte na konec procedury Aktualizace_ALL_konti

To nevíme, jestli víme. Pokud chcete vědět, jak zjistíme, jestli to víme, tak to Vám povím. Vložte přílohu, která není obrázek, ale soubor s KT... ;)

Mno - SUMIFS je lepší v případě, že se nemění seznam položek, které vyhodnocujete.
Pokud se mění, šel bych do KT s pomocným sloupcem ve zdrojové tabulce (tabulku převeďte na Objekt tabulka a máte to bezúdržbové) a výpočtovou položkou v KT - viz příloha

Je neděle - takže jsem na to koukal jen krátce - ale řekl bych, že bez mezikroku to nepůjde.

@elninoslov
Ako sa vyhnúť cyklu pri odstraňovaní zdvojených (a viac) oddeľovačov ale neviem.
Dá se využít funkce Filter - jen v rychlosti jsem aktualizoval svůj článek - klikněte na můj odkaz v prvním příspěvku, fce CONCATENATE_RANGE je tam nyní ve dvou verzích.


Strana:  1 ... « předchozí  75 76 77 78 79 80 81 82 83   další » ... 140

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

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.

On-line nástroje