Polovičku otázky nechápem. Nahradenie VLOOKUP je mnohonásobná vec, kdežto výpis vyhľadanej hodnoty na iný list je jednorázová vec.
Tu máte makro, ktoré prehľadá celú zvolenú oblasť (nastavíte pomocou konštánt) v Hárok1 a vypíše celý riadok s nájdenou hodnotou na prvý voľný riadok v liste Zhoda.
Dodajte prílohu s lepším popisom a bude sa tvoriť ľahšie.
Inak samotné vyvolanie natívneho okna Find:
Application.CommandBars.FindControl(ID:=1849).Execute
alebo
Application.Dialogs(xlDialogFormulaFind).Show
ale použiť ich programovo na hľadanie a vracanie výsledku neviem.
EDIT: Alebo použite túto UDF funkciu:
Function FULLLOOKUP(Co As Variant, Kde As Range, Stlpec As Integer) As Variant
Dim r As Long
On Error Resume Next 'Hľadanie hodnoty
r = Kde.Find(What:=Co, LookIn:=xlValues, LookAt:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False).Row
On Error GoTo 0 'Vrátenie odchytenia chyby
If r = 0 Then FULLLOOKUP = CVErr(xlErrNA) Else FULLLOOKUP = Kde.Parent.Cells(r, Stlpec).Value 'Vráť hodnotu zo zadaného stĺpca v najdenom riadku
End Function
=PROPER(B36)
Určite na to potrebujete makro ? Tu máte vzorec, keď prídem urobím Vám aj to makro.
EDIT:
Makro, ak tomu nebudete rozumieť, rozsekám Vám to na drobné :
Sub Tlačidlo1_Kliknúť()
With Worksheets("H")
If Not IsError(Application.Match(.Cells(3, 3).Value, Worksheets("H2").Columns(WorksheetFunction.Match(.Cells(2, 3).Value, Worksheets("H2").Cells(1, 1).Resize(1, 6).Value, 0)), 0)) Then MsgBox ("Číslo sa nachádza v zadanej oblasti.")
End With
End Sub
Toto Vám bude brať v úvahu iba zvolenú oblasť, nastavíte si veľkosť písma pre väčšiu, menšiu a rovnú hodnotu, vysporiada sa to aj s kopírovaním viac buniek naraz (aj cez hranicu oblasti), ignoruje "" a text, mení všetko naraz.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Oblast As Range, Bunka As Range, ZmenitV As Range, ZmenitM As Range, ZmenitN As Range
Const VACSIE = 12
Const MENSIE = 8
Const ROVNE = 10
Const HRANICA = 10
Set Oblast = Range("A1:C10")
On Error Resume Next
For Each Bunka In Target
If Union(Oblast, Bunka).Address = Oblast.Address And Bunka <> "" And IsNumeric(Bunka) Then
Select Case True
Case Bunka.Value > HRANICA: If ZmenitV Is Nothing Then Set ZmenitV = Bunka Else Set ZmenitV = Union(ZmenitV, Bunka)
Case Bunka.Value < HRANICA: If ZmenitM Is Nothing Then Set ZmenitM = Bunka Else Set ZmenitM = Union(ZmenitM, Bunka)
Case Bunka.Value = HRANICA: If ZmenitN Is Nothing Then Set ZmenitN = Bunka Else Set ZmenitN = Union(ZmenitN, Bunka)
End Select
End If
Next Bunka
ZmenitV.Font.Size = VACSIE
ZmenitM.Font.Size = MENSIE
ZmenitN.Font.Size = ROVNE
On Error GoTo 0
End Sub
Vo Win by to mohlo ísť zmeniť takto (popis na Win 8.1.1):
- Štart, napíšeme "zmeniť formát" a prvá nájdená položka je "Zmeniť formát dátumu, času alebo čísiel", otvoríme.
- Tlačítko "Ďalšie nastavenia"
- Zmeníme "Oddeľovač desatinných miest" na "." a "Oddeľovač v zoznamoch" na ",".
Ja to skúšať nejdem, ale kto chce ...
Otázka je, či to bude akceptovať Office čo je tak 50/50.
@lubo: pravda, na to som nepomyslel. Vovka dal správne riešenie.
Napr.
Počíta s nerovnakým počtom riadkov v A a B, eliminuje zápis prázdneho riadku (ak niesú data), zápis robí naraz a bez úvodzoviek na začiatku a konci, ako oddeľovač som použil ";", desatinné čísla vloží s "," (teda aspoň u mňa).
PS: to vyhľadanie posledného riadku by som riešil asi cez FIND metódu, nie takto, to som si len pracovne rýchlo urobil a nechal tam.
Alebo
Cells(1, 4) = Cells(1, 1).Text
Ja by som to urobil takto, s ochranou pred chybou napr. pri vymazaní bunky, s dynamickým zoznamom, s automatickým načítaním listov a s kontrolou existencie hodnoty v zozname.
Ak by ste chcel načítať plnú tabuľku dát z ext súboru, tak by som doporučil toto.
Považujme teda D6 za odkaz na ľavú-hornú bunku dát v zošitoch. Makro sa spustí pri zmene mesiaca alebo roku. Berie údaj o adresári so zošitmi z bunky F41.
A ak by ste mala záujem o to makro, tak tu je. Kopíruje celé polia naraz, je to veľmi rýchle. Nevšíma si iba list s názvom "Spolu", ale ak chcete aby si nevšímal aj iné listy, tak doplním do makra ešte jednu funkciu. Pracuje iba s hodnotami, a bez medzier. Aktualizácia dát prebehne kliknutím na tlačítko Aktualizovať. Jednoduché.
PS: Ale raz sa tie SQL budem musieť naučiť
Takto ?
Ak sa Vám črtá nejaké riešenie, mám sa tomu ešte vôbec venovať? Nemám totiž v týchto dňoch vôbec čas, a od vtedy čo som postol návrh som okolo toho ani nešiel.
Takto je to tiež urobené tak, aby na každej brigáde boli dostupné iba mená, ktoré sú reálne dostupné podľa nastavenia pri každom mene, že kedy kto môže. Funguje aj upozorňovanie na to, ak už niekto z validných mien je v daný deň na inej brigáde. Všetko OK, do momentu, keď si to niekto rozmyslí, zavolá Vám, že v nejaký deň nemôže, vy ho pri jeho mene odškrtnete na daný deň, samozrejme sa aktualizujú zoznamy dostupnosti ľudí, a nastane pohroma, pretože v tých listoch kde figuroval ako dostupný sa všetko posunie. Čiže ak škrtneme prvého dostupného na nejaký deň, tak zaškrtávacie políčka v listoch brigád ostanú neposunuté = budú ukazovať na iné meno. Nejdem to teraz skúšať, ale myslím, že zaškrtnutie CB nevyvolá OnChange. Takže ďalší problém. Rozbalovacie zoznamy to v tomto stave nevyriešia, dynamicky nevymaže totiž neplatnú hodnotu.
Neviem, budem si to musieť celé znovu premyslieť, ale už sa mi s tým prestáva chcieť piplať... no uvidíme.
To bude podstatne zložitejšie. Ide o to, že sa musí kontrolovať, ktorí ľudia sú na aký dátum dostupní. Ďalej sa musí kontrolovať či sú títo dostupní ľudia už v niektorom liste (neznámy počet aj názvy) zapísaný na brigádu, okrem listu samotného v ktorom práve ste. A v jeden deň môže byť viac brigád, teda sa nesmie zo zoznamu dostupných ľudí prihlásený na jednu brigádu vymazať, lebo môže byť aj na inú prihlásený v ten istý deň. Najjednoduchšie by to bolo asi makrom celé riešiť. Zatiaľ sa snažím čo najviac vykryť vzorcami, ale prestáva sa mi to pomaly páčiť. Práve riešim tú kontrolu v iných zošitoch.
Bez kombinácie makro-vzorec sa to neobíde. Aspoň zisťovanie listov musí urobiť makro, a vytváranie nových listov brigád tiež.
EDIT: Moja prvá rozpracovaná (!) verzia.
Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.
Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.