Příspěvky uživatele


< návrat zpět

Strana:  « předchozí  1 2 3 4 5 6 7 8 9   další » ... 285

Odstraňovať Range s toľkými Areas má svoje limity. Riešením by bolo pole dát. Skúste si v tomto súbore vytvoriť tlačítkom "Vytvor" 300000 dát (množstvo zadajte v bunke L1) a potom použite tlačítko "Vymaž pole". V pohode. Pri použití "Vymaž RNG" na takéto množstvo, budete čakať veľa minút, a keď budete mať šťastie a Excel Vám nespadne, dočkáte sa rovnakého výsledku.

B-E
Ale to myslíte
aktuálne B - aktuálne E
alebo
aktuálne B - to E, na ktorom riadku sa našla hodnota A
???
=B3-IFERROR(VLOOKUP(A3;$D$3:$E$1000;2;FALSE);0)
=B3-IFERROR(SVYHLEDAT(A3;$D$3:$E$1000;2;NEPRAVDA);0)


a ten druhý vzorec
=IF(ISERROR(MATCH(D3;$A$3:$A$1000;0));E3;"")
=KDYŽ(JE.CHYBHODN(POZVYHLEDAT(D3;$A$3:$A$1000;0));E3;"")


A tie G:H nemyslíte náhodou takto?

S tým GT to bude na prd. Resp. konkrétne ja to neviem prispôsobiť, nepracujem s tým. Prvotná myšlienka - prerobiť vzorce na nižšiu úroveň vyzerala sľubne. No GT aj tak nedokáže správne interpretovať definované názvy s funkciami (tie nerozpozná vôbec, treba ich z menu prekonvertovať), a aj tak potom nefungujú. Obyčajné SMALL (čerpajúce z oblasti, nie z poľa) pretvára na matice.
Snáď je tu nieto zbehlejší v GT. V E všetko funguje (def. názvy, overenia, počítanie dátumov, podmienený formát, ...), podľa mňa aj v starých verziách, lebo nie sú použité žiadne pokročilé funkcie.
Tak nič, no ...

Ten zošit je robený pre Google Tabs, a nie pre Excel. {@__xludf.DUMMYFUNCTION("ARRAYFORMULA(...}.
Tie rolovacie menu práveže väčšinou idú. Ale sú nastavené na zlúčené bunky s viac prázdnymi riadkami a stĺpcami. Napr. "PLATFORMA" 10. riadok.
"TO-DO'S" tiež funguje, ale zdroj SETUP!AD29:AG48 je prázdny.
"PILLAR" alebo "STATUS" fungujú.
To čo nejde je "POST TYPE", lebo odkazuje na prevod Google funkcií do Excelu cez nejakú compatible knižnicu.
Navyše sú tam použité fnc, ktoré neobsahuje každý Excel (napr. SPLIT, SEQUENCE).

Neviem veru, ako vyriešiť takúto interkompatibilitu (Google - Excel - rôzne verzie).

EDIT:
Tie funkcie sú tam často zbytočné a niekedy až nepochopiteľné. Keďže tam máte všade obmedzený počet hodnôt, zároveň nie veľký, skúsim to prerobiť všetko pomocou pomocných stĺpcov a bázických funkcií, ktoré by mali byť kompatibilné snáď všade (IF, INDEX, COUNTIF, OFFSET, SMALL, ...). Teda žiadne JOIN/TEXTJOIN, SPLIT/TEXTSPLIT, SEQUENCE, FILTER ...

Skúsim sa tým dnes prehrabať, ale aj pochopiť želateľný výsledok je ťažké keď napr. používate UPPER() na dátum...
Uvidím, na čo ešte narazím. Zatiaľ nič nesľubujem, tak sa to nespoliehajte.

Ak by ste toho mali veľa, použite najskôr načítanie hodnôt do poľa naraz, potom zlúčenie oblastí cez UNION, a hromadné vyfarbenie 2 oblastí.
Farba v HEX tvare má vo VBA vymenené R s B. Teda namiesto &HRRGGBB je &HBBGGRR. Prípadne použite fnc RGB(Rint,Gint,Bint).

Chyba v makre sa nepotlačuje, ale rieši 1
A rieši sa s prílohou.

Ak viete, že budú max 3, tak so vzorcov môžete povynechávať počítanie čísla stĺpca aj čísla skupiny, prípadne aj odstup OBLID zhora môžete dať napevno 1, ak to tak je.

To už musíte použiť maticový vzorec (v príklade som vyplnil iba žlté, a červenú bunku zmenil na ukážku). Samozrejme treba zachovať rozloženie ako je, lebo sa s tým vo vzorcoch počíta (riadky, stĺpce). Počet tých štvorstĺpcových skupín v smere zľava->doprava treba nachystať dostatočný počet, ktorý môže nastať, ale zase nie nezmyselne, keď bude veľa riadkov aj stĺpcov, bude výpočet náročný. A potom, samozrejme, sa nemôžu tabuľky prekrývať!

A VLOOKUP/SVYHLEDAT nevyhovuje?

No omrknite. Aj s korekciou WB textu na tmavom/bledom podklade (našiel som na nete, príliš som netestoval).

Komu sa chce, môžete overiť a prerobiť hranicu medzi okresmi Kežmarok, Stará Ľubovňa, Sabinov (KK, SL, SB). Rôzne zdroje - rôzna hranica, ale mne sa s tým piplať už nechce.

Excel grafické prvky deformuje. Je to tabuľkový program, nie grafický editor. To je proste fakt. Tvar SK je cca 1:2,117. Tak si všetky okresy zoskupte (klik na jeden okres - Ctrl+A - pravý klik na označené okresy v mape - Zoskupiť - Zoskupiť), potom zmeňte šírku skupiny (Formát tvaru - Šírka) na 2,117 násobok výšky (nejde mi to zadať priamo číslom, tak klikaním na šípku dole), a následne skupinu rozpustite (pravý klik na skupinu - Zoskupiť - Oddeliť).
Získate tak reálnejšie proporcie výmenou za malé grafické nepresnosti na hraniciach okresov.

"Je na to nějaký fígl ?"
Áno, v rekurzii je - ByRef deklarácia premennej.
Ide len o to, ktorí predok má dostať zmenenú hodnotu. Každý? Ak iba priamy predok a nie aj ďalší pred ním, tak sa musí urobiť kópia premennej do lokálnej premennej a tá sa odošle ako ByRef parameter.
Uveďte presný príklad použitia a požadovaného správania, nech sa vysomárime.

Skúste si pozrieť ako funguje parameter
userInterfaceOnly:=True
pri zamykaní. Ale v makre bude musieť byť asi heslo.
Som len na mobile, możno dám večer príklad...

To bude veľmi záležať na tom ako to chcete použiť, čo od toho očakávate za funkcionalitu, aké chovanie napr. pri prázdnych bunkách, koľko to má mať parametrov (tu je príklad na multioblasti) ...

Veľkým problémom bude napr. napodobniť chovanie UNIQUE v E2021, kde sa výsledok na viac riadkov stane automaticky FormulaArray, a alokuje potrebný počet riadkov pod funkciou, a ten počet riadkov si pamätá a mení podľa potreby.
To je problém. Áno, do funkcie môžete pridať parameter referenčnej bunky od ktorej dole sa budú vypisovať jedinečné hodnoty, ale tá funkcia si ten počet nedokáže zapamätať. Iste môžete urobiť globálnu premennú, kde si to bude pamätať, ale stačí debugovať makro, a hodnota je fuč, stačí otvoriť súbor a hodnota nie je. Ako potom zisťovať pokiaľ boli vypísané minulé hodnoty? Čo ak sú pod tabuľkou iné dáta? Ak nie sú, tak je zasa problém použiť na zistenie posledného riadku xlUp pri použitom filtrovaní (v E2021 zase pre zmenu prestala fungovať doteraz spoľahlivá metóda zisťovania posledného riadku aj napriek filtru, a to cez Find, aj keď zase doprogramovávať funkciu UNIQUE v E2021 by bolo potrebné iba v špeciálnom prípade ako tu - multioblasti a pod), atď.

Problémov môže byť neúrekom. A to som sa zamyslel nad témou len trošku. Ako som písal - záleží na použití.

Public Function XUNIQUE(bBlank As Boolean, ParamArray paRNG()) As Variant
Dim RNG As Range
Dim cCol As New Collection
Dim aRes() As Variant, aVal() As Variant
Dim xRows As Long, xColumns As Integer, r As Long, c As Integer, i As Long

'pracuje i s nesouvislou multioblastí
For i = LBound(paRNG) To UBound(paRNG)
Set RNG = paRNG(i)

xRows = RNG.Rows.Count
xColumns = RNG.Columns.Count

'načtení hodnot
If xRows * xColumns = 1 Then
ReDim aVal(1 To 1, 1 To 1)
aVal(1, 1) = RNG.Value
Else
aVal = RNG.Value
End If

'kontrola jedinečnosti hodnot
On Error Resume Next
For c = 1 To xColumns
For r = 1 To xRows
'co s Empty a "" ?
If LenB(aVal(r, c)) > 0 Then
cCol.Add aVal(r, c), CStr(aVal(r, c))
ElseIf bBlank Then
cCol.Add "", ""
End If
Next r
Next c
On Error GoTo 0
Next i

If cCol.Count > 0 Then
ReDim aRes(1 To cCol.Count, 1 To 1)

'načtení jedinečních hodnot z kolekce
For r = 1 To cCol.Count
aRes(r, 1) = cCol(r)
Next r

XUNIQUE = aRes
Else
XUNIQUE = CVErr(xlErrNA)
End If

Set cCol = Nothing
End Function

A k čomu makro??? Veď tam dajte iba vzorec
=IF(COUNTIF(oblast;C3)>0;"JE TAM";"NENALEZENO")
=KDYŽ(COUNTIF(oblast;C3)>0;"JE TAM";"NENALEZENO")


ak rozdelené makro tak:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

' Tato buňka nebo oblast když se změní, spouští se makro
Set KeyCells = Range("C3")

If Not Intersect(KeyCells, Target) Is Nothing Then
' Následující makro se změnou buňky nebo oblasti spouští
Over KeyCells.Value
End If
End Sub


Sub Over(ByRef hodnota_bunky As Variant) 'ověří jestli se hodnota buňky nachází v oblasti
' Debug.Print hodnota_bunky

Application.EnableEvents = False
Range("A6").Value = IIf(IsError(Application.Match(hodnota_bunky, Range("oblast"), 0)), "NENALEZENO", "JE TAM")
Application.EnableEvents = True
End Sub

ak spojené tak
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range

' Tato buňka nebo oblast když se změní, spouští se makro
Set KeyCells = Range("C3")

If Not Intersect(KeyCells, Target) Is Nothing Then
' Následující makro se změnou buňky nebo oblasti spouští
' Debug.Print hodnota_bunky

Application.EnableEvents = False
Range("A6").Value = IIf(IsError(Application.Match(KeyCells.Value, Range("oblast"), 0)), "NENALEZENO", "JE TAM")
Application.EnableEvents = True
End If
End Sub


Strana:  « předchozí  1 2 3 4 5 6 7 8 9   další » ... 285

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

Čas od do

lubo • 19.4. 16:30

Makro smyčka

MilanKop • 19.4. 10:46

Makro smyčka

elninoslov • 19.4. 9:02

Čas od do

elninoslov • 19.4. 8:46

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32