Za predpokladu, že sú tie hodnoty pre dané číslo práve 3, a za predpokladu, že je to tak, ako to máte v prílohe, teda, že je v stĺpci A:A to číslo iba pri prvej hodnote, a ďalšie 2 hodnoty pod tým nemajú to číslo. Ak je to inak, napr. tých hodnôt v B:B je neurčité množstvo, alebo má každá hodnota k číslu 1 iné umiestnenie a zároveň má pri sebe aj ten identifikátor 1, a pod., treba to urobiť inak, každopádne treba dať v tom prípade presnejší popis.
Ctrl+C - v novom zošite pravý klik na prvú ľavú bunku - Prilepiť špeciálne - Ponechať šírky zdroja. Skopíruje to hodnoty, formáty, šírky, vzorce, výplne, podmienené formátovanie, orámovanie, ...
Office 2019 (predpokladám, že aj 2016), ak dám Údaje - Z webu - ako zdrojovú adresu zadám
http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.jsp
OK - vyberiem strednú tabuľku "Platnost pro XYZ" - Upraviť - nabehne PowerQuery - vpravo mám Nastavenia dotazu - Vlastnosti - Názov - tam prepíšem aby ma nemýlilo to "Platnost pro 22 02 2019 Pořadí: 38" na "Kurz" - Zavrieť a načítať.
Vytvorí sa Tabuľka "Kurz", ktorá podľa mňa nieje napojená na určený dátum, ale na aktuálny kurz, lebo v kóde dotazu nieje špecifikovaný žiaden konkrétny dátum:
let
Zdroj = Web.Page(Web.Contents("http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.jsp")),
Data1 = Zdroj{1}[Data],
#"Zmenený typ" = Table.TransformColumnTypes(Data1,{{"země", type text}, {"měna", type text}, {"množství", Int64.Type}, {"kód", type text}, {"kurz", type number}})
in
#"Zmenený typ"
Iba aktualizujete Tabuľku "Kurz".
Cez INDEX+MATCH/POZVYHLEDAT alebo VLOOKUP/SVYHLEDAT si nájdete požadovaný kurz vzorcom. Prípadne si z PQ dotazu zmažte stĺpce, ktoré nepotrebujete, alebo vyfiltrujte iba jedinú položku, ktorú hľadáte.
EDIT: Pridal som nejaký ten príklad.
Príklad generovania do voliteľných multioblastí.
Funguje ? O tom pochybujem. V prvom zadaní je *0,75, v druhom /0,75.
Ak by sa jednalo vždy o násobenie (a nie v treťom prípade o delenie), tak je možností kvantum, napr.:
=K1*D9*IF(B9="B";0,5;IF(B9="O";1;IF(B9="K";0,75;0)))
=K1*D9*KDYŽ(B9="B";0,5;KDYŽ(B9="O";1;KDYŽ(B9="K";0,75;0)))
ak by bolo násobkov väčšie množstvo, tak ďalej napr.:
=IFERROR(K1*D9*INDEX({0,5;1;0,75};MATCH(B9;{"B";"O";"K"};0));"")
=IFERROR(K1*D9*INDEX({0,5;1;0,75};POZVYHLEDAT(B9;{"B";"O";"K"};0));"")
=IFERROR(K1*D9*CHOOSE(MATCH(B9;{"B";"O";"K"};0);0,5;1;0,75);"")
=IFERROR(K1*D9*ZVOLIT(POZVYHLEDAT(B9;{"B";"O";"K"};0);0,5;1;0,75);"")
=IFERROR(K1*D9*INDEX({0,5;1;0,75};SEARCH(B9;"BOK"));"")
=IFERROR(K1*D9*INDEX({0,5;1;0,75};HLEDAT(B9;"BOK"));"")
Alebo prípadne, ako sa to bežne robí, je prevodná tabuľka hodnôt (v tomto prípade násobičov).
V každom prípade si ošetrite cez Overenie dát, možnosť zadať iba povolené hodnoty do B9.
Ten 3. požadovaný výsledok, máte nesprávny :)
Zvládne to aj hromadnú zmenu.
1. Prečo spúšťate makro s názvom "Makro1" z modulu "Module1"? To je iba zabudnuté skúšobné makro z rekordéru makier, keď som si chcel nahrať ako vyzerajú parametre. Skutočné makro,"Worksheet_Calculate", ako som spomínal, je predsa v module listu "List4".
2. A to "Worksheet_Calculate" Vy nijako nespúšťate, to sa robí samé.
3. Čokoľvek kamkoľvek kopírujete, musíte si overiť, či sedia napr. rozsahy, adresy, názvy objektov a pod. Neviem, čo Vám tam robí chybu, a nechce sa mi skúmať. Prihoďte reálny súbor, v ktorom to nefunguje, a označte, zdrojové data, a na ďalší list dajte ako má presne vyzerať výsledok. Možno keď bude čas ...
Maticový vzorec (je v Definovanom názve),a potom len VLOOKUP/SVYHLEDAT. Mne sa nepáčia tie rozsahy čo tam máte. Niekde milión riadkov, inde 3000, potom 5500 alebo 3300, či ako to tam bolo...
Seznam_měřidel - som nastavil na 3000 dátových riadkov, aj rám aj Podmienený formát
Čeká na kalibraci - som nastavil na 1000 dátových riadkov, aj rám aj Podmienené formátovanie, odstránil som Overenie dát lebo v tomto liste je výpis, nemáte tam nič meniť, a zmenil formát posledných stĺpcov s dátumami.
Okrem VLOOKUP/SVYHLEDAT sa to dá aj tak, že by matica vracala nie číslo meradla, ale číslo riadku, a potom by sa ten VLOOKUP() vymenil za INDEX(). Možno to bude rýchlejšie, viď Čeká na kalibraci (2).
Jedine udalostné makro:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Jmeno As String
If Not Intersect(Cells(3, 2), Target) Is Nothing Then
Application.EnableEvents = False
On Error Resume Next
Jmeno = WorksheetFunction.VLookup(Cells(3, 2), wsData.ListObjects("tblHesla").DataBodyRange, 2, False)
Cells(3, 2) = IIf(Err.Number = 0, Jmeno, Empty)
Application.EnableEvents = True
End If
End Sub
Ten kód predsa musíte dať do listu "List4", lebo ten sa prepočítava, a pri tomto prepočítaní sa aktualizuje Textové pole v liste Hárok1, teda zmente tento riadok na :
With Hárok1.Shapes("txtPoleSpolu").TextFrame2.TextRange
Tieto riadky tam niesú potrebné ak nemeníte nikde farbu:
Dim text As String
.Font.Fill.ForeColor.RGB = RGB(0, 0, 0)
a 2x
.Fill.ForeColor.RGB = RGB(0, 0, 0)
Možno tak jedine udalostné makro ("Calculate"), vzorec tam nemôže byť.
No máte tam v S1
12Kč / likometr
nemá to byť
12Kč / kilometr
?
Hmm, no je pravda, že je to trochu svojsky riešené. To nieje výtka. Ja by som si vyberal napr aj mená z výberového zoznamu (Overenie dát) bez prepínania listu. Ak je potrebné veľmi často zadávať doteraz nepoužité mená, tak VBA formulárom. Každopádne teraz na to nemám chuť
Len 2 poznámky:
-To mazanie čo spomínate (a to len tipujem, neskúmal som) je možno tým, že nepoužívate premennú na uchovanie hodnoty, ale neustále hľadáte prvý voľný riadok v A. Ten nájde, ale ak zapíšete do A novú hodnotu, v ďalšom riadku kódu chcete písať do B, ale ako prvá prázdna bunka v A už nieje tá, ako pred chvíľou, lebo ste ju zapísal. A bunky treba zapísať naraz, nie po jednej.
-A druhá poznámka s tým súvisí, tie makrá by sa mali prepracovať. Dajú sa urobiť oveľa jednoduchšie, napr. mazanie hodnôt
Sub VYMAZ()
With ActiveSheet
.Unprotect "0000"
.Shapes(Application.Caller).TopLeftCell.Offset(0, -10).Resize(, 10).ClearContents
.Protect "0000"
End With
End Sub
alebo to pridávanie žiadosti:
Sub PRIDAJ_DO_ZOZNAMU_ZIADOSTI()
With ActiveSheet
If .Range("H2").Value = 47 Or .Range("I2").Value = 47 Or .Range("J2").Value = 47 Then Exit Sub
.Unprotect "0000"
.Cells(19, 1).End(xlDown).Offset(1, 0).Resize(, 9).Value = Array(.Cells(9, 2), .Cells(9, 3), .Cells(9, 6), .Cells(12, 2), .Cells(12, 3), .Cells(12, 6), .Cells(7, 2), .Cells(7, 9), .Cells(9, 9))
.Cells(2, 1).Resize(, 10).Formula = Array(0, 0, 0, "=C2/2", 0, "=E2/2", 0, 47, 47, 47)
.Protect "0000"
End With
End Sub
atď...
A opravte si tú kilometrovú sadzbu (opravte, nie upravte)
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.