Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  111 112 113 114 115 116 117 118 119   další » ... 140

1: 9 - 5 = 4
2: 13 - 9 = 4
3: 21 - 17 = 4
4: 25 - 21 = 4
5: 29 - 25 = 4
6: 33 - 29 = 4
7: 37 - 33 = 4
8: 41 - 37 = 4

kludne to moze cyklit aj do 100 ale urobi to len pri poslednom


Nemůžete počítat 9 - 5 = 4,
ale 9 - 4 = 5 (9 je poslední zobrazený, -4 je poslední skrytý) - nevím jak to srozumitelně vyjádřit - musíte si to vyzkoušet sám ;)
proto jsem tam psal to počítání na prstech
Range(Cells(1, (x * 4) + 5), Cells(1, (x * 4) + 9)) =>
Cells(1, (x * 4) + 5)
Cells(1, (x * 4) + 6)
Cells(1, (x * 4) + 7)
Cells(1, (x * 4) + 8)
Cells(1, (x * 4) + 9) -- tato už tam nepatří
tedy 5 buněk

ono se to necyklí - prostě vždy v jednom kroku provedete s tím pátým sloupcem jednu operaci a v dalším kroku je tentýž sloupec jako 1. a provádíte s ním další - mno a ve výsledku je to vidět až na konci ;)

@Opičák
Aha, tohle. Tak to vás nemusí trápit. Za 10 let jsem to použil poprvé a to jen ze zvědavosti. Je opravdu málo věcí z excel4 makro, které se dají využít a nejsou ve VBA.
http://excelplus.net/news.php?readmore=90

@AL
Já vím. A v podstatě všechny ty národy můžou jen závidět ;)

@Opičák
A co přesně nebere ;)

To je jednoduché. Protože mu říkáte, aby to udělal

Pro x=7 je totiž
Range(Cells(1, (x * 4) + 5), Cells(1, (x * 4) + 9)).Columns.Address
rovno

$AG$1:$AK$1

ked tam ma jasne definovane ze kolko stlpcov ma hidnut
ano, máte - 5 sloupců ;)
když budu počítat na prstech tak +5, +6, +7, +8, +9 ;))

Už jsem si všiml, že máte tendenci, řešit věci složitěji, než je třeba
Když už to nechcete dělat najednou a pomocí proměnných, tak to zjednodušte třeba takto
Private Sub lbKlienti_Change()
If Not mbEvents Then
For x = 0 To lbKlienti.ListCount - 1
Range("E:H").Offset(0, x * 4).EntireColumn.Hidden = Not lbKlienti.Selected(x)
Next
End If
End Sub

Takže jsem měl chvilku času a tohle mně zajímalo, taxem si s tím trochu hrál.

Pro slováky - jestli jsem to dobře pochopil - se nic nemění, protože ti nemají lokalizované názvy fcí.
Takže můžou v klidu použít
Function MY_EVALUATE(Formula As String)
MY_EVALUATE = Evaluate(Formula)
End Function

Výsledek bude shodný s Excel4 makrem (tedy použitím názvu)
Pro čechy a další postižené národy (pro Palooo - nejsme jediní http://www.tutoria.pl/blog/381-funkcje-excela-po-polsku-angielsku-i-niemiecku) se dá využít lokalizované fce EVALUATE (tedy pro nás VYHODNOTIT) - ta totiž naopak od VBA pracuje pouze s lokalizovanými názvy fcí (takže SUM nezná, ale SUMA ano)
Takže buď v názvu, jaxte psali výše, nebo na Listu maker Excel 4.
To má výhodu, že lze využít dalších příkazů - tedy využít např. IF-ELSE-END.IF (KDYŽ-JINAK-KONEC.KDYŽ) a ošetřit tak různé další záležitosti.
Nevýhodou je naopak, že nelze vyhodnotit "SUMA(A1:A4)" ale musí být zadáno s názvem listu "SUMA(List1!A1:A4)". Je to logické a při použití názvu je to vlastně taky, jenže tam se to doplní samo, takže na to nemusíte myslet.

Mimochodem - po deseti letech práce s excelem jsem dnes napsal své první excel4 makro a byl to boj ;)))

Pokud máte soubor .csv, není ho již třeba přizpůsobovat.
Jestliže jste nastavení nezměnil (nebo neinstaloval program, který to udělal za vás), pak je .csv asociovaný s MS Excel a otevře se přímo v něm. Pokud ne, dejte otevřít v excelu.

Takže neukládat do .txt, ale ponechat jako .csv

Mno a jelikož už jste použili makro - sešit se vás tím pádem bude ptát na povolení maker
pak mi přijde lepší

Function MY_EVALUATE(Formula As String)
MY_EVALUATE = Evaluate(Formula)
End Function

Takže se jedná o tutéž Evaluate ;)

Btw:
něco dělám špatně, pže mi to nefunguje (ale teď nemám moc času se tím zabývat)

Opičák napsal/a:

Vůbec tomu nerozumím a protože tu není odpověď, obávám se, že tomu nerozumí nikdo.
Navrhovaný ostup mi připadá krkolomně složitý, "tahání" vzorců z nějakých buněk.


Kromě toho nerozumím, je to přesně to, co si myslím ;)
ulozto.cz mám blokované, takže stejně ani nemohu pomoci

@AL
Evaluate je fajn, zrovna nedávno jsem ji využil a vlastně ji používáte i vy (zápis [A1] místo Range("A1").value http://www.excelplus.net/forum/viewthread.php?thread_id=551)
Já bych jí takto nepoužíval, ale použil jsem v převodu databáze (do skrytého řádku jsem dal vzorec, který se má použít pro práci s čísly pod ním). To mi umožnilo použít pro všechny sloupce jednu proceduru, která má jako argument tento vzorec a v kódu je potom jen Evaluate(vzorec). Musel jsem ale použít anglické fce, protože české mi házely chybu.

Proměnné určitě používejte. Jenom musíte používat ty správné typy (chce to praxi). A pokud používáte Objekty, nejdříve se podívejte na vlastnosti (počet řádků v oblasti je Range.Rows.Count - takže nemusíte definovat pole)
Pokud nevím jaký typ proměnné použít, používám následující trik:
definuji proměnnou typu variant a jeden řádek za přiřazením hodnoty do proměnné kód zastavím a ve VBE v okně Locals se podívám na typ, jaký proměnná má. Je tam potom napsané např: Variant/Range a vím, že to proměnná má být typu Range
Je třeba jen pamatovat (on vás kód na to stejně upozorní), že když přiřazujete do proměnné objektovou hodnotu, musíte použít Set

1. Ta tečka souvisí s tím With
takže
With Sheets("Pracovni").Columns(1)
Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)).Offset(0, 1).FormulaR1C1 = "=AVERAGEIF(S_KONTRAKT,RC[-1],S_DATKONEC)"
End With 'Sheets("Pracovni").Columns(1)


je podobné jako

Range(Sheets("Pracovni").Columns(1).Cells(2, 1), Sheets("Pracovni").Columns(1).Cells(2, 1).End(xlDown)).Offset(0, 1).FormulaR1C1 = "=AVERAGEIF(S_KONTRAKT,RC[-1],S_DATKONEC)"

Bez tečky by to sice mohlo fungovat - ale bude to špatně, protože se to bude vztahovat k aktivnímu listu
(zrovna tady je výjimka,kdy to funguje, protože pokud máte aktivní list 'Pracovni' tak z tečkou je to stejná buňka jako bez tečky - nicméně stačí se přepnout na jiný list a už to bude dělat neplechu)

2. To zařídí End(xlDown)
Vlastně jsem uělal toto
.Cells(2, 1) - umístil jsem kurzor na buňku A2
.Cells(2, 1).End(xlDown) - stiskl jsem Ctrl+Shift+šipka dolů
.Offset(0, 1) - vybranou oblast jsem posunul o jeden sloupec doprava
a vyplnil

Stačí takto?

Jinak, když tak rychle koukám do Nápovědy
tak fce
FileDateTime

Returns a Variant (Date) that indicates the date and time when a file was created or last modified.

Ten kód jsem nestudoval, ale proč nepoužíváte možnost
Vždy vytvořit záložní kopii

=IFERROR(SVYHLEDAT(List2!A3;List1!A3:C7;2;0);"error")

Mám chvíli času, tak šťourám

1. to co děláte, tím simulujete Kontingenční tabulku (ale když chcete)
2. proč máte ty proměnné na úrovní modulu a ne v proceduře?
3. závěrečný cyklus - proč to neuděláte jedním krokem - zbytečně spouštíte přepočet listu v každém jeho kroku
4. Použití pojmenovaných oblastí je v pořádku, jen si nejsem jistý - píšete, že to celé zpracováváte pomocí VBA - i definici těchto oblastí (protože to v kódu nevidím)
5. zjišťování počtu sloupců převodem oblasti do pole variant a pak zjištovat dimenze pole - není to troch komplikované?

Jinak kód, který dělá to co ten váš, by mohl vypadat takto
Sub subAverage()
With Sheets("Pracovni").Columns(1)
.ClearContents
Range("S_KONTRAKT").Copy Sheets("Pracovni").Range("A1")
.RemoveDuplicates Columns:=1, Header:=xlYes
Range(.Cells(2, 1), .Cells(2, 1).End(xlDown)).Offset(0, 1).FormulaR1C1 = "=AVERAGEIF(S_KONTRAKT,RC[-1],S_DATKONEC)"
End With 'Sheets("Pracovni").Columns(1)
End Sub

kde bude pozice první nenulové hodnoty ve sloupci variabilní.

pokud by bylo jisté, že začíná na 1.řádku, tak
=SUMA(Data*(COUNTIF(POSUN(Data;0;0;ŘÁDEK(Data);1);"<>0")<=G1))/G1

Já bych si těmi volatilními-nevolatilními nekomplikoval život ;))

@Opičák, @AL

Pokud oblast nezačíná na řádku 1, tak to vypadá, že vám to nepočítá dobře


Strana:  1 ... « předchozí  111 112 113 114 115 116 117 118 119   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