Příspěvky uživatele


< návrat zpět

Strana:  1 ... « předchozí  231 232 233 234 235 236 237 238 239   další » ... 289

Len zo srandy som dal do kopy pár metód. Aj tie Vaše doterajšie som poupravil. Sú tam rôzne prípady použitia, aj jednoúčelové aj univerzálnejšie. Samozrejme, že sa nájdu aj iné spôsoby.

Ak som to správne pochopil, tak tu sú tiež 2 riešenia.

EDIT: Ešte som zabudol podotknúť, že v prílohe ste mali vypnuté počítanie vzorcov, a vo Výstupe ste mali viac riadkov ako vo Vstupe.

Z brucha na tablete:
Vo VBA pridajte Modul a vložte do neho
Function CHECKIMG(N As Range) As byte
CHECKIMG = (Len(Dir(ThisWorkbook.Path & "\Obrázky\" & N)) > 0) And 1
End Function

V zpšite potom túto UDF funkciu volajte vzorcom
=CHECKIMG(A1)
kde v A1 je názov obrázku napr. "abcd.jpg" a obrázky sú uložené v adresári zošitu v podadresári "Obrázky".

EDIT:
Alebo ešte s ošetrením toho, aby nedalo nič ak do vzorca vstupuje prázdny názov:
Function CHECKIMG(N As Range) As Variant
'Application.Volatile
If N = "" Then CHECKIMG = "": Exit Function
CHECKIMG = (Dir(ThisWorkbook.Path & "\Obrázky\" & N) <> "") And 1
End Function

Apostrof pred Application.Volatile dajte preč, ak chcete aby sa to prepočítavalo pri každej príležitosti.

Skúste si nahradiť
.Cells(N, 2).....
za
.Cells(N, 2).MergeArea.Copy Target.Offset(0, 1)
Target.RowHeight = .Cells(N, 2).MergeArea.RowHeight


Ale musíte mať aj v zdroji zlúčené bunky rovnako ako v cieľovej oblasti. Ak potrebujete druhý riadok v zlúčených zdrojových oblastiach, dajte medzi ne ľavý Alt+Enter.

@ ...Long... :Určite na to nabudúce tiež zabudnem :)
V predošlom príspevku som teda opravil obe moje chyby.

Ale myslím, že ste upozornili na tak veľa problémov s takouto opravou mien, že sa s tým naozaj neoplatí paprať. Lebo výsledok nemôže byť vždy správny. A kto bude kontrolovať či je 300 000 mien opravených správne ? ...

@ eLCHa:
Sub pok()
Dim odkial As Long
odkial = 32767 + 1
End Sub

To je celé. Nič viac. Hodí to Overflow... Musel sa nejak záhadne poškodiť u mňa Excel, to predsa nemôže byť logicky vysvetliteľné...

EDIT: odkial = CLng(32767) + 1 prejde OK
Ako po tom očúrať toto ?
Sub pok2()
Dim m(), r As Long
With Worksheets("Hárok1")
r = .Cells(Rows.Count, 5).End(xlUp).Row - 1 'napr. r=300000
'ReDim m(1 To r, 1 To 1) 'Je jedno či tam je Redim alebo nie.
m = .Cells(2, 5).Resize(r).Value
'm(32768)=chyba
End With
End Sub

Sákriš, to sú mi veci...

EDIT2: Vprvom príklade pomôže:
odkial = CLng(32768)
V druhom príklade mám chybu, preto to nejde. Uvádzam samostatne, aby bolo viditeľné o čom hovorím. Chýba tam index poľa:
m(32768, 1)=chyba

Urobil som už 2 verzie makra, ktoré odstráni viacpísmenné preklepy, ale obe verzie nepochopiteľne narážajú na nelogickú chybu. Ak sfunkčním toto, potom mám v pláne porovnávať správne mená hľadaním v "pochybnom" mene, od najdlhšieho správneho (kvôli nájdeniu najskôr "Jana" až potom "Jan").
Zatiaľ som nevymyslel metódu na opravu "Petrer". Možno na to budú odborníci niečo vedieť, lebo mňa napadlo, len porovnať počet zhodných písmen so správnymi menami. Ale to ešte neriešim...

Ale k tej nepochopiteľnej chybe. Nemôžem počítať viac ako do 32767 5
stačí keď dám
Dim odkial as Long
odkial = 32767 + 1

a dostanem chybu OverFlow 9
Čo je toto za sprostosť ?

Presne tak. tento vzorec, ktorý spomínate, uviedol
buger(29.1.2016 20:08)
a ja som ho pridal k môjmu iba pre porovnanie.
Teda moje riešenie je v F1:H1
a to od "buger", pre porovnanie v F2:H2.

Ja neviem, možno by to šlo inak, takto ma to napadlo, zdalo sa mi to funkčné, tak som to poslal. Ale máte pravdu, že často robím veci príííliš zložito, ale zrovna teraz to nieje až také blbé, snáď 1

EDIT:
Ešte ma napadlo a pár znakov skrátiť toto
=CHOOSE(IF(Hárok1!$F$1="Zoznam B";1;2);ZoznamB;ZoznamD)
na toto
=CHOOSE((Hárok1!$F$1="Zoznam B")+1;ZoznamD;ZoznamB)

1. časť otázky: Jedno je dokument Wordu a jedno zošit Excelu. Všetko je vy-X-ované. Nikto nevie čo odkiaľ a kam má ísť. Žiadne hlavičky tam nemáte. V tomto by som ale aj tak nevedel poradiť, aj keby ste to popísali a poslali zrozumiteľné.

2. časť otázky: Napr. takto:
=ROUNDDOWN(A1+0,05;1)
formát bunky si nastavte na Číslo s 2 desatinnými miestami.

@vovka.h:
Dlhé ?
Toto sú všetky vzorce, ktoré som použil, teda bunky aj Definované oblasti aj PF:
SK
=IFERROR(OFFSET(Vyber;MATCH($G$1;Vyber;0)-1;-1;1;);"")
=CHOOSE(IF(Hárok1!$F$1="Zoznam B";1;2);ZoznamB;ZoznamD)
=Hárok1!$B$2:$B$4
=Hárok1!$D$2:$D$4
=ISERROR(MATCH($G$1;Vyber;0))


CZ
=CHYBHODN(POSUN(Vyber;POZVYHLEDAT($G$1;Vyber;0)-1;-1;1;);"")
=ZVOLIT(KDYŽ(Hárok1!$F$1="Zoznam B";1;2);ZoznamB;ZoznamD)
=Hárok1!$B$2:$B$4
=Hárok1!$D$2:$D$4
=JE.CHYBHODN(POZVYHLEDAT($G$1;Vyber;0))

Pozrite iba to moje riešenie v F1 a G1. Mne to nepripadá dlhé, robím často (zbytočne) oveľa dlhšie...
V F2 a G2 je len na porovnanie aplikované riešenie od kolegu "buger".

@buger:
Toto sa dá riešiť jedine makrom, lebo Overenie nemá takú funkciu, aby odstránilo hodnotu, ktorá v bunke je. To PF som Vám tak pridal presne preto, ak by ste nechceli/nemohli použiť makro, tak aby Vám do očí udrelo, že hodnotu treba zmeniť.
To Vaše makro môže byť. Volá sa ale 2x. Lebo ClearContents vyvolá ďalšie spustenie OnChange. Buď to obalíte do
Application.EnableEvents = false
...
Application.EnableEvents = true
alebo to necháte tak. Neviem čo bude rýchlejšie.

Ďalej ak by mohol nastať prípad, že sa zmení bunka s hlavným zoznamom spoločne s inými bunkami naraz (mazanie, kopírovanie,...) tak to treba ošetriť v OnChange nie porovnaním priamej adresy, ale cez Intersect...

Proste záleží na tom, ako sa to bude používať. Použitím makra v OnChange, prichádzate o Undo.

Ak by išlo o to, aby ten vzorec nepôsobil dlhý, zložitý, mätúci, tak si výber oblasti (v mojom prípade) urobte pomocou Definovanej oblasti.
CHOOSE/ZVOLIT namiesto INDIRECT/NEPŘÍMÝ.ODKAZ Vám umožňuje mať v bunke s prvým výberom slová oddelené medzerami.
Dá sa tam prirobiť viac vecí, napr. rozsahy môžu byť dynamické, alebo to môže byť urobené ako kopírovateľný vzorec...

Viď napr. tu nedávno.
Pred čiarkou sú dni
dni = 0
po čiarke nasleduje desatinná časť dňa, ktorú keď vynásobíme 24 zostane nám pred čiarkou hodnota minút.
Zostatok za čiarkou opäť vynásobíme 60 a celá časť sú sekundy. Snáď som sa nedoplietol.
Na tomto príklade je pekne vidieť to Excelovské automatické zaokrúhľovanie (v tomto prípad sekundy).
Riešenie je v danom linku.

To môže byť veľa riešení. Tu som si napr. pomohol CHOOSE, MATCH, OFFSET, IFERROR (ZVOLIT, POZVYHLEDAT, POSUN, CHYBHODN) ... a podmienené formátovanie

Takto by ste si napr mohli vypočítať oblasť rozsahu (môžu byť medzi tým prázdne riadky):
{A1:INDEX(A1:A1000;MAX(NOT(ISBLANK(A1:A1000))*ROW(A1:A1000)))}
{A1:INDEX(A1:A1000;MAX(NE(JE.PRÁZDNÉ(A1:A1000))*ŘÁDEK(A1:A1000)))}

dajte to do SUM/SUMA
{SUM(A1:INDEX(A1:A1000;MAX(NOT(ISBLANK(A1:A1000))*ROW(A1:A1000))))}
{SUMA(A1:INDEX(A1:A1000;MAX(NE(JE.PRÁZDNÉ(A1:A1000))*ŘÁDEK(A1:A1000))))}

alebo do SUMIFS, tu nepoznám Vaše podmienky, preto aby Vás vzorec nemýlil, tak si Výpočet rozsahu dajte do definovanej oblasti "RNG"
=$A$1:INDEX($A$1:$A$1000;MAX(NOT(ISBLANK($A$1:$A$1000))*ROW($A$1:$A$1000)))
=$A$1:INDEX($A$1:$A$1000;MAX(NE(JE.PRÁZDNÉ($A$1:$A$1000))*ŘÁDEK($A$1:$A$1000)))

a SUMIFS napr
{=SUMIFS(RNG;RNG;"<>"&88)}

To je len úvaha/tip, netuším Vaše použitie. Pozor na to, je to maticový vzorec Ctrl+Shift+Enter)

Ale najlepšia bude Tabuľka - objekt.

A aký vplyv má mať na zelené/červené v C10:I10, ten riadok OK/NG ?

EDIT: Ak musí byť splnené to, že musia byť zelené všetky hodnoty a zároveň posledné musí byť OK, tak napr. takto


Strana:  1 ... « předchozí  231 232 233 234 235 236 237 238 239   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

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

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

veny • 6.7. 8:28