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

loading...
Předmět Autor Datum
Prosím pomozte nebo za nějaký menší poplatek. Děkuji
LM 29.08.2016 18:16
LM
Mozes sem to makro skopirovat ako text? Ludom sa nechce tahat cudzie xlsm a spustat nebezpecny micro…
MM.. 29.08.2016 18:19
MM..
Tak tohle je jediný makro, který jsem v tom souboru našel: Sub Makro2() ' ' Makro2 Makro ' nahrané…
Zdenál 29.08.2016 18:51
Zdenál
nahrané Záznamom makra - to bude najskor kamen urazu, a zaroven odpoved na dotaz, ze preco to robi…
MM.. 29.08.2016 19:00
MM..
Můžete mě prosím poslat podle mého souboru vzor. Já tomu nerozumím moc. a makro je víše uvedené od…
LM 29.08.2016 20:10
LM
Můžeš mě to prosím opravit podle mého vzoru. Nějakou malou částku bych ti mohl poslat za to. Dík
LM 29.08.2016 20:14
LM
Zatial asi nikto nechape ze co to ma robit a preco.
MM.. 29.08.2016 20:17
MM..
Má to vyhledávat z listu Data a v listu Vyhledávání vyhledat podle ID nebo jména. Tak jak jsem posla…
LM 29.08.2016 20:58
LM
Chces toho moc naraz a vyjadrujes sa nezmyselne. 1. Obmedzenie na pocet riadkov vyplyva z toho makr…
MM.. 29.08.2016 22:16
MM..
Co sa tyka tej 0 u pocet fotek, zmen si v makre ten riadok u bunky J6 na ActiveCell.FormulaR1C1 = "…
MM.. 29.08.2016 22:29
MM..
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
Makro je dobré vyhledává jak podle ID i Jména, ale pouze do 2 ID 3 už to nenajde. Potřebuji to hleda…
LM 30.08.2016 16:10
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
Aha, teď jsem si to přečetl ještě jednou a začínám - snad - chápat: Mělo to vyhledat a pokud v dané…
Machr55 30.08.2016 16:26
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…
MM.. 30.08.2016 21:43
MM..
Jak bez maker ukaž??? Chytráku to se radí když to umíš.
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…
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…
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…
Machr55 31.08.2016 11:53
Machr55
Díky moc
Etkin 31.08.2016 13:50
Etkin

Tak tohle je jediný makro, který jsem v tom souboru našel:

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:R13C11,2,0)"
    Range("D6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R13C11,3,0)"
    Range("E6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R13C11,4,0)"
...
... a tak dále
...
    Range("P6").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-4]C4,Data!R4C2:R13C11,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

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

nahrané Záznamom 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.

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

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:

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

Aha, teď jsem si to přečetl ještě jednou a začínám - snad - chápat:

Mělo to vyhledat a pokud v dané buňce není záznam tak buňka má byt prázdná

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

  If (VyhlRadek > 0) And (PocetFotek > 0) Then  ' Našel jsem, počet fotek je nenulový

nahraď

  If VyhlRadek > 0 Then             ' Našel jsem

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

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

loading...