

Tabulka vyhledávání
Ahoj te, můžete mě, prosím pomoci s makrem manželka by potřebovala tabulku kde bude zapisovat údaje klientů, protože jich má hodně tak aby to vyhledávalo bohužel si dál si nevím rady.
zkouším to jak se dá, ale nejde mě to. Tak jsem si řekl, že napíši sem i když manželka moc nevěří, že by stým někdo pomohl ale já jo snad se někdo najde v dnešní době a pomůže.
Chtěl bych Vás požádat o pomoc mám Excel a makro na vyhledávání posílám přílohu
Za 1. Vyhledává to jen do K6 a nejde vyhledávat v buňkách L6 až P6
Za 2. Vyhledává to se sešitu Data pouze do 10 v poli zadám 11 a už to nevyhledá potřeboval bych to, aby to
vyhledávalo aspoň do 10000 nebo neomezeně.
Za 3. Pokud v buňce počet fotek není hodnota je možné, aby to nepsalo nic ani tu nulu.
Za 4. Je možné to napsat tak, aby to vyhledalo podle ID i podle Jména a příjmení. Př. zadám: Ka a ono to vyhledá.
Tak Vám moc Děkujeme,
Lukáš Macek
Prosím pomozte nebo za nějaký menší poplatek.
Děkuji
Mozes sem to makro skopirovat ako text? Ludom sa nechce tahat cudzie xlsm a spustat nebezpecny micrososft program.
Tak tohle je jediný makro, který jsem v tom souboru našel:
To raději ani nebudu komentovat...
Pro tazatele: nepochopil jsem vůbec nic ani z Tvýho zmatenýho popisu ani z toho ještě víc zmatenýho makra...
- to bude najskor kamen urazu, a zaroven odpoved na dotaz, ze preco to robi to co to robi.
Ak to ma prehladavat vo viacerych bunkach tak bude treba upravit to "=VLOOKUP(R[-4]C4,Data!R4C2:R13C11,2,0)" atd a kazde jedno, alebo lepsie naprogramovat si makro normalne mozgom, a ne taketo veci, v zavislosti na tom ze co to ma robit.
Data!R4C2:R13C11 je rozsah buniek v ktorych sa hlada, ked to spravne chapem tak to hlada v tabulke "Data" medzi riadkom 4 stlpcom 2 az riadok 13 stlpec 11.
Můžete mě prosím poslat podle mého souboru vzor.
Já tomu nerozumím moc.
a makro je víše uvedené od uživatele Zdenál.
Nějakou malou částku bych ti mohl poslat za to.
Děkuji
Můžeš mě to prosím opravit podle mého vzoru.
Nějakou malou částku bych ti mohl poslat za to.
Dík
Zatial asi nikto nechape ze co to ma robit a preco.
Má to vyhledávat z listu Data a v listu Vyhledávání vyhledat podle ID nebo jména.
Tak jak jsem poslal ten vzor.
Moc díky
Chces toho moc naraz a vyjadrujes sa nezmyselne.
1. Obmedzenie na pocet riadkov vyplyva z toho makra:
=VLOOKUP(R[-4]C4,Data!R4C2:R13C11,2,0)
tak si vo vsetkych tych vyskytoch zmen ten rozsah na:
Data!R4C2:R10000C11
a bude to hladat az po riadok 10000
2. Z podobneho dovodu ti nejde ani hladat tie stlpce L az P, lebo to tam tak niekto napisal, zmen si vsetky vyskyty na
Data!R4C2:R10000C16
T.j. Otvoris si makro (ides hore na ZOBRAZIT - MAKRA, kliknes na editovat, a potom na menu Upravy - Nahradit, a napises tam do okienka "Nahradit"
Vyhledat: R4C2:R13C11
Zmenit Na: R4C2:R10000C16
a zmacknes tlacitko zmenit vsetky vyskyty. To je cele. Zavres upravu makra.
3. Podla mena hladat by slo blbo, ptz to neni tak jednoduche prerobit.
4. Co sa tyka tej 0 v Pocet fotek tak to neviem preco tam dava 0 ten VLOOKUP.
Co sa tyka tej 0 u pocet fotek, zmen si v makre ten riadok u bunky J6 na
Můžete prosím poslat tak jak to má byt v příloze.
Zkouším to jak napsal MM... ale nejde mě to.
Díky moc pokud něco můžu zato zaplatit nějakou malou částku.
Co zkousis. OMG.
Cele makro:
Skopiruj a vloz si namiesto toho co mas.
A teraz napises ze chces pre stlpce K - P to same co pre pocet fotek, s tou 0. Kukaj na to jak som to urobil, a skus to sam(a), jak sa to robi vidis.
Děkuji, ale nenapíšu to jsem zvládl sám.
Akorát nemůžu přijít nato aby to vyhledávalo podle jména.
Nebo současně buď jména nebo ID.
Můžete poradit.
Musíš si někde nastavit, jestli to má hledat podle ID nebo jména. Např. pro to vyhradíš buňku D3, do níž zapíšeš buď 0 (= hledat podle ID) nebo 1 (= hledat podle jména). Makro pak samozřejmě musíš větvit dle hodnoty této buňky.
Ale pozor na minimálně dva problémy:
1. Když budeš hledat podle jména, nedostaneš tímto postupem do výsledků hodnoty polí, ležící vlevo od sloupce Jméno.
2. Při hledání podle jména to najde jen první záznam, který bude vyhovovat podmínce (to samé platí i pro hledání dle ID? ale tam je to očekávané chování, ID by mělo být jedinečné). Pokud bys chtěl vypsat všechny záznamy, vyhovující zadanému jménu, musel bys makro zcela předělat.
Osobně bych to makro úplně předělal - neřešil bych to zápisem vzorců do buněk, ale v makru bych přímo vyhledal řádek na listu DATA (buď podle ID nebo podle JMÉNA - dle hodnoty signální buňky) a ten pak zkopíroval na vyhledávací list. Tím bych měl vyřešenej první problém. Pak by bylo možné - v závislosti třeba na nastavení další signální buňky - buď hledání ukončit nebo v něm pokračovat a vracet všechny záznamy, vyhovující podmínce (vyřešen 2. problém).
Obávám se ale, že tyto úpravy jsou zcela nad Tvé možnosti. Pokud bys chtěl více proniknout do tajů Excelu a programování ve VBA, zcela bezkonkurenční jsou tyto stránky: Kurz Excel VBA - on-line a zdarma
Můžu tě poprosit abys to upravil a poslal vzor.
Pokud bys chtěl můžu poslat nějakou částku za to.
Děkuji
Současné makro:
Sub Makro2()
'
' Makro2 Makro
' nahrané Záznamom makra
'
Application.ScreenUpdating = False
Range("B6").Select
ActiveCell.FormulaR1C1 = "=R[-4]C[2]"
Range("C6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,2 ,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,2,0) )"
Range("D6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,3 ,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,3,0) )"
Range("E6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,4 ,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,4,0) )"
Range("F6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,5 ,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,5,0) )"
Range("G6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,6 ,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,6,0) )"
Range("H6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,7 ,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,7,0) )"
Range("I6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,8 ,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,8,0) )"
Range("J6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,9 ,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,9,0) )"
Range("K6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,1 0,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,10, 0))"
Range("L6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,1 1,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,11, 0))"
Range("M6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,1 2,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,12, 0))"
Range("N6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,1 3,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,13, 0))"
Range("O6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,1 4,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,14, 0))"
Range("P6").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,1 5,0)),"""",VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,15, 0))"
Range("B6").Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Range("D2:E2").Select
Application.ScreenUpdating = True
End Sub
Jednoduchý nástřel, fungující makro:
Makro vyhledává dle hodnoty v buňce D3:
0 = hledá dle ID
1 = hledá dle jména
Omezení
- Musí být zadáno celé jméno, přesně jako na listu data.
- Vyhledá vždy jen první záznam.
Pokud nic nenajde, nebo najde záznam s 0 fotkami, vymaže řádek s nálezem.
Můžeš to poslav v příloze nefunguje mě to.
Vyhledá to jen ID 1 nebo to prví jméno to další ne.
Pokud není v buňce záznam tak to nevyhledá. Počet fotek 0 už to žádný záznam nenajde nebo pokud datum narození to samé.
A vynulovat vše pokud to nenajde nic.
Tady to máš: www.uschovna.cz
Doplň si do dat u více lidí počet fotek a bude to hledat i další záznamy (podmínka na nenulový počet fotek).
V jaké buňce? Jaký záznam? Musíš být konkrétní.
Tak jsi to snad chtěl, nebo ne?
Co jako má být s datumem? Vůbec s ním v makru nepracuji.
To už dělá.
Ještě jednou když dám do vyhledávacího pole 2 vyhledá to, ale pokud zadám 3 a větší nenajde to nic.
Ve trojce je ID 3, Jméno Lenka a Rodné číslo 72468521 nic to nevyhledá ani podle ID ano podle Jména.
Posílám vzor
Makro je dobré vyhledává jak podle ID i Jména, ale pouze do 2 ID 3 už to nenajde.
Potřebuji to hledat i dál ne jen do 2 v datech.
Pokud Počet fotek je uvedeno číslo vyhledá to i 10000 ale pokud Počet fotek není tak to nevyhledá nic ani ID 1 nebo 2.
Mělo to vyhledat a pokud v dané buňce není záznam tak buňka má byt prázdná ať už se jedná počet fotek nebo datum ....
Sub Makro2()
Dim WsData As Worksheet, WsVyhl As Worksheet
Dim VyhlCo As String
Dim VyhlKde As Integer, VyhlSloupec As Integer
Dim VyhlRadek As Integer, AktRadek As Integer
Dim PocetFotek As Integer
Application.ScreenUpdating = False
Set WsVyhl = ThisWorkbook.Worksheets("Vyhledávání")
Set WsData = ThisWorkbook.Worksheets("Data")
VyhlCo = WsVyhl.Range("D2") ' Vyhledat co
VyhlKde = WsVyhl.Range("D3") ' Vyhledat kde (0 = ID, 1 = JMÉNO)
VyhlRadek = 0 ' Předpokládám, že nic nenaleznu
PocetFotek = 0 ' Počet fotek vynuluji
AktRadek = 4 ' Aktuální řádek v datech
WsData.Activate
If VyhlKde = 0 Then ' Vyhledání v poli ID
VyhlSloupec = 2
Else ' Vyhledání v poli JMÉNO
VyhlSloupec = 4
End If
Do
If VyhlCo = WsData.Cells(AktRadek, VyhlSloupec).Value Then
VyhlRadek = AktRadek ' Našel jsem shodu na aktuálním řádku
PocetFotek = WsData.Cells(AktRadek, 10).Value
Exit Do ' Končím cyklus
End If
AktRadek = AktRadek + 1 ' Není shoda, jdu na další řádek
Loop While AktRadek < 10000 ' Opakuji až do řádku 10 000
If (VyhlRadek > 0) And (PocetFotek > 0) Then ' Našel jsem, počet fotek je nenulový
WsData.Range(Cells(VyhlRadek, 2), Cells(VyhlRadek, 16)).Select ' Vyberu řádek
Else ' Nenalezeno, vyberu první (prázdný) řádek
WsData.Range(Cells(1, 2), Cells(1, 16)).Select
End If
Selection.Copy ' Vybraný řádek zkopíruji na vyhledávací list
WsVyhl.Activate
WsVyhl.Range("B6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
WsVyhl.Range("D2").Select
Application.ScreenUpdating = True
End Sub
Ještě jednou:
Když zadáš číslo 3, makro zjistí, že položka č.3 má v datech nevyplněný počet fotek a jedním z Tvých požadavků bylo:
Ujasni si, co vlastně chceš.
Aha, teď jsem si to přečetl ještě jednou a začínám - snad - chápat:
Tvoje vyjadřování není totiž zcela přesné a někdy to dá docela fušku uhádnout, co vlastně chceš. Takže, jestli to teda dobře chápu, tak chceš, aby se nalezený záznam objevil i v případě, že má nulový počet fotek, pouze v případě nulové počtu fotek se nemá zobrazit 0 ale jen prázdná buňka. Chápu to správně?
Pokud ano, náprava je jednoduchá. Řádek
nahraď
V podstatě jen odstraň tu druhou podmínku na počet fotek.
Byl to jen příklad Počet fotek pokud je 0 tak má byt prázdná buňka ale pokud je prázdná buňka i OP nebo pohlaví ...... má byt na místo 0 prázdná buňka.
Tak jsem to myslel. Podle tvé opravy to funguje. OK
A když to jméno napíšu malým písmem nevyhledá to musí se to psát velkým písmem.
Dalo by seto upravit tak abych nemusel klikat na to Vyhledat!
Díky moc
No tvl, to chceš upravovat donekonečna?
Člověk musí mít instinkt čmuchacího psa, aby z toho popsanýho zmatku něco kloudnýho pochopil! Co kdybys taky projevil trochu inciativy?
Pro hledání bez rozlišení malá/velká použij funkce UCase() nebo LCase(), převedou řetězec na velká nebo malá písmena.
Pro hledání bez klikání musíš použít událost Worksheet_Change.
Nechápu raději pokud by to šlo tak vzor.
Daj si tie slova do google a najdes vzor. Ja uz mam dost :D Alebo si pockaj na Machr55, mozno on este nema dost :D
P.S: inac cele to bola hovadina v tom ze sa to dalo robit aj bez makier, keby sa tie vzorce (trochu zmenene) z toho vcerajsieho makra napisali rovno do buniek, a bolo by to aj interaktivne bez tlacitka. Vcera som sa hodinu divil naco tam kto cpal to makro a tlacitko a dnes ze ci to nejde bez tlacitka :D
Jak bez maker ukaž???
Chytráku to se radí když to umíš.
Ved som ti napisal jak. Aspon cist umis? Za 5minut mas vsetky informacie ktore potrebujes staci si zadat 1 slovo do googlu. Napr. to vlookup.
P.S. a makra ani excel nerobim a ani som sa s tym "umim" nenarodil, len na rozdiel od podaktorych nie som lenivy si najst za minutu informacie, aby som ti odpovedal co mas robit. Ale uz sa mi nechce, ptz tebe sa tiez nechce a potrebujes to ty a ne ja.
Ach jo, samostatnej opravdu moc nejsi. Navíc v tom děláš neskutečnej bordel, cpeš stejný otázky do dovu témat (PROČ???) a máš dvě přezdívky, který střídáš jak ponožky - to už opravdu zavání schizofrenií. Fakt už toho začínám mít dost a prachy to nespravěj - ty si radší nech a investuj do svýho vzdělání. VBA z Excelu (programovací jazyk pro ženy v domácnosti) bys zvládnout opravdu mohl...
No nic, zpět k problémům. Protože se to točí kolem maker, budu pokračovat už jen zde, to druhý téma nechám bez povšimnutí.
Abych shrnul Tvoje nové požadavky z obou témat (+ něco jsem si přidal sám):
- abys pro spuštění makra nemusel mačkat tlačítko
- aby to hledalo jména bez ohledu na malá/velká písmena
- aby se vyhledaly všechny výskyty jména v seznamu (viz to vedlejší téma, sám už jsem to taky psal)
- abys nemusel zadávat, jestli chceš hledat v ID nebo ve jméně a makro samo poznalo, jestli jsi zadal číslo (pak hledá v ID) nebo text (pak hledá ve jméně)
- aby to našlo jména i dle začátku (třeba "ma" vyhledá "Marek", "mareček", apod.)
Na list Vyhledání jsem přidal makro pro událost listu Worksheet_Change, reaguje jen na změnu sloučené buňky D2:E2:
Makro2 jsem pak upravil dle výše uvedených požadavků, výsledek máš zde: www.uschovna.cz.
Děkuji moc přesně podle představ.
Akorát se chci zeptat když bych chtěl aby to vyhledávalo podle rodného čísla jak to mám upravit.
respektive kde to najdu. pod čím.
Díky moc.
No jo, tohle dolepování kódu prostě zbožňuju.![]:)](https://static.poradna.net/images/smiley/evilsmile.gif)
Prvně, než začneš něco programovat, si musíš udělat analýzu problému, říct si všechny maximální požadavky na systém (slevit z požadavků se dá vždy téměř bezbolestně, něco přidávat - třeba i prkotinu - je vždy problematické, někdy i nemožné), jak budou muset být organizovaný data, atd. atd. a pak teprve začít psát program. Uvědom si, že jsem udělal jen takový hrubý nástin, každý zásah to daleko víc zesložiťuje, než kdybych to začal psát s uvážením všech různých možností.
Musíš si uvědomit, že rodné číslo je stejně jako ID číslo. Takže bys musel někde makru sdělit, že to zadané číslo má brát jako rodné číslo, nikoli ID. Ruční způsob zadání by asi nebyl příliš vhodný, protože bys přišel o výhodu automatického výběru hledání dle ID nebo dle jména, takže se to musí ošetřit v makru - třeba tak, že se otestuje velikost čísla. Lze totiž předpokládat, že ID bude vždy menší, než rodné číslo. Ovšem - pokud bys chtěl vyhledávat třeba i dle začátků rodného čísla (tak jako u jména), ten test na velikost by pravděpodobně selhal a musel by nastoupit ruční způsob zadání dle čeho chceš vyhledávat.
Takže pro jednoduchost předpokládám, že budeš chtít vyhledávat podle celého rodného čísla. Tedy do makra se dostane informace, že bylo zadáno číslo. Vlastní větvení ID/rodné číslo zařídíš ve větvi "If VyhlKde = 0", která se rozroste takto:
Funguje to, i když by to určitě šlo udělat elegantněji, zvláště kdybych s tím počítal hned od začátku tvorby makra (viz výše).
Díky moc