< návrat zpět

MS Excel


Téma: Podmíněné oříznutí text. řetězce rss

Zaslal/a 17.6.2012 12:06

Ahoj, řeším pro mě zapeklitý problém 6 Mám textové řetězce s dvěma různými délkami - 3 a 2 znaků. Potřeboval bych vytvořit VBA funkci tak, aby při počtu znaků 3, odebrala poslední znak a při počtu 2 nechala řetězec tak jak je.
Vytvořil jsem následující - viz níže, bohužel mi to hlásí chybu Syntax error. Mohl by mi někdo prosím pomoci? Předem velmi děkuji
David

Function smazat_nesmazat()
Dim Retezec As String
if len(Retezec)=3 then left(retezec,2) else retezec
End If
End Function

Zaslat odpověď >

#008827
avatar
Ahoj,
budu upřímný :-), aneb jak by řekl Varel Frištenský: "No nic moc."

Zkusím něco vysvětlit, pokud by tě programování ve VBA zajímalo, tak mrkni do nějaké knížky .-)...

Nejdříve je potřeba uvědomit si, co chceš aby ti kód dělal. Funkce se používá pro případy, kdy má kód "vracet" nějakou hodnotu, která bude dále nějakým způsobem využita. Pro tvůj případ využijeme proceduru (v excelu Makro, zapis Sub).

Dále, co přesně má kód dělat?
Zřejmě potřebuješ Makro, které změní délku řetězce ve všech vybraných buňkách. Takže budeš potřebovat nějaký cyklus, např. For Each...

Do kódu potřebuješ dostat také hodnotu buňky - další proměnná + novou hodnotu buňky - třetí a poslední proměnná.

Pak to chce použít logiku (pro programování velmi důležité). Zřejmě není potřeba zkoumat délku řetězce, protože chceš aby výstupem byly vždy pouze první dva znaky, takže stačí pouze funkce Left.

No, a když to všechno dáš nějak dohromady, tak ti vyjde asi něco takového :).
P.

Viz příloha:
Příloha: zip8827_zkraceni_retezce.zip (14kB, staženo 26x)
citovat
#008829
avatar
Function smazat_nesmazat(Retezec As String)as string
Dim x as string
if len(Retezec)=3 then x=left(retezec,2) else x=retezec
End If
smazat_nesmazat=x
End Function

Ale stačí ti to aj takto
Function smazat_nesmazat(Retezec As String)as string
smazat_nesmazat=left(retezec,2)
End Function
citovat
#008830
avatar
Ahoj Marjankaj,

mně to nefunguje. Zkoušel jsem jí použít jako klasický vzoreček v tabulce. Píše mi to HODNOTA. Co s tím?

Díky D.citovat
#008832
avatar
Asi bude nejlepší když sem hodíš soubor!
Takhle můžeme jenom hádat co přesně chceš 2...
P.citovat
#008833
avatar
díky
Příloha: rar8833_sesit1.rar (7kB, staženo 21x)
citovat
#008834
avatar
Tohle nepomůže :-).
Musíš sem dát kód, do kterého to chceš zasadit. V příloze máš jenom data a na ně by šlo použít třeba to moje makro...
Nevím no, asi tě odkáži na literaturu 5.

Využít lze buď funkci od marjankaj nebo makro ode mě.
P.citovat
#008835
avatar
Trochu som to upravil.
Ale ak to chceš použiť priamo v liste, tak prečo nepoužiješ funkciu =ZLEVA(A1;2)? Alebo anglicky =LEFT(A1;2)citovat
#008836
avatar
Dobrá, tak já vložím celý soubor, když chcete:-) Myslel jsem,že to zkusím dobastlit sám.
Chtěl bych data rozdělit podle podle prvních dvou znaků a stejné hodnoty na dalším listě sesumírovat (jakási kontingenční tabulka).
Díky moc. Dave
Příloha: rar8836_sesit1.rar (6kB, staženo 20x)
citovat

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