Příspěvky uživatele


< návrat zpět

Strana:  « předchozí  1 2 3   další »

Ahoj potřeboval bych poradit s problémem seřazení řádků s datumy.
Datumy jsou ve sloupci B
v některých řádcích mám datum ve formátu "1.2.2014" a v jiných ve formátu "5.6. - 13.5.2014" když použiju toto makro

Sub seradit()
' seradit Makro
Sheets("ENPPavS").Sort.SortFields.Clear
Sheets("ENPPavS").Sort.SortFields.Add Key:=Range("B13:B100"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"leden,únor,březen,duben,květen,červen,červenec,srpen,září,říjen,listopad,prosinec", DataOption:=xlSortTextAsNumbers
With Sheets("ENPPavS").Sort
.SetRange Range("B13:R100")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

tak mi to sice hodnoty seřadí ale data ve formátu "5.6. - 13.5.2014" to neseřadí a dá na konec

vezkoušel jsem teda načíst hodnoty do pole a ty upravit pomocí funkce na zkrácení data tak, aby byly všechny ve stejném formátu

Sub SeraditData()
' Řadí data

Dim datum() As String
Dim i As Long
Dim pocetRadku As Long

pocetRadku = PrvniPrazdnyRadek - 13
ReDim datum(1 To pocetRadku)

For i = 1 To PrvniPrazdnyRadek - 13
datum(i) = zkratitDatumC(Range("B12").Offset(i).Value())
Debug.Print datum(i)
Next i
End Sub

nevím ale, jak mám data v poli seřadit a navíc opět vypsat seřazené řádky, ale s původními hodnotami tak, aby se mi například datum ve formátu "5.6. - 13.5.2014" nepředělal jen na 13.5.2014. zkoušel jsem nějak aplikovat funkci zkratitDatumC do prvního příkladu ale tam je to zadané jako pole a nevím jak to zapsat, aby se ta funkce použila na každou buňku z pole a také nevím zda by to také neovlivnilo celkový výstup, který musí zůstat v nezměněném formátu.

Děkuji všem co mi ulehčí mé trápení.

Díky AL tak jak jsi to napsal mi helflo úplně nejvíc teď už vím a jede mi přesně to co jsem potřeboval. 9

AL napsal/a:

Vo worksheet_change udalosti otestuj Target.Row (to dá to číslo 15 v uvedenom príklade), potom cyklus môže byť napr.
for i = Target.Row + 1 to Target.Row - 1 step -1

A jak mam proverit to target.row? Cyklus jsem tak uz napsal prislo mi to rozumne, ale nejde to. Cyklus mam v modulu a přes call ho volam z listu přes worksheet_change(byval target as range)

Ahoj potřeboval bych radu jak upravit makro, které se spouští po změně hodnoty v určité oblasti. Makro mám zapsané jako for i= 44 to 14 step -1

Problém je,že trvá asi 6 sekund než makro proběhne na všech řádcích, proto potřebuji, aby když proběhne změna na T15, aby se makro spustilo s for i = 16 to 14 step -1
Problém je, že nevím jak dostat do proměnné číslo řádku na kterém proběhla změna.
Díky za rady.

Díky kp57 ta funkce NOCNI funguje dokonale. To je přesně co jsem potřeboval.

Díky moc a snad to pomůže i ostatním kdo to budou potřebovat.

Pavlus napsal/a:

Zřejmě je jenom špatně voláš...
P.

Př.:Application.WorksheetFunction.Min(myRange)
Application.WorksheetFunction.Max(myRange)


Pořád mi to nějak nejde. Může mi teda někdo poslat jak zapsat toto:

MAX(MIN(KDYŽ($E17<$D17;1;$E17);0,25)-MAX($D17;0);0)

všem díky za radu. :)

AL napsal/a:

...FUNKCE MIN A MAX, které nejdou použít ve VBA
Prečo by nešli?


Vytvořil jsem si jednoduchou funkci a v ní se snažil použít funkci MAX a vyhodilo mi to chybu, že nezná funkci MAX tak proto. Můžeš mi sem teda hodit příklad vlastní VBA funkce ve které použiješ funkci MAX nebo MIN?

Ahoj potřeboval bych poradit. Rád bych vytvořil pomocí VBA funkci, která mi vypočítá kolik hodin člověk odpracoval v noci, pokud budu brát noc od 22:00 do 6:00. Mám vzoreček ale nevím jak nahradit FUNKCE MIN A MAX, které nejdou použít ve VBA. Pokud by to někdo už měl udělané čistě jen za pomocí VBA, byl bych rád kdyby se podělil. Jo a nechci to řešit pomocí vložit vzorec. VBA funkce by měla brát dva parametry jako A1 začátek práce B1 konec práce.

vzorec je:
=KDYŽ(A($D18<>"";NEBO($D18<0,25;$E18>0,92));MAX(MIN(KDYŽ($E18<$D18;1;$E18);0,25)-MAX($D18;0);0)+MAX(MIN(KDYŽ($E18<$D18;1;$E18);1)-MAX($D18;0,916666666666667);0)+MAX(MIN(KDYŽ($E18<$D18;$E18;0);0,25);0)+MAX(MIN(KDYŽ($E18<$D18;$E18;0);1)-0,916666666666667;0);"")

Příklad:
A1 = 0:00 B1 = 23:00 v C1 bude výsledek 7:00.
Všem díky za nápady.

Díky Pavlusi tohle funguje a díky za názorný kód. Snad to pomůže i ostatním co to budou potřebovat. 1

lubo napsal/a:

Tak zkus toto dát do listu vzorce a do oblasti L1:L100 zapiš jména listů, kde se mají řádky skrývat.

' Předpokládám, že řídící buňka je B1
' a seznam listů je v buňkách L1:L100 (v listu Vzorce)

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, [B1]) Is Nothing Then
Call Skryj ' Změnila se hodnota
ElseIf Not Intersect(Target, [L1:L100]) Is Nothing Then
Call Skryj ' Přidán další list
End If
On Error GoTo 0
End Sub

Sub Skryj()
Dim rngJmenoListu As Range
Dim oWS As Worksheet

On Error GoTo DalsiList:
For Each rngJmenoListu In [L1:L100]
Set oWS = Worksheets(rngJmenoListu.Text)
With oWS
.Rows("1:3").Hidden = True
Select Case [B1]
Case 1: .Rows("1:1").Hidden = False
Case 2: .Rows("1:2").Hidden = False
Case 3: .Rows("1:3").Hidden = False
End Select
End With
DalsiList:
Next
On Error GoTo 0
End Sub


Lubo si bůh! Toto je přesně to co jsem potřeboval. Moooooc děkuji za pomoc. Jsem rád, že se našel někdo, kdo opravdu umí. Ještě pokud můžu a máš náladu bych poprosil, zda by jsi mohl hodit popisky k jednotlivým řádkům kódu abych pochopil, jak jsi to vlastně zařídil, že to funguje. Já to hodím do souboru a vložím to sem pro ostatní, kteří budou hledat stejné řešení.

No myslel jsem, že se tu snažíte pomoct, ale vypadá to, že se vám moc nechce. Prosím tedy aby mi psali už jen ti co mají zájem pomoci s řešením problému. Prvé řešení co jste mi poslali sice vizuálně řešilo to co chci, ale já to potřebuji napasovat na již hotové řešení, které ale bohužel nemohu šířit. Proto potřebuji zástupný soubor, na kterém když mi to bude fungovat jsme schopný si to přetavit do toho v kterém to chci mít doopravdy.

Ještě jednou tedy o co mi jde:
v buňkách A1, A2, A3 mám vzorce, které se vyhodnocují a na základě vyhodnocení určí nějakou hodnotu, která se vyplní do buňky v které vzorec je. Tzn vzorec v A1 se vyhodnotí a zapíše do A1 hodnotu např. 1 pokud se ale vyhodnotí tak že A1="", tak potřebuji celý řádek 1 skrýt. To stejné analogicky pro A2, A3.

Pokud to bude fungovat jen s tím, že makro bude sledovat hodnotu buňky A1, A2, A3 a v případě hodnoty A1="" skryje řádek 1 tak mi to bohatě stačí, pokud se ale musí reagovat na přímou změnu buňky (jako že v buňce ručně změním hodnotu), tak ta se bude odehrávat akorát v buňce vzorce!B1 vše ostatní je provázáno vzorci.

Lépe už to opravdu vysvětlit neumím. A pokud někdo nechce pomoct tak ať prosím nepíše. Doufám, že se najde někdo, kdo je ochoten pomoci aniž by se tvářil nějak namyšleně.

změnit barvu písma na bílou nepotřebuji, protože v těch buňkách co chci skrýt jsou vzorce a když se to má skrýt, tak jsou buňky prázdné. Skrýt to potřebuji proto, že pod tím pokračují další buňky, které potřebuji přirazit k těm, co jsou nad tím plné a proto ty 3 prázdné řádky chci skrýt.
Vložím ještě jednou můj soubor a prosím, zda mi s tím uděláte něco, aby fungovalo, když zadám na listu vzorce do pole b1 hodnotu 1 až 3 tak na listu 1 se mi ukáže 1 až 3. pokud zadám cokoliv jiného neobjeví se nic. Já potřebuji, aby se řádek 1 až 3 skryl v případě, že je buňka v prvním sloupci prázdná. Pokud je prázdná A3 skryje se řádek 3 pokud A3 a A2 tak ty dva a pokud jsou prázdné všechny tak se skryjí všechny 3.

Prosím ponechte procedůru Skryj v modulu 1.

tak to jsem v pasti. Asi udělám tlačítko a bude se to spouštět ručně. To je to čemu jsem se chtěl vyhnout. :(

Pořád mi to nejde asi dělám někde chybu. A jde spustit makro při změně buňkdy ve které je zapsaný vzorec. Ono by to šlo spouštět i nějakou buňkou která je ve stejném listu pokud by se dalo zařídit, aby se makro spustilo po změně buňky ve které je vzorec. např. pokud bych měl na jakémkoliv listu buňku s =vzorce!b1.

no to co jsi napsal bylo v podstatě nejblíž tomu co potřebuji. Potřeboval bych když mám list "vzorce" a potom další které mají proměnlivá jména, ale je jich asi 50. Z těch padesáti na určitých vybraných potřebuji aby se skrývaly tři poslední řádky podle vzorce který v nich je. no a abych do těch vzorců nemusel zasahovat tak chci udělat přes makro to co jsem udělal.Mám modul1 toto:
Sub Skryj()

If Range("A1") = "" Then
Rows("1:1").Hidden = True
Else
Rows("1:1").Hidden = False
End If

If Range("A2") = "" Then
Rows("2:2").Hidden = True
Else
Rows("2:2").Hidden = False
End If

If Range("A3") = "" Then
Rows("3:3").Hidden = True
Else
Rows("3:3").Hidden = False
End If

End Sub

to nechci upravovat to zůstane tak jak to je.

No a pak do modulů vybraných listů u kterých je ale proměnlivý název, takže dopředu nedokážu říct jak se bude který list jmenovat potřebuji vložit něco co mi při změně buňky B1 v listu vzorce spustí na tom konkrétním vybraném listu makro Skryj()

takže budu mít modul1 který v sobě má makro Skryj() to jednoduché co jsem napsal. a pak si zvolím modul vybraného listu do kterého potřebuji to co mi pohlídá buňku B1 v listu vzorce a při změně hodnoty v B1 mi spustí makro Skryj.

Snad už jsem to vysvětlil dobře.


Strana:  « předchozí  1 2 3   další »

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse