Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  274 275 276 277 278 279 280 281 282   další » ... 289

Nenapadá ma, ako inak vyriešiť sviatky, ako takto (tým nevravím, že to nejde). Klasické funkcie fungujú na uložených sviatkoch v bunkách vrátane rokov. To je ale problém, keďže u teba sa môže rok zmeniť. Takže som to narýchlo vyriešil takto. Veľká noc je tam testovaná samostatne lebo je počítaná, a k tomu je pridané hľadanie TEXTOVEJ (!) hodnoty zloženej zo dňa, bodky a mesiaca medzi TEXTOVÝMI hodnotami v sviatkoch.

Nech sa páči.

Úprava

Kopírovanie všetkých buniek aj s formátovaním, šírkou stĺpcov, výškou riadkov, atď, je ošemetné. Urob kópiu listu.

Waw! To som nečakal, že niekto porozumie tým mojím neprehľadným vzorcom. Super.
Popísal si účel tých Definovaných názvov presne až na
KPracDob - zjistí začátek pracovní doby (tam má byť koniec, ale to máš určite len preklep)
a ešte ti v Tvojom výpise chýba
VPD - počet minút V Pracovnej Dobe

Do detailu sa mi to popisovať nechce, skúsim len načrtnúť:
-PredPD,VPD,PoPD - všetky 3 analogicky - napr. PredPD si najskôr zistí, či je začiatok času pred PD, ak nie, musí dať 0 min. Ak je zadaný začiatok pred PD, tak si musí zistiť, či je konečný čas tiež pred PD. Ak áno tak ohraničenie musí tvoriť práve konečný čas a nie začiatok PD. Proste sa musí najskôr určiť, čo od čoho odrátame, aby sme získali potrebné minúty každej kategórie.

-CVPD - určuje, koľko minút je v PD účtovateľných po odrátaní minút, ktoré presahujú z prípadne započatého 15 min intervalu ešte pred PD. Čiže najskôr si zistí, či pred PD nejaké minúty sú, ak áno vypočíta počet započatých intervalov, a ak zostáva doúčtovať nejaké minúty v PD, musí ich od VPD odrátať, aby neboli účtované 2x. Samozrejme odráta, iba v prípade, že má z čoho odrátať. Takto dostaneš skutočne účtovateľné minúty v PD.

-CPoPD - analogicky s CVPD, pretože tu musíme zase v prípade potreby odrátať to čo presahuje z PD do doby po PD.

-PredPD15M,VPD15M,PoPD15M - už iba ak nejaké minúty sú v danej kategórii účtovateľné, tak ich vydelí 15-kou a celočíselná časť je počet intervalov. Ale musí tam byť použitá malá finta, a to, že sa zistí, či delením vznikne nejaký zvyšok, ak áno znamená to, že je tam nejaký nedokončený interval, a preto sa delenému počtu pripočíta 15, a dostaneš správny počet započatých intervalov.

-Castka - to má najjednoduchšie. Iba zistí či sa nejedná o víkend, ak áno tak všetky kategórie spolu vynásobí sadzbou mimo PD (lebo máš pracovnú dobu 00:00-00:00, a tak je akýkoľvek čas po PD). Ak tam tie 00:00 budeš mať, tak môžeš prvú časť (TRUE) v IF vo vzorci Castka zmeniť na
PoPD15M*SazMPD, lebo cez víkend je všetko po PD. Ale to je len maličkosť.

Neviem, no ..., však čo ti mám ešte vysvetliť? Keď si pochopil na čo tie vzorce sú, tak je to super. Pretože je často veeeľmi ťažké sa vžiť do mysle tvorcu, že ako to myslel.

Takmer hocičo 1

No to ja predsa viem, že je to zle, veď to píšem. Takže, môj posledný počin, podľa mňa funkčný, otestuj, daj vedieť. Síce pochybujem že sa bude niekto vyznať v tých komplikovaných vzorcoch (keď nebol pri ich zrode), ale pokús sa prípadne si to už upraviť sám. Zabil som s tým dnešok...

To červené vymaž, to je iba na kontrolu, spomaľuje to už aj tak pomalé vypočítavanie zložitých podmienok a vzorcov, lebo to robí kvôli znázorneniu násobkov opakovane.

Tvoj riadok upravený na volanie funkcie, ktorá ruší diakritiku a zároveň predpripraví texty na veľké písmená
If BezDiakritiky(Sheets("prvni").Cells(1, 1).Value) Like BezDiakritiky("*" + Sheets("druhy").Cells(1, 1) + "*") Then

samotná funkcia - počíta s CZ a SK znakmi (ak som na nejaký zabudol, doplň si, ale veľké písmeno !)
Function BezDiakritiky(text As String) As String
Dim i As Integer
Const Diak = "ÁÄČĎÉĚÍĹĽŇÓÔŔŘŠŤÚŮÝŽ"
Const bDiak = "AACDEEILLNOORRSTUUYZ"
If IsNull(text) Then text = ""
If text = "" Then Exit Function
BezDiakritiky = UCase(text)
For i = 1 To Len(Diak)
BezDiakritiky = Replace(BezDiakritiky, Mid(Diak, i, 1), Mid(bDiak, i, 1))
Next i
End Function

Ešte raz opakujem, táto fnc je šitá na mieru presne pre Tvoj prípad, keď potrebuješ aj zmenu na veľké písmená (kvôli Like) aj zrušenie diakritiky. Ak by si chcel univerzálnu funkciu, musíš vynechať UCase a doplniť konštanty o malé písmená = 2x tak dlhý výpočet.

Dim prvnicislo As Long, sloupecjc As Long
prvnicislo = Range("H5").Value
sloupecjc = Range("H3").Value
Cells(4, 4).FormulaR1C1 = "=IF(R" & prvnicislo + 5 & "C" & sloupecjc - 5 & "="""","""",666)"

Za to 666 si dosaď tú ďalšiu subpodmienku alebo čo ti to tam začína.

If UCase(Sheets("prvni").Cells(1, 1).Value) Like UCase("*" + Sheets("druhy").Cells(1, 1) + "*") Then

A načo zakladáš nové vlákno ? To si mal napísať do toho predošlého.

No to si tak jednoducho iba predstavuješ.
- Ten INT() vo vzorci je na čo ? Má korigovať nepresnosť pri zaokrúhľovaní výpočtov ? Tak na to práve nefunguje. Na 14-tom desatinnom mieste vzniká niekedy 1, čo CEILING samozrejme promptne vyhodnotí ako ďalšiu štvrťhodinku. To som vyriešil nahradením INT() za 0,00000000000001.
- Vytvoril som pre zjednodušené vytvorenie výpočtu sústavu Názvov so vzorcami. Zdajú sa trošku komplikovanejšie. Prečo - viď ďalší bod.
- Ty musím počítať s množstvom eventualít (PP=pracovná doba):
---začiatok je pred PP, koniec je pred PP
---začiatok je pred PP, koniec je počas PP
---začiatok je pred PP, koniec je po PP
---začiatok je počas PP, koniec je počas PP
---začiatok je počas PP, koniec je po PP
---začiatok je po PP, koniec je po PP
-Moje vzorce fungujú logicky v poriadku, tak ako znie zadanie - doslova. A to je ten problém. Rozpísal som tam ten prípad, keď 6-ta 15 minútovka začína počas PP, ale končí po PP. Za započatú 15 minútovku je potom logicky započítaná za obe sadzby. Riešenie som zatiaľ nevymyslel, a po vlastne zbytočnej snahe sa mi ho ani popravde nechce hľadať - zatiaľ.

Noo, pekné riešenie. Len treba predeklarovať funkcie pomocou "PtrSafe" na 64-bitových Office. Celé makro treba vyselektovať z množstva pre tento účel nepotrebných modulov a frms a zmeniť odkazy na sheets podľa potreby. Pekné. Škoda, že sa to nedá exnúť kliknutím mimo frm, ale len na X. Ale aj to by sa dalo asi Hook-nuť.

MID vyberie z textu nejakú časť.
MID("fero",2,3) urobí to, že z textu "fero" vyberie text, ktorý začína na znaku 2 a dĺžka vybraného textu bude 3.
Čiže výsledok = "ero"
V Tvojom prípade ale potrebuješ ešte pred a za touto vybranou časťou textu "*". Tak ich pred fnc aj za fnc MID prirátaš.
Na "prirátanie" (zlučovanie) textu by sa mal ale používať "&" a nie "+".

EDIT: Po opätovnom prečtaní dotazu si ale myslím, že dotaz bol myslený tak, že v liste "druhy" máš to čo chceš hľadať v "prvni". V tomto prípade nepotrebuješ fnc MID, ale iba pridáš "*"
If Sheets("prvni").Cells(1, 1).Value Like ("*" & Sheets("druhy").Cells(1, 1) & "*") Then

OK. Tak potom
ThisWorkbook.Save
funguje tak ako chceš.
Ešte tam vidím drobnosť. Ak chceš ukladať záznamy už od riadku 1, musíš výpočet posledného riadku upraviť napr takto
Radek = Cells(65000, 1).End(xlUp).Row + IIf(IsEmpty(Cells(1, 1)), 0, 1)
Už som to tu písal niekde, že ak je 1. riadok prázdny xlUp vráti 1, rovnako ako keď je 1. riadok plný. Ak budeš ukladať až od druhého riadku (v prvom je napr. titulok stĺpca), tak to môže byť ako si to mal. Toto riešenie čo uvádzam, funguje v oboch prípadoch.

Moje nervy, jednoznačnejší popis problému, a bolo by to ľahšie.

No vyskúšaj teda toto. Testuje to existenciu listov "Výrobna 1", "Výrobna 2", "Výrobna 3", "Výrobna 4". Overí, či je v B13 hodnota. Potom skopíruje data do jediného listu "Souhrn" v zošite "Souhrn.xls", a to v takom poradí, že najskôr všetky validné listy v spomínanom poradí z jedného súboru, až potom to isté z ďalšieho súboru. Všetko pod seba do jednej tabuľky.


Strana:  1 ... « předchozí  274 275 276 277 278 279 280 281 282   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

Ř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

Vzorec pro zkopírování obsahu buňky.

veny • 6.7. 8:28

Vzorec pro zkopírování obsahu buňky.

Tonda_Hu • 5.7. 21:17