< návrat zpět

MS Excel


Téma: SVYHLEDAT ve VBA rss

Zaslal/a 6.4.2022 12:39

Zdravím všechny, můžete mi, prosím, zkontrolovat kód, kde je chyba, resp, proč nemohu vyhledat ID do žlutých polí pomocí VBA? Zkoušel jsem i přes VLOOKUP, ale ten mi funguje jen v jednom listu, ale pokud se na data dívám z jiného, tak to taky nejde.
Prioritou je však VBA řešení.
Děkuji.

Příloha: rar52506_svyhledat_vba.rar (492kB, staženo 18x)
Zaslat odpověď >

#052508
Lugr
Problém je v tom, že kódy na listě "data" máš naformátována jako text a na listě EXPORT naformátována jako obecný resp. číslo.citovat
#052509
avatar
Mockrát děkuji! 9citovat
#052510
Lugr
Není za co.

Nebylo by toto lepší?

Sub VlookUp2()

Dim wsZDROJ As Worksheet
Dim wsCIL As Worksheet
Dim POCET As Long

Set wsZDROJ = Worksheets("data")
Set wsCIL = Worksheets("EXPORT")

POCET = wsCIL.Cells(Rows.Count, "D").End(xlUp).Row - 1

wsCIL.Range("A2").Resize(POCET).Formula = "=IFERROR(VLOOKUP(D2,data!A:B,2,0),"""")"
wsCIL.Range("A2").Resize(POCET).Value = wsCIL.Range("A2").Resize(POCET).Value

End Sub
citovat
#052511
avatar
to je právě otázka, co je rychlejší. Těch 27 řádků je příklad. Data pro export se generují z jiné tabulky, kde se různě filtrují požadované hodnoty, takže 27 řádků není pevných, ale může jich být 0-x. Také jsem nechtěl přímo vkládat vzorec, přijde mi, že pokud by bylo řádků pro export např. 1000, tak by to vypisování vzorce trvalo déle.
Každopádně děkuji za ochotu a rozklíčování problému.citovat
#052512
Lugr
Já to blbě napsal, místo 27 mělo být POCETcitovat
#052514
avatar
Vyhledání ID pomocí dvou polí. Načtu obě tabulky do pole a pak vyhledávám v poli.
Příloha: zip52514_svyhledat_vba.zip (494kB, staženo 12x)
citovat
#052515
elninoslov
Hľadanie pomocou Collection bude veľmi rýchle. Ale ako chcete používať akékoľvek hľadanie kódu a ID, ak je to plné dupiel (pod jedným kódom sú rôzne ID) ?
Sub CollectionLookup()
Dim Data(), ID(), Kod(), Col As New Collection, i As Long, RowsData As Long, RowsExport As Long

RowsExport = wsEXPORT.Cells(Rows.Count, "D").End(xlUp).Row - 1
If RowsExport = 0 Then MsgBox "Chýbajú kódy v EXPORT.", vbExclamation: Exit Sub
If RowsExport = 1 Then ReDim Kod(1 To 1, 1 To 1): Kod(1, 1) = wsEXPORT.Range("D2").Value2 Else Kod = wsEXPORT.Range("D2").Resize(RowsExport).Value2
ReDim ID(1 To RowsExport, 1 To 1)

RowsData = wsData.Cells(Rows.Count, "A").End(xlUp).Row - 1
If RowsData = 0 Then MsgBox "Chýbajú data.", vbExclamation: GoTo KONIEC
Data = wsData.Range("A2:B2").Resize(RowsData).Value2

On Error Resume Next
For i = 1 To RowsData
Col.Add Data(i, 2), CStr(Data(i, 1))
Next i

For i = 1 To RowsExport
ID(i, 1) = Col(CStr(Kod(i, 1)))
Next i
On Error GoTo 0

KONIEC:
wsEXPORT.Range("A2").Resize(RowsExport).Value2 = ID
Set Col = Nothing
End Sub
Příloha: zip52515_svyhledat_vba2.zip (497kB, staženo 15x)
citovat
#052516
avatar
Dobrý den,

velmi děkuji za pomoc, nečekal jsem tolik návrhů řešení.
Ohledně datového typu doplním, že typ dat upravuji přes Power Query.
Elninoslov má pravdu, že jsou v datech duplicity. Ty jsou způsobené dalšími podstavy jednotlivých kódů, ale každý podstav má i čas zápisu. V power Quesry si data ještě setřídím sestupně tak, aby mi SVYHLEDAT(VLOOKUP) našla nejnovější ID. Všechna data jsem sem nedával. Netušil jsem, že budete tak důslední.
Ještě jednou děkuji!citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Aktivní diskuse

Čas od do

lubo • 19.4. 16:30

Makro smyčka

MilanKop • 19.4. 10:46

Makro smyčka

elninoslov • 19.4. 9:02

Čas od do

elninoslov • 19.4. 8:46

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32