Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  76 77 78 79 80 81 82 83 84   další » ... 289

"Training" nieje "Trénink".
Worksheet_Change sa nedáva do modulu ale do listu.
Meno "Jméno 1" nie je to isté ako "Jméno1".
Upravené, vyskúšajte. Zmena tých mien je ale poriadne nepohodlná, kvôli tomu odkazu.
Link na súbor

A spúšťate súbor z prílohy 49730? Kód vo Vašej prílohe 49733 nie je ten, čo som Vám poslal ja v 49730.

??? Exportujte, a porovnajte hneď prvý riadok s tým, čo dávate ako príklad. Ukážte mi rozdiel. Ja ho nevidím.

Premýšľam ako odpovedať, bo skôr ako napíšem ako fungujú základné veci v Exceli, ako je COUNTIF a relatívne/absolútne adresovanie buniek, tak skôr to vygooglite.)
COUNTIF - spočíta počet výskytov dátumu v oblasti.
Túto oblasť si určíme vždy od prvej bunky $A$1, po aktuálny riadok v stĺpci A. Teda $A$1:A1, $A$1:A2, $A$1:A3 ...
Takže v každom riadku počíta koľko sa tam nachádza tých dátumov od začiatku po práve počítaný riadok.
Rozdiel medzi $A$1 a A1:
$A$1 - absolútne adresovanie buniek
A1 - relatívne adresovanie buniek
Značka absolútneho adresovania, teda $, pribíja danú súradnicu, aby sa nehýbala, pri kopírovaní vzorca. Tu na začiatku pribijeme aj stĺp A aj riadok 1, preto oblasť spočítavania vždy začína v $A$1.
Narozdiel od toho relatívne adresovanie, tam kde $ nieje, sa mení, podľa toho, kam vzorec posunieme/skopírujeme. Preto sa v každom riadku mení adresa koncovej bunky, pri skopírovaní vzorca na A1, A2, A3, ...

PS: Ešte presnejšie by to malo byť $A$1:$A1 1

Takýmto poliam nemôžem odolať 5

=COUNTIF($A$1:A1;A1)

To je docela rizikové na chybu. Musíte mať niekde uložené staré názvy. Tu som ich dal do listu OLD.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zmena As Range, Bunka As Range, rngOLD As Range, H As String, MSG As String
Set Zmena = Intersect(Range("K4:AD4"), Target)
If Not Zmena Is Nothing Then
On Error GoTo CHYBA
For Each Bunka In Zmena.Cells
Set rngOLD = wsOLD.Range(Bunka.Address)
H = Bunka.Value
Worksheets(rngOLD.Value).Name = H
Worksheets("Trénink " & rngOLD.Value).Name = "Trénink " & H
Bunka.Hyperlinks.Add Bunka, "", Split(Worksheets(H).Cells(1, 1).Address(, , 0, 1), "]")(1), H
rngOLD.Value = H
CHYBA:
If Err.Number <> 0 Then MSG = MSG & IIf(MSG = "", "", vbNewLine) & H
Next Bunka
If MSG <> "" Then MsgBox "Tieto zmenené hodnoty sa nepodarilo správne aplikovať:" & vbNewLine & MSG, vbCritical
End If
End Sub

Maticový vzorec do PF?
=--MID(B3;10;2)=MAX(IF(LEFT($B$3:$B$10999;8)=LEFT(B3;8);--MID($B$3:$B$10999;10;2)))
=--ČÁST(B3;10;2)=MAX(KDYŽ(ZLEVA($B$3:$B$10999;8)=ZLEVA(B3;8);--ČÁST($B$3:$B$10999;10;2)))

ale výpočetne náročné na 11K riadkoch.

Jaj keby ste vedela, ako sa mi dnes už nece. Snáď zajtra.
V prípade prerobenia na objekt Tabuľka, treba myslieť na dôsledky. Máte tam zakomponované zisťovanie verzie Excelu, a v prípade nižšej verzie sa ukladá XLS, a nie XLSM! Teda Tabuľka sa znefunkční. Teda z toho že to tam je predpokladám, že to používate cross verziami. atď.

Prečo konkrétne od 22. riadku mažete presne 55 riadkov?
.Cells(22, 2).Resize(55, 7).ClearContents

Čo sa má nachádzať na 55. riadku?
If riadok - 54 > 0 Then
.Cells(55, 1).Resize(riadok - 55, 7).ClearContents
.Cells(55, 1).Resize(9) = 1
.Cells(55, 9).Resize(9) = WorksheetFunction.Transpose(Array("OK", "NK", "NKJIS", "UK", "ORL", "JORL", "OMFCH", "Očné", "JOCK"))


End If


Prečo musí byť v A nezmazaných vždy presne 33 riadkov? To mi nesedí ani na dni v mesiaci...

Inak v tej kontrole nemôže byť
And (LST <> FaP)
ale
And (LST <> "FaP")
ostatné si preberiem až po odpovediach.

No ale Vy predpokladám hovoríte o tom, že Vám nevymaže posledný riadok na liste "zoznam". To makro ale práve list "zoznam" má vo výnimkách (funkcia "CheckMesiac"). Makro sa tohto listu nedotkne, tak mi je záhadou, ako Vám môže nevymazať posledný riadok z listu, v ktorom nič nemaže.
A ďalej pozerám, že som dával (to je moje makro) konštantu PRVY_RIADOK, ktorú očividne nikde nepoužívate. Teraz by mala byť asi 22, nie 20. To je ale fuk. Hovorím to len preto, že to naznačuje "nefundované" úpravy :).

O ktoré makro ide?

Ale čoby bolo. Predstavte si množinu M{5,1,6}. Vytvorím novú prázdnu množinu N, do ktorej budeme zoraďovať. Z M si budeme postupne vyťahovať čísla. Prvé je 5. Teraz skontrolujeme po jednom čísla v N, a hľadáme prvé z N, ktoré je väčšie ako 5. Žiadne ešte nieje, tak 5 pridáme a máme N{5}. Berieme ďalšie číslo z M, teda 1. A zase hľadáme v N prvé väčšie ako 1. A ejhľa, číslo 5 z N je väčšie ako 1 z M, tak pridáme do zoradenej množiny N číslo 1 pred pozíciu tej 5 čo tam už je. Takže máme N{1,5}. A berieme ďalšie z M, teda 6. A znovu porovnávame už zoradenú novú N, a hľadáme prvé väčšie. Bác, žiadne nieje, tak pridáme na koniec. A máme N{1,5,6}. Toľko základný princíp, lebo kolekcia umožňuje vložiť položku Before alebo After alebo na koniec.

Blbé je, ak máme vyhľadávacie kľúče. Tie nezistíme, ak ich nemáme ešte niekde uložené. Zvolil som teda spôsob, že kolekcia nebude obsahovať len samotnú hodnotu, ale aj vyhľadávací kľúč, ktorý je na začiatku pri plnení priradíme. A ako pridáme do kolekcie položku z 2-mi hodnotami (hodnota aj kľúč)? No strelíme do nej pole. Array(položka, kľúč). to je prvá malá komplikácia v kóde.

Druhá malá komplikácia, ktorá Vás bude miasť, je prehadzovanie porovnávaných položiek pri prehodení vzostupného/zostupného radenia. Aby to nebolo komplikované, môžete si urobiť jednoducho 2 samostatné cykly, vykonávané podmienene podľa voľby zoradenia. Či už cez If alebo Select Case.

No a to, že je tam pridaný aj index zoraďovacieho poľa, to je len taký bonus. Ono totiž môže byť niekedy treba do kolekcie natrepať aj širšie pole, a potom môže byť takýto index užitočný. Ale ak to má byť variabilné treba myslieť na to jedným krátkym cyklom ešte, ale to som tam nedával, lebo ak viete, že máte pole 4-och údajov a radiť podľa 3. z nich, tak rovno pri napĺňaní budete plniť poľom o veľkosti 5 položiek (5. je ten kľúč). A áno ak to má byť UNI, treba doplniť o ten cyklus. Tu sa už ale dostávame do bodu, kedy je zrejmé, že makrá sú vo väčšine špecializované, a snaha urobiť niečo absolútne UNI, to len zneprehľadňuje.

Na žiadosť do tejto starej témy pridávam príklad novo požadovaného riešenia, aj s logovaním.

Aké A42? Tam nezadávate oblasť dátumov, ale rozsah, teda prvý a posledný. Priložte príklad v súbore. A musíte zadať ešte 3. parameter 1, ktorý určí že víkend je Pia-Ned. A 4. parameter je oblasť so zoznamom sviatkov.

EDIT2: tak zadajte MAX() z rozsahu dátumov, napr.
=NETWORKDAYS.INTL(A13;MAX(A13:A43);1)


Strana:  1 ... « předchozí  76 77 78 79 80 81 82 83 84   další » ... 289

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

Tlac 2 roznych tabuliek

loksik.lubos • 17.7. 20:43

Týden v roce

Petr92 • 16.7. 15:34

Řazení podle času v kategoriích

veny • 16.7. 11:34

špatný výpočet ze zisku - příčina?

Anonym • 12.7. 22:56

špatný výpočet ze zisku - příčina?

Jakoby • 12.7. 12:35

Řazení podle času v kategoriích

Marekh • 12.7. 9:55

Porovnávací Tabulka

Jess • 8.7. 20:49