< návrat zpět
MS Excel
Téma: „nájdi v Zozname a vykonaj“
Zaslal/a Martin.B 1.4.2013 15:09
Dobrý deň,
už asi 3-ti deň sa trápim s pochopením Cyklov no nech robím čokoľvek stále sa mi nedarí do cyklu zapracovať operácia + podmienky.
Popis požiadavky:
do Databázy za ukladajú údaje o dodávateľoch (stále do zľava najbližšieho prázdneho stĺpca)
pre načítanie údajov z Databázy chcem použiť vo Formulári „ComboBox“
zoznám v ComboBox-e je zoznám nahraných dodávateľoch v Databáze
A začína môj problém:
Keďže dodávatelia sa budú opakovať rovnako ako aj ich produkty, potrebujem do zoznamu v ComboBox-e načítať niečo ako Kontingenčnú tabuľku. myslím si, že priame použitie Kontingenčnej tabuľky nie je najšťastnejšie riešenie (treba stále aktualizovať, nejako zadať rozsah údajov ktoré má načítavať, keďže sa budú meniť, vyfiltrovať prázdne riadky,...)
Priame riešenie:
napadlo ma niečo ako „VLOOKUP“ – ak sa hodnota (Range(“A2“) v zozname (Stĺpec E) nenachádza, zadaj ju do posledného voľného riadku (ak sa v zozname už nachádza nerob nič)
Nepriame rešienie:
napadlo ma Cyklom ošetriť preverovanie Stĺpca C (v ktorom sú všetci dodávatelia – aj opakujúci sa) a nejako podmienkou
IF Range(“A2“) ????? Then Exit Sub
Range(“A2“).Value = ?????
Neviem si sať s tým poradiť. Pomóc.
Příloha: 12595_zosit1.zip (18kB, staženo 27x)
eLCHa(1.4.2013 21:15)#012618 Do UF s comboboxem vložíte např takto:
Private Sub UserForm_Initialize()
Dim rInputRange As Range
Set rInputRange = Range("XY")
Dim colList As New Collection
On Error Resume Next
Dim rCell As Range
For Each rCell In rInputRange.Cells
colList.Add rCell.Value, CStr(rCell.Value)
Next rCell
Set rCell = Nothing
On Error GoTo 0
With ComboBox1
.AddItem colList(1)
Dim I As Integer, J As Integer
For I = 2 To colList.Count
For J = 0 To .ListCount
If J = .ListCount Then
.AddItem colList(I)
Else
If colList(I) < ComboBox1.List(J) Then
.AddItem colList(I), J
Exit For
End If
End If
Next J
Next I
.ListIndex = 0
End With 'ComboBox1
Set rInputRange = Nothing
End Subcitovat
eLCHa(1.4.2013 21:22)#012619 Pokud chcete použít RowSource, vložte na list dynamickou pojmenovanou oblast
např =POSUN(List1!$A$1;0;0;POČET2(List1!$A:$A);1)
a tu pak použijte
citovat
eLCHa(1.4.2013 21:32)#012621 Nicméně je tak nějak vhodné, aby data v comboboxu byla seřazená
Tady je moje procedurka na výpis neduplicitních hodnot
Sub subUnique()
'Koutný Karel
'Vyhledá v oblasti jedinečné buňky a vypíše je na nový list
Dim rSelection As Range
Set rSelection = Selection
Dim colList As New Collection
On Error Resume Next
Dim rCell As Range
For Each rCell In rSelection.Cells
colList.Add rCell.Value, CStr(rCell.Value)
Next rCell
Set rCell = Nothing
On Error GoTo 0
ReDim sUnique(colList.Count - 1, 0) As String
Dim I As Integer, J As Integer
For I = 1 To colList.Count
sUnique(I - 1, 0) = colList(1)
For J = 1 To colList.Count
If sUnique(I - 1, 0) > colList(J) Then
sUnique(I - 1, 0) = colList(J)
End If
Next J
colList.Remove sUnique(I - 1, 0)
Next I
Dim shNew As Worksheet
Set shNew = Sheets.Add
shNew.Cells(1).Resize(UBound(sUnique, 1) + 1, 1).Value = sUnique
Set shNew = Nothing
Set rSelection = Nothing
End Subcitovat