Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
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…
LM 29.08.2016 22:27
LM
Co zkousis. OMG. Cele makro: Sub Makro2() ' ' Makro2 Makro ' nahrané Záznamom makra ' Application.…
MM.. 29.08.2016 22:30
MM..
A teraz napises ze chces pre stlpce K - P to same co pre pocet fotek, s tou 0. Kukaj na to jak som t…
MM.. 29.08.2016 22:34
MM..
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.…
LM 30.08.2016 08:42
LM
Musíš si někde nastavit, jestli to má hledat podle ID nebo jména. Např. pro to vyhradíš buňku D3, do…
Machr55 30.08.2016 09:26
Machr55
Můžu tě poprosit abys to upravil a poslal vzor. Pokud bys chtěl můžu poslat nějakou částku za to. Dě…
LM 30.08.2016 09:54
LM
Jednoduchý nástřel, fungující makro: Sub Makro2() Dim WsData As Worksheet, WsVyhl As Worksheet Dim…
Machr55 30.08.2016 10:28
Machr55
Můžeš to poslav v příloze nefunguje mě to. Vyhledá to jen ID 1 nebo to prví jméno to další ne. Pokud…
Etkin 30.08.2016 10:52
Etkin
Tady to máš: www.uschovna.cz Vyhledá to jen ID 1 nebo to prví jméno to další ne. Doplň si do dat u…
Machr55 30.08.2016 11:13
Machr55
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.…
LM 30.08.2016 11:28
LM
Ještě jednou: Doplň si do dat u více lidí počet fotek a bude to hledat i další záznamy (podmínka na…
Machr55 30.08.2016 16:19
Machr55
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 n…
LM 30.08.2016 16:37
LM
No tvl, to chceš upravovat donekonečna? ::) Člověk musí mít instinkt čmuchacího psa, aby z toho pops…
Zdenál 30.08.2016 19:22
Zdenál
Nechápu raději pokud by to šlo tak vzor.
LM 30.08.2016 19:58
LM
Daj si tie slova do google a najdes vzor. Ja uz mam dost :D Alebo si pockaj na Machr55, mozno on est… nový
MM.. 30.08.2016 21:43
MM..
Jak bez maker ukaž??? Chytráku to se radí když to umíš. nový
LM 31.08.2016 10:53
LM
Ved som ti napisal jak. Aspon cist umis? Za 5minut mas vsetky informacie ktore potrebujes staci si z… poslední
MM.. 31.08.2016 15:07
MM..
Ach jo, samostatnej opravdu moc nejsi. Navíc v tom děláš neskutečnej bordel, cpeš stejný otázky do d… nový
Machr55 31.08.2016 08:42
Machr55
Děkuji moc přesně podle představ. Akorát se chci zeptat když bych chtěl aby to vyhledávalo podle ro… nový
LM 31.08.2016 10:52
LM
No jo, tohle dolepování kódu prostě zbožňuju. ]:) Prvně, než začneš něco programovat, si musíš uděla… nový
Machr55 31.08.2016 11:53
Machr55
Díky moc nový
Etkin 31.08.2016 13:50
Etkin

Co zkousis. OMG.

Cele 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 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,2,0)"
    Range("D6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,3,0)"
    Range("E6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,4,0)"
    Range("F6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,5,0)"
    Range("G6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,6,0)"
    Range("H6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,7,0)"
    Range("I6").Select
    ActiveCell.FormulaR1C1 = "=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 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,10,0)"
    Range("L6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,11,0)"
    Range("M6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,12,0)"
    Range("N6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,13,0)"
    Range("O6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R10000C16,14,0)"
    Range("P6").Select
    ActiveCell.FormulaR1C1 = "=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

Skopiruj a vloz si namiesto toho co mas.

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:

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

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.

Tady to máš: www.uschovna.cz

Vyhledá to jen ID 1 nebo to prví jméno to další ne.

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).

Pokud není v buňce záznam tak to nevyhledá

V jaké buňce? Jaký záznam? Musíš být konkrétní.

Počet fotek 0 už to žádný záznam nenajde...

Tak jsi to snad chtěl, nebo ne?

... nebo pokud datum narození to samé.

Co jako má být s datumem? Vůbec s ním v makru nepracuji.

A vynulovat vše pokud to nenajde nic.

To už dělá.

Ještě jednou:

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).

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:

Za 3. Pokud v buňce počet fotek není hodnota je možné, aby to nepsalo nic ani tu nulu.

Ujasni si, co vlastně chceš.

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

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

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:

Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  If Not Intersect(Target, Range("D2:E2")) Is Nothing Then
    Makro2
  End If
  Application.EnableEvents = True
End Sub

Makro2 jsem pak upravil dle výše uvedených požadavků, výsledek máš zde: www.uschovna.cz.

No jo, tohle dolepování kódu prostě zbožňuju. ]:)
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:

      If VyhlKde = 0 Then           ' Hledám v ID/RČ
        If Val(VyhlCo) > 10000 Then ' Hledám v RČ
          If VyhlCo = WsData.Cells(AktRadek, 5).Value Then
            WsData.Range(Cells(AktRadek, 2), Cells(AktRadek, 16)).Select   ' Vyberu řádek
            Selection.Copy          ' Vybraný řádek zkopíruji na vyhledávací list
            WsVyhl.Activate
            WsVyhl.Cells(AktRadekVyhl, 2).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
              SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Exit Do                 ' Končím cyklus
          End If
        Else                        ' Hledám v ID
          If VyhlCo = WsData.Cells(AktRadek, 2).Value Then
            WsData.Range(Cells(AktRadek, 2), Cells(AktRadek, 16)).Select   ' Vyberu řádek
            Selection.Copy          ' Vybraný řádek zkopíruji na vyhledávací list
            WsVyhl.Activate
            WsVyhl.Cells(AktRadekVyhl, 2).Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
              SkipBlanks:=False, Transpose:=False
            Application.CutCopyMode = False
            Exit Do                 ' Končím cyklus
          End If
        End If
      End If

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).

Zpět do poradny Odpovědět na původní otázku Nahoru