Jump to content
Co nového? Mé kurzy
Komunita:
Diskuze Sledované příspěvky Žebříčky

Doporučené příspěvky

Odesláno

to piso:
Po editoru CSV se určitě podívám.
Abych pravdu řekl, netušil jsem, že takové věci jsou k dispozici.
Záleží zda některý bude schopen pracovat v dávkách a nebudou mu vadit různé délky dat.

to attivo:
Ano, platí ty 2 zádrhele.
1. Je hrozná práce vše dělat ručně opakovaně pro tolik symbolů
2. Je třeba vždy vybírat konkrétní oblast kde se třídí
Takže bych rád zapojil počítač do úlohy která mu přesně padne.
Jen hledám jak.

  • Odpovědí 905
  • Vytvořeno
  • Poslední

Nejaktivnější diskutující

Nejaktivnější diskutující

Publikované obrázky

Odesláno

Takže pokud by to někomu pomohlo, zde je kod který řeší co potřeboval "fi".

Sub SetriditSloupce()

pocetListu = Worksheets("List1").Cells(Rows.Count, 1).End(xlUp).Row - 1 ' zjisteni kolik je listu

AktList = ActiveSheet.Name ' zapamatovani ktery llist byl naposledy aktivni

For i = 1 To pocetListu
Worksheets(Worksheets("List1").Cells(i + 1, 1).Value).Select
Range("A4").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Next

Worksheets(AktList).Select ' navrat zpet na puvodni list

End Sub

Stači v Listu1 vytvořit seznam listů, pro který se má porcedura spouštět a potom to setřídí data ve všech listech seznamu najednou.

Aleš

  • 3 týdny později...
Odesláno

To makro šlape skvěle, z počítače se jen kouří.
Aleš prostě umí! :)

Narazil jsem ale ještě na jednu otázku.
To již určitě bude standardní funkce Excelu.
Poradí někdo?

Otázka je jak zapsat odkaz na buňku na jiném listu ( např. Wheat!A1 ),
pokud ale název listu Wheat nemůžeme dát přímo do odkazu ale musíme ho převzít z jiné buňky?

Názorněji snad příklad:
Tabulka má jeden list s názvem Hlavní a další listy s názvy komodit ( např. Gold, Wheat, Corn atd. ).
Všechny komoditní listy mají ve své buňce A1 aktuální cenu.
V listu Hlavní se do buňky B1 zapisuje jméno komodity.
Jaký vzorec by měl být v A1 aby vždy ukazoval aktuální cenu komodity zapsané v B1?

Už hodinu hledám v nápovědě a ne na to přijít.
Předem díky.

Odesláno

Tak si odpovím sám, třeba se to někomu bude hodit.
Jako nejschůdnější se mi zdá použít funkci nepřímý odkaz a označení listu řešit dodáním "!" do argumentu.
=NEPŘÍMÝ.ODKAZ(B1&"!"&"A1")

Odesláno

prosim o radu:

Jak je mozne v excelu setridit kdyz v jednoum listu delam statistiku celeho system a v dalsich listech chci aby se mi automaticky rozkladalo na paterny obchod po obchodu-tak aby se dala udelat analyza z kazdeho paternu zvlast-tzn bez mezer v radcich kde se nacheji dalsi paterny-nejde z toho pak udelat kloudne graf atd...musi se na tohle uz pouzit VBA?

diky za kazdou pomoc...

j

Odesláno

to jenaL:

zkuste příkazy
=countif (oblast; kriterium) ... vrátí počet odpovídající kriteriu
=sumif(oblast;kritéria;součet) ... vrátí součet odpovídající kritériu v dané oblasti

pro vás bude kritérium název patternu

popř. to vše ještě zkombinovat s podmínkou "=Když"

ať se daří,
Míra

Odesláno

tyto prikazy samozrejme znam.
me slo spise o to aby se me na samostatne listy kopirovaly jen jednotlive radky v listech jednotlivych paternu z listu celkoveho deniku ke jsou paterny smichany. Neco jako filtr, ale sepisovano pod sebe a na ruzne listy podle paternu...resim v podstate to ze chci mit prehledne ke kazdem paternu equity krivku uz v excelu abych videl aspon opticky drawdown jednotlivych paternu nez to vyexpeduju do MSA. Mozna jednoduseji receno ze pokud pod sebe pises pismena A B C D v nahodnem poradi budou se na dalsi 4 listy zapisovat cele radky hodnot ale na list A jen ten radek od , na list B jenom radek od B atd...

doufam ze jsem to trosku vyzvetlil

diky

Odesláno

to jenaL:
tak už chápu, díky za upřesnění a současně se omlouvám ... tady už mi nic lepšího než VBA nenapadá :(

protože VBA jednoznačně nevládnu, tak mi napadl jen jeden "krkolomný" způsob a to pomocí automatického filtru, ale dlouhodobě moc použitelné to neni.

ať se daří,
Míra

Odesláno

jenaL,

máš na mysli něco v tomto smyslu?

jestliže patern = sledovaný patern potom
kopíruj řádek se sledovaným paternem v listu YX
vlož kopírovaný řádek do listu XY

Aleš

Odesláno

Presne Alesi! Aby se to kopirovalo v zavisli na hodnote jedne bunku v radku (patern) do listu toho daneho paternu a potom mohu delat statistiky zvlast pro kazdy patern..verim ze pro VBA to nebude problem...klasicky excel tohle udela pouze s mezerama v radcich kde jsou prekopirovane radky v listech jinych paternu a s timto se nda pak moc pracovat...chce to mit jeden po druhym..tento druh presneho kopirovani a filtrovani filrovani by me hodne pomohlo i poresit i dny v tydnu atd...

Odesláno

jenaL,

tak se pokusíme se k tomu postupně dopracovat. Zkusím to předvést, že je to poměrně jednoduché.

- zápis kódu by měl vypadat v podstatě tak jak je nastíněno výše.
- musíme to navíc vsadit do cyklu
- je třeba vymyslet mechanismus zadávání/výběru hledaného paternu

Zkusím postupně návrh základního kódu:

*********
If Patern = SledovanyPatern then
Worksheets("List1").Rows(1).Copy ' List1 = misto odkud se ma kopirovat radek, Rows(1) rika ktery radek se bude kopirovat
ActiveSheet.Paste Destination:=Worksheets("List2").Range("A4") ' List2 = list kam se ma radek kopirovat, dale je treba pomoci Range("A4") urcit presnou polohu mista urceni kopirovani
End If
********

také lze to samé provést pomocí záznamu makra a případně si lze ten zaznamenaný kod potom trochu vylepšit.

takto by to mohlo vypadat po záznamu bez úprav:
********
Rows("1:1").Select
Selection.Copy
Sheets("List2").Select
Range("A4").Select
ActiveSheet.Paste
*********
jen by se tam přidala před to podmínka If ... Then

tím máme hotové kopírování jednoho řádku. Teď je třeba upravit kód, aby prošel všechny řádky v předem definované oblasti a každý odpovídající (shoda názvů paternů) překopíroval a také vyřešit definování proměných Patern a SledovanyPatern.




Odesláno

- nejprve musíme určit rozsah oblasti kterou budeme procházet (které řádky)
- řekněme, že chceme procházet všechny řádky v listu "List1" od 10 do 1000řádku

proto použijeme toto:
********
For i = 10 To 1000
.....
Next i
********

- řekněme, že SledovanýPatern se nachází ve sloupci E, což je 5tý sloupec
- tímto vlastně vyřešíme definování proměné SledovanyPatern

s tím by mohl kod vypadat již takto:
********
For i = 10 To 1000
SledovanyPatern = Worksheets("List1").Cells(i, 5).Value
If Patern = SledovanyPatern Then
Worksheets("List1").Rows(i).Copy ' List1 = misto odkud se ma kopirovat radek, Rows(i) rika ktery radek se bude kopirovat
ActiveSheet.Paste Destination:=Worksheets("List2").Range("A4") ' List2 = list kam se ma radek kopirovat, dale je treba pomoci Range("A4") urcit presnou polohu mista urceni kopirovani
End If
Next i
*******


Odesláno

- definujeme ještě proměnou Patern
- název hledaného paternu budeme brát odněkud z listu a nějaké konkrétní buňky (nechť si každý určí sám). Nejlepší by bylo, pokud by se vybíralo z rozevíracího seznamu stávajících názvů paternů, abychom předešli možným event. překlepům
- pro jednoduchost řekněme, že hodnota Patern se nachází v Listu1 a bunce A1

takto doplníme kod:
*********
Patern = Worksheets("List1").Range("A1").Value
For i = 10 To 1000
SledovanyPatern = Worksheets("List1").Cells(i, 5).Value
If Patern = SledovanyPatern Then
Worksheets("List1").Rows(i).Copy ' List1 = misto odkud se ma kopirovat radek, Rows(1) rika ktery radek se bude kopirovat
ActiveSheet.Paste Destination:=Worksheets("List2").Range("A4") ' List2 = list kam se ma radek kopirovat, dale je treba pomoci Range("A4") urcit presnou polohu mista urceni kopirovani
End If
Next i
*********

- tímto máme definované obě proměné a vyřešené načítání (1/2 kopírování) řádků
- teď zbývá vyřešit vkládání řádků, potože je nemůže vkládat neustále na jedno místo, ale postupně pod sebe
- na to opět použijeme další cyklus a vlastně ho vnoříme do již stávajícího
- defaco budeme jen "posouvat hodnotu "A4" (z tohoto řádku: ActiveSheet.Paste Destination:=Worksheets("List2").Range("A4"))
- tím budeme postupně posouvat vkládání jednotlivých nových řádků pod sebe
- použijeme proto třeba proměnou s názvem "k"
- nepoužijeme již pro určení cílového místa Range("A4") ale použijeme zápis Cells(k, 1) což je defacto to samé, jen se to lépe hodí pro procházení cyklem
- ze čtyřky ze zápisu "A4" jsme udělali proměnou "k" a tu budeme postupně navyšovat


takto by nějak mohl vypadat již funkční kod:
********
Sub PreneseniRadku2()

k = 4 'toto nám říká že budeme začínat na čtvrtém řádku
Patern = Worksheets("List1").Range("A1").Value

For i = 10 To 1000
SledovanyPatern = Worksheets("List1").Cells(i, 5).Value
If Patern = SledovanyPatern Then
Worksheets("List1").Rows(i).Copy ' List1 = misto odkud se ma kopirovat radek, Rows(1) rika ktery radek se bude kopirovat
ActiveSheet.Paste Destination:=Worksheets("List2").Cells(k, 1) ' List2 = list kam se ma radek kopirovat
k = k + 1 'tímto po každém projití cyklem navýšíme hodnotu "k" o jedna a tím se vlastně posuneme na další řádek (pro vložení)
End If
Next i

End Sub
*******

Tímto bychom měli patrně postavenou základní strukturu kodu, který se jistě bude dále rozšiřovat dle individuálních potřeb.

Tolik kratičká ukázka práce s VBA a že to není vlastně nijak složité


Aleš

:) :)

Odesláno

Ještě jsem zapoměl, že je třeba to makro nějak spouštět. Tady je více možností a záleží na každém co by lépe vyhovovalo.

napadají mě v rychlosti tyto možnosti:

- automatické spouštění pomocí nějaké konkrétní události (např. změna hodnoty bunky)
- pomocí stisku předefinovaných kláves
- pomocí tlačítka na listu které by se proto muselo vytvořit


Přeji hodně zdaru

Aleš


×
×
  • Vytvořit...