Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  123 124 125 126 127 128 129 130 131   další » ... 286

To mi príde trochu nezmyselné. Modelový príklad:
-naskladním 29.4.2019
-vyskladním 20.5.2019
-počet dní zadara bude v 4/2019 - 14 dní (cena za deň 30)
-počet dní zadara bude v 5/2019 - 10 dní (cena za deň 20)
-Ako to budem počítať?
Totiž tých 14 dní zadara, ktoré platili v dobe naskladnenia (29.4.2019) by mali byť až do 12.5.2019.
Lenže v 5/2019 platí, že zadara je len 10 dní, teda do 10.5.2019. To ale odporuje podmienkam, aké boli pri naskladnení.
Rovnaký rozkol je v cene. Aká cena sa bude počítať od 1.5.2019 do 10.5.2019 (alebo do 12.5.2019 podľa toho ako sa rozsekne predošlí rozkol) ? A prípadne aká bude cena od 11.5.2019 - 12.5.2019 ?

Ak nemáte nový Office 365 s novou funkciou MINIFS a MAXIFS tak použite tú KT. ak to chcete vzorcom a bez matice, tak potom asi jedine tú maticu schovať do Definovaného názvu:
DEFMIN
=MIN(IF(TabData[sloučit]=data!$G2;TabData[Cena]))
=MIN(KDYŽ(TabData[sloučit]=data!$G2;TabData[Cena]))

DEFMAX
=MAX(IF(TabData[sloučit]=data!$G2;TabData[Cena]))
=MAX(KDYŽ(TabData[sloučit]=data!$G2;TabData[Cena]))

a v tabuľke použiť už nematicový vzorec
=DEFMIN
=DEFMAX

Alebo z tej KT cez GETPIVOTDATA načítajte výsledky do tej Vašej Tabuľky.
Všetko v prílohe.

Ak sa pozriete do prílohy, zistíte, že je to maticový vzorec (info doplním aj hore), a že je tam aj KT na ukážku.

Myslíte totok (maticový vzorec zadávame pomocou Ctrl+Shift+Enter) ?
=MIN(IF([sloučit]=[@sloučit];[Cena]))
=MIN(KDYŽ([sloučit]=[@sloučit];[Cena]))

=MAX(IF([sloučit]=[@sloučit];[Cena]))
=MAX(KDYŽ([sloučit]=[@sloučit];[Cena]))

alebo nejakú KT?

No pár chýb ste narobil, ale aj tak obdivujem, že ste sa vôbec pustil do dekódovania hrozne zložitých vzorcov.
Napr. Zmenil ste písmenko v CELKEM_INDEXY_VAD na CELKEM_INEXY_VAD, Boli tam použité v podmienkach ODDELENIE vs LIST, a ešte niečo čo som zabudol čo to bolo, to som odstránil ako prvé. Teraz sa zdá, že to funguje.

Skúste, či je to vončo...

Ale on nechce celý riadok, ale len oblasť. Na ohraničenú oblasť funguje takéto niečo:
Public Function PoslednaBunka(Oblast As Range) As Range
Dim Bunka As Range

Set Oblast = Oblast.Areas(1).Rows(1)
Set Bunka = Oblast.Cells(Oblast.Cells.Count)

If Not IsEmpty(Bunka) Then
Set PoslednaBunka = Bunka
Else
Set PoslednaBunka = Oblast.Find(What:="*", After:=Bunka, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
End If
End Function

Vyberie si prvú Area (podoblasť v prípade multivýberu) a jej prvý riadok. A tam zistí poslednú vyplnenú bunku. Ak nieje žiadna vyplnená tak Nothing. Myslím, že na toto ste sa pýtal.

Lebo to nieje obyčajná medzera (kód 32), ale tzv "pevná medzera" (kód 160).
Ako oddeľovač dajte položku "Iné" a v políčku podržte Alt+0160.

To je ale normálna vlastnosť, že nejdú použiť všetky funkcie priamo v Overení dát. Prečo Vám nevyhovuje Definovaný názov ?
Inak priložte radšej nejakú prílohu s príkladom.

"For Each" je väčšinou zaužívaná pre použitie s objektami (napr. bunkami), "For i" väčšinou s poľami. Tu som použil pole, lebo načítanie poľa o veľkosti tisícov buniek trvá okamžik, kdežto prechádzanie tisícov buniek po jednej trvá dlho. V tomto prípade sa dá tiež "For Each" použiť na pole, ale musí sa definovať ďalšia Variantná premenná na položku poľa, a v cykle použiť napr. i = i + 1, aby sme mali čítač pre indexáciu buniek, lebo keby sme po jednej bunke aj mazali, tak to je pri veľa bunkách ešte pomalšie. Takže to i by sme použili na "nahromadenie" buniek v RNG oblasti a následné zmazanie naraz. Toľko na vysvetlenie dôvodov, čo ma viedli k uvedenému príkladu :)

Ak je to len 10 riadkov, tak je to šumák, ale ak by tých riadkov bolo veľa, tak bude táto metóda pomalá. V tom prípade by som použil takéto niečo (použite buď to InStr alebo Like):
Private Sub CommandButton15_Click()
Dim RNG As Range, D(), Radku As Long, i As Long

Radku = Cells(Rows.Count, 1).End(xlUp).Row
If Radku = 1 Then
ReDim D(1 To 1, 1 To 1): D(1, 1) = Cells(1, 1).Value
Else
D = Cells(1, 1).Resize(Radku).Value
End If

For i = 1 To Radku
If InStr(1, D(i, 1), "^") = 0 Then
'If Not D(i, 1) Like "*^*" Then
If RNG Is Nothing Then Set RNG = Cells(i, 1) Else Set RNG = Union(RNG, Cells(i, 1))
End If
Next i

If Not RNG Is Nothing Then RNG.ClearContents
End Sub

Dá sa to samozrejme rozšíriť aj tak, že validné riadky zapíše pod seba bez medzier vzniknutých po mazaní nevalidných.

To je len 1 riadok s premennou.

???

Skúste takéto niečo na rýchlo. Dvojklik na dátum v riadku 7, 26, 45 importne súbor s daným dátumom ak existuje v adresári s týmto súborom.

Možno by to šlo aj tak, že by sa pre každú položku z desiatich počítal vo vedľajšom skrytom liste samostatný zoznam, na základe predošlých položiek. Boli by to ale veľmi komplikované vzorce (už som sem kedysi dával obdobný podmienený meniaci sa zoznam na položky, ktoré sa mohli vyskytnúť len raz). Ale hláška by nevyskakovala, len by to nedovolilo vybrať takú položku, a predtým zadané nevalidné by podfarbilo.

Skôr by som to ale riešil asi makrom. Tam može aj vyskakovať hláška. Ak teda makro môže byť. Môže?

Nepochopil som ako sa majú tie ceny kopírovať, či cez seba, či pod seba, alebo ako. Každopádne tu máte 2 spôsoby. Pozor si dajte na také kiksy, ako že List1 sa volá na ušku "List2" a opačne List2 sa volá na ušku "List1". To potom v makre mätie (opravil som to, aj nahodil logickejšie pomenovanie prvkov).


Strana:  1 ... « předchozí  123 124 125 126 127 128 129 130 131   další » ... 286

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