< návrat zpět

MS Excel


Téma: Kolekce_hledaní a přiřazení hodnoty rss

Zaslal/a 18.1.2021 21:39

Merlin99Zdravím všechny,
snažím se nějak udělat jednu věc nad kolekcemi ale nějak už si dál nevím rady.. kdyby nekdo tusil budu rád 1 5
PŘ:
(Vidím že je MAT (I4) v kolekci na 18 místě a tím pádem chci vrátit 18 pořadí z kolekce INFO do sloupce J (J4))


Sub KOLEKCE_LEZAKY()

Dim myCol_MAT As Collection
Set myCol_MAT = New Collection
Dim Oblast_MAT As Range
Dim myCol_INFO As Collection
Set myCol_INFO = New Collection
Dim Oblast_INFO As Range
Dim Cell As Range
Dim Item As Range
Dim MaxRow As Long

'Tvorba KOLEKCE z MAT
MaxRow = List1.Cells(Rows.Count, "D").End(xlUp).Row

Set Oblast_MAT = List1.Range("D4:D" & MaxRow)
For Each Cell In Oblast_MAT
myCol_MAT.Add Cell.Offset(0, 0)
Next Cell

'Tvorba KOLEKCE z INFO
Set Oblast_INFO = List1.Range("E4:E" & MaxRow)
For Each Cell In Oblast_INFO
myCol_INFO.Add Cell.Offset(0, 0)
Next Cell

End Sub

Příloha: rar49501_kolekcesesit1.rar (12kB, staženo 13x)
Zaslat odpověď >

#049502
elninoslov
Musel by ste si urobiť ešte jednu pomocnú kolekciu s kľúčom a priradeným indexom, alebo rovno uložiť do kolekcie viacero info Array(index, hodnota) a hľadať kľúčom, alebo použiť jednu kolekciu, ale tu bude záležať na tom, čo potom potrebujete spraviť.

EDIT: Tu máte narýchlo všetky 3 spomenuté:
Sub KOLEKCE_LEZAKY()

Dim myCol_MAT As Collection
Set myCol_MAT = New Collection
Dim Oblast_MAT As Range
Dim myCol_INFO As Collection
Set myCol_INFO = New Collection
Dim Oblast_INFO As Range
Dim Cell As Range
Dim Item As Range
Dim MaxRow As Long
Dim i As Long

'Tvorba KOLEKCE z MAT
MaxRow = List1.Cells(Rows.Count, "D").End(xlUp).Row

Set Oblast_MAT = List1.Range("D4:D" & MaxRow)
For Each Cell In Oblast_MAT
i = i + 1
myCol_MAT.Add Array(Cell, i), CStr(Cell)
Next Cell

'Tvorba KOLEKCE z INFO
Set Oblast_INFO = List1.Range("E4:E" & MaxRow)
For Each Cell In Oblast_INFO
myCol_INFO.Add Cell
Next Cell

MsgBox myCol_INFO(myCol_MAT(CStr(List1.Range("I4")))(1))
End Sub

Sub KOLEKCE_LEZAKY2()

Dim myCol_MAT As Collection
Set myCol_MAT = New Collection
Dim Oblast_MAT As Range
Dim myCol_INFO As Collection
Set myCol_INFO = New Collection
Dim Oblast_INFO As Range
Dim Cell As Range
Dim Item As Range
Dim MaxRow As Long

'Tvorba KOLEKCE z MAT
MaxRow = List1.Cells(Rows.Count, "D").End(xlUp).Row

Set Oblast_MAT = List1.Range("D4:D" & MaxRow)
For Each Cell In Oblast_MAT
myCol_MAT.Add Array(Cell, Cell.Offset(0, 1)), CStr(Cell)
Next Cell

MsgBox myCol_MAT(CStr(List1.Range("I4")))(1)
End Sub

Sub KOLEKCE_LEZAKY3()

Dim myCol_MAT As Collection
Set myCol_MAT = New Collection
Dim Oblast_MAT As Range
Dim myCol_INFO As Collection
Set myCol_INFO = New Collection
Dim Oblast_INFO As Range
Dim Cell As Range
Dim Item As Range
Dim MaxRow As Long
Dim i As Long
Dim myCol_IDX As Collection
Set myCol_IDX = New Collection

'Tvorba KOLEKCE z MAT
MaxRow = List1.Cells(Rows.Count, "D").End(xlUp).Row

Set Oblast_MAT = List1.Range("D4:D" & MaxRow)
For Each Cell In Oblast_MAT
i = i + 1
myCol_IDX.Add i, CStr(Cell)
myCol_MAT.Add Cell
Next Cell

'Tvorba KOLEKCE z INFO
Set Oblast_INFO = List1.Range("E4:E" & MaxRow)
For Each Cell In Oblast_INFO
myCol_INFO.Add Cell
Next Cell

MsgBox myCol_INFO(myCol_IDX(CStr(List1.Range("I4"))))
End Sub
Příloha: zip49502_kolekcesesit1.zip (16kB, staženo 12x)
citovat
#049503
elninoslov
A ešte som zabudol na variant, že to čo dávate do kolekcie MAT bude vyhľadávací kľúč v INFO:
Sub KOLEKCE_LEZAKY4()

Dim myCol_MAT As Collection
Set myCol_MAT = New Collection
Dim Oblast_MAT As Range
Dim myCol_INFO As Collection
Set myCol_INFO = New Collection
Dim Oblast_INFO As Range
Dim Cell As Range
Dim Item As Range
Dim MaxRow As Long

'Tvorba KOLEKCE z MAT
MaxRow = List1.Cells(Rows.Count, "D").End(xlUp).Row

Set Oblast_MAT = List1.Range("D4:D" & MaxRow)
For Each Cell In Oblast_MAT
myCol_MAT.Add Cell
Next Cell

'Tvorba KOLEKCE z INFO
Set Oblast_INFO = List1.Range("E4:E" & MaxRow)
For Each Cell In Oblast_INFO
myCol_INFO.Add Cell, CStr(Cell.Offset(0, -1))
Next Cell

MsgBox myCol_INFO(CStr(List1.Range("I4")))
End Sub
citovat
#049510
Merlin99
elninoslov
DÍKY za pomoc, myslel jsem to trošičku jinak nenapsal jsem to moc stastne nicmene z tveho prikladu jsem si novou kolekci doupravil k dokonalosti.

DĚKUJI MOC za pomoc 5 5 1


Sub KOLEKCE_LEZAKY()

Dim myCol_MAT As Collection
Set myCol_MAT = New Collection
Dim Oblast_MAT As Range
Dim myCol_INFO As Collection
Set myCol_INFO = New Collection
Dim Oblast_INFO As Range
Dim myCol_FINAL As Collection
Set myCol_FINAL = New Collection
Dim Oblast_FINAL As Range
Dim Cell As Range
Dim Item As Range
Dim MaxRow As Long
Dim MaxRow2 As Long
Dim i As Long

MaxRow = List1.Cells(Rows.Count, "D").End(xlUp).Row
MaxRow2 = List1.Cells(Rows.Count, "I").End(xlUp).Row

'Tvorba KOLEKCE z MAT
Set Oblast_MAT = List1.Range("D4:D" & MaxRow)
For Each Cell In Oblast_MAT
i = i + 1
myCol_MAT.Add Array(Cell, i), CStr(Cell)
Next Cell

'Tvorba KOLEKCE z INFO
Set Oblast_INFO = List1.Range("E4:E" & MaxRow)
For Each Cell In Oblast_INFO
myCol_INFO.Add Cell
Next Cell

'Tvorba KOLEKCE FINAL
Set Oblast_FINAL = List1.Range("I4:I" & MaxRow2)
For Each Cell In Oblast_FINAL
myCol_FINAL.Add myCol_INFO(myCol_MAT(CStr(Cell))(1))
Next Cell

'Vypsání materiálů z kolekce
i = 0
For Each Item In myCol_FINAL
List1.Cells(i + 4, 10).Value = Item
i = i + 1
Next Item

End Subcitovat
#049511
Merlin99
* Jeste jsem narazil na jeden malicky problem.. Nova kolekce FINAL nedokaze udrzet v prubehu makra nakesovana data? Lze to nejak vyresit viz příloha?

Myslel jsem že pokud v prubehu makra vytvorim kolekci tak tato virtualni tabulka je k dispozici vcelem prubehu makra..
7
Příloha: rar49511_kolekce2.rar (20kB, staženo 12x)
citovat
#049512
Merlin99
*Omlouvám se poslal jsem špatnou přílohu posílám znovu..
*Zajímalo by mě jestli lze vysvětlit
Děkuji za radu 1 9
Příloha: rar49512_kolekce2.rar (20kB, staženo 12x)
citovat
#049513
elninoslov
Makro som ešte nespustil, urobím najskôr hypotézu. Vy priraďujete do kolekcie bunky (Cell), nie hodnoty. Keď kolekciu potom čítate, v kolekcii je uložená bunka, nie hodnota. Hodnotu Vy v polke makra zmeníte, a potom z tej bunky v kolekcii prečítate hodnotu. No akú má mať asi hodnotu? Správne - tú novú.
Skúste priradiť do kolekcie Cell.Value či mám pravdu...citovat
#049516
Merlin99
elninoslov
joo to je přesně ono to mi nedošlo, nyní vidím když krokuji ze kolekce jsou nakrmene i po zmene vstupnich dat.

Jen mi to spadne ještě v této konečné části a netuším..
(Invalid procedure call or argument).

myCol_FINAL.Add myCol_INFO(myCol_MAT(CStr(Cell.Value))(1))
Příloha: rar49516_kolekce2.rar (20kB, staženo 13x)
citovat
#049517
Merlin99
elninoslov
už jsem na to přišeel pokus omyl, 5
Díky moc za pomoc už to asi chápu zase více 5 5
lala
Příloha: rar49517_kolekce3.rar (20kB, staženo 15x)
citovat

Uživatelské menu

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

Menu

Formulář Faktura

Formulář Faktura IV

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

Helios iNuvio

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.

On-line nástroje