Už jsem na pto "přišel" s přispěním nápovědy from lubo...
Abych mohl použít konkrétní pole do vzorce ZÍSKATKONTDATA musím mít u tohoto pole "Souhrn", jinak mi to nebude nic zobrazovat a zobrazí pouze #ODKAZ.
Jakmile jsem tam zadal "Souhrn Splatnost", což mi nevadí, tak mohu použít tento ve vzorci.
To lubo:
Dobře, ale stejně jsem pořád nepřišel na to, proč mi to nefunguje na pole "Splatnost" a funguje to až na pole "FaTyp"...
eLCHa napsal/a:
@Alfan
řekl bych, že jste změnil název pole - originální název je Zbývá_uhradit_v účt. a Vy jste si ho zkrátil na Zbývá. ZÍSKATKONDATA je velice citlivá funkce a tohle pravděpodobně nesežere.
Takhle ne:=ZÍSKATKONTDATA("Zbývá";$A$5;"Splatnost";"Do splatnosti";"FaTyp";"FV2015")Takhle ano:=ZÍSKATKONTDATA("Zbývá_uhradit_v účt.";$A$5;"Splatnost";"Do splatnosti";"FaTyp";"FV2015")
@Hav-Ran
Tato funkce je defaultně zapnutá
Když si uvědomíte, že ZÍSKATKONDATA je vlastně SUMIFS, tak ve spojení s "novým" objektem Tabulka (Excel-Table) není co řešit, protože už nemusíte uvažovat ani nad dynamickými oblastmi...
Mám Excel 2013 a v možnostech to mám zatržené stále.
Ale já potřebuji ten vzorec bez "FaTyp";"FV2015", protože můžu mít více období v té tabulce, tohle byl jen vzor.
V jiném souboru mám tohle
=ZÍSKATKONTDATA("k úhradě";$A$5;"SPLATNOST";"Do SPLATNOSTI")
a funguje to a přitom struktura tabulky je stejná...
Já jsem ten nový soubor tvořil de facto z toho původního, akorát jsem potřeboval do zdroje jiná data a tak jsem musel přejmenovat i pole v konti tabulce.
Tak fakt nevím.
Jj, děkuji, podle mě elegantní řešení, když použiju tabulku, jako zdroj dat pro konti
Akorát jsem koukal, že to nerozlišuje malá a velká písmena, "Do splatnosti" nebo "do splatnosti", je pro excel stejné.
A stejně by mě zajímalo, co jsem měl respektive mám špatně v tom vzorci, že nefunguje ten vzorec ZÍSKATKONDATA... Ale už to není moc důležité, když to mohu obejít takto
Změnil jsem v konti tabulce rozsah a pole a pak jsem chtěl zeditovat vzorec ZÍSKATKONTDATA a opět mi to hází #ODKAZ...
Nevím, co dělám špatně.
Někdy mi to zadat nebo editovat jde a někdy to nemohu nastavit...
Můžete mi někdo poradit?
děkuji
Tak mi pošlete číslo do emailu.
Díky
Pěkné srovnání
Já ten kód používám a je to super.
A to vyladění se týká čeho...? Pomohlo by to i mně v rychlosti? Mám si něco v kódu opravit?
Děkuji
Než zapomenu...
Rád bych "podpořil" finančně (Donate) buď konkrétní osobu nebo web (weby)... Nic není zadarmo a rady, které se zde dostanou jsou mnohdy k nezaplacení.
Mohu poslat z účtu nebo PayPal.
Tak jsem testnul to makro od eLCHa i na menší počet řádků a funguje to. Měl jsem cca 104 000 a snížil jsem to na 100 000 a vše se načetlo a upravilo.
Přikládám vyexportovaná data v XML. Ona se ta data automaticky otevřou v *.xlsx a tak jsem to i uložil, protože v *.xml to nejde uložit neb to prý neobsahuje žádné mapování...
Já to XML používám jen proto, že je to výrazně rychlejší, ten export.
Mockrát děkuju
Upravil jsem to.
Jj, už to funguje, jsem lama
Pokud jsem to dobře pochopil, tak se to dá využít pro jakoukoliv tabulku, kterou pojmenuji DataTab nebo bych případně musel zeditovat její název v makru.
Ale nezáleží, jak bude veliká respektive, kolik bude mít sloupců.
Důležité je, aby připravená tabulka vždy využívala zdrojová data *.csv se stejným počtem sloupců, se kterým byla vytvořená tabulka.
Případně bych musel tabulku převést zpět na rozsah, dle potřeby doplnit sloupce, výpočtové a na data a pak zase zpět převést na tabulku.
A vždy musí být sloupce s daty a pak až následovat sloupce s výpočty.
Jinak mi celé načtení a přepočet trvá cca 20 sekund při cca 103 000 zdrojových řádcích.
A ještě jeden dotaz na konec. To makro lze takto připravit jen pro *.csv nebo to lze připravit i pro *.xml?
Tak jsem upravil na hlásí to chybu:
"Subscript out of range" na tomto řádku
With Worksheets("makra").ListObjects("DataTab").DataBodyRange
List, na kterém mám ta tlačítka se jmenuje "makra"
Tohle je celý kod:
Sub subImportCSV_RBR()
Dim sFileTemp As String
sFileTemp = Dir(ThisWorkbook.Path & "\DATA\*.csv")
'sFileTemp = Dir(ThisWorkbook.Path & "\*.csv") 'když je uloženo ve stejném adresáři
Dim sFile As String, dFileTime As Date
While Not sFileTemp = vbNullString
If FileDateTime(ThisWorkbook.Path & "\DATA\" & sFileTemp) > dFileTime Then
sFile = ThisWorkbook.Path & "\DATA\" & sFileTemp
'If FileDateTime(ThisWorkbook.Path & "\" & sFileTemp) > dFileTime Then 'když je uloženo ve stejném adresáři
'sFile = ThisWorkbook.Path & "\" & sFileTemp 'když je uloženo ve stejném adresáři
End If
sFileTemp = Dir
Wend
If Not sFile = vbNullString Then
Dim bScreen As Boolean
bScreen = Application.ScreenUpdating
Application.ScreenUpdating = False
Workbooks.OpenText Filename:=sFile, DataType:=xlDelimited, Semicolon:=True, Local:=True
With ActiveWorkbook
With .Worksheets(1).UsedRange
Dim vValues As Variant
vValues = .Offset(2, 0).Resize(.Rows.Count - 2, .Columns.Count).Value
'vValues = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count).Value 'začíná číst data ze zdroje od třetího řádku, první dva jsou záhlaví
End With '.Worksheets(1).UsedRange
.Close False
End With 'ActiveWorkbook
With Worksheets("makra").ListObjects("DataTab").DataBodyRange
'With ActiveSheet.ListObjects("DataTab").DataBodyRange 'muselo by se makro spouštět přímo z listu "DataTab"
If .Rows.Count > 1 Then
.Offset(1, 0).EntireRow.Delete
End If
.Cells(1).Resize(UBound(vValues, 1), UBound(vValues, 2)).Value = vValues
End With 'ActiveSheet.ListObjects("DataTab").DataBodyRange
Application.ScreenUpdating = bScreen
Else
MsgBox ("Neexistuje žiadny .csv súbor.")
End If
End Sub
To eLCHa
add 1) Spustil jsem byla chyba na tomto řádku:
With ActiveSheet.ListObjects("DataTab").DataBodyRange
Tak jsem spustil makro přímo z listu a proběhlo to.
Já mám totiž na listu "aktualizace" připravená tlačítka, ke kterým přiřazuji makra a tam spouštím to, co potřebuji. Šlo by to makro upravit, aby šlo spustit odkudkoliv?
Ale načetlo mi to o jeden řádek méně. Já totiž od rána mám smazána záhlaví a tak mi data začínají od řádku 1.
Nicméně při exportu z účetního SW začínají data o řádku 3, protože je tam v prvním řádku nějaká info, jen v jedné buňce a v druhém řádku jsou záhlaví sloupců.
add 2) Já ten exportovaný soubor XML mám vždy stejně otevřený hned po exportu v excelu (udělá se to automaticky) a pak ho musím někam uložit a při té příležitosti buď mohu umazat jen jeden (1.) řádek nebo první dva řádky. Ale podle makra bych umazal jen ten první.
add 3) Tady v tom řádku
sFileTemp = Dir(ThisWorkbook.Path & "\*.csv")
dá se upravit cesta k tomu *.CSV souboru?
Teď je to nastavené, že je *.CSV ve stejném adresáři.
Kdybych dal do stejného adresáře adresář "DATA" bylo by to takto?
sFileTemp = Dir(ThisWorkbook.Path & ".\DATA\*.csv")
nebo jen takto?
sFileTemp = Dir(ThisWorkbook.Path & "DATA\*.csv")
Děkuji
To elninoslov:
Děkuji za makro.
Zkoušel jsem ho aplikovat, ale nefunguje mi...
VYexportoval jsem data z účto SW ve formátu XML (kvůli rychlosti), smazal jsem první dva řádky (záhlaví sloupců) a uložil *.csv.
Oddělovač je středník ";"
Daty mám obsazené sloupce "A" až "AI" a je to celkem cca 103 000 řádků.
Když to naimportuji, tak se zapíší data vždy jen do buňky ve sloupci "A" a jsou v té buňce za sebou oddělené středníkem.
Editoval jsem i ty rozsahy v makru, ale bezúspěšně.
Ve finálním listu "dataTab" (v makru jsem přejmenoval, to nebyl problém) mám vzorce od sloupce "AJ" do sloupce "AR".
Nevím, zda nejsou problém ty ";".
Zkopíruji vzorce do všech řádků...
Špatně jsem to popsal, ty vzorce se opravdu zkopírují automaticky a já nemusím díky tabulce nic kopírovat. Omlouvám se za nepřesný popis
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.