Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 0
  • 101

Witam,

chciałbym napisać makro, które z określonej kolumny pobierze niepowtarzalne wartości i wyświetli je w jakimś wyskakującym oknie z możliwością zaznaczenia kilku z nich, które będą następnie wykorzystane do dalszego działania makra, przykład takiej listy w załączniku.

W załączniku tabela chciałbym, aby w wyskakującym oknie pojawiły się wszystkie wartości (konta) z kolumny B i następnym krokiem będzie zaznaczenie np. kont 121 i 127 i makro powinno stworzyć nową tabelę, w której te zaznaczone są przepisane, dokładnie te same wartości, a wszystkie pozostałe będą zgrupowane w dodatkowym wierszu np. o nazwie 999.

Bardzo dziękuję za wszelką pomoc.

Załączniki

  • xlsx

    lista niepowtzrzalnych.xlsx ( 10K )
Piotr_Byrski
  • Zapytał
  • @ Piotr_Byrski | 15.01.2015
    • 2
    • 0
    • 1

Odpowiedź (1)

  • 1

Szukanie unikatowych wartośći można przeprowadzić na różne sposoby: wykorzystać kod uzyskany przez filtr zaawansowany albo użyć rejestratora z narzędziem usuń duplikaty. Najlepiej byłoby napisać własną procedurę tworzącą n elementową tablicę z unikatami, ale nie wiem, czy czuje się Pan na siłach programować na tablicach. Jeśli tak, przykład tutaj:

http://www.cpearson.com/excel/distinctvalues.aspx

Osobiście proponuję skorzystać z listy unikatów utworzonej na brudno w mniej więcej taki sposób (do sparametryzowania rzecz jasna, jak widać filtr zaawansowany może kopiować wyniki w inne miejsce):

 

Public Sub Test()

ActiveSheet.Range("A2:A65536").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ActiveSheet.Range("B2"), Unique:=True

End Sub



 

Żeby można było skorzystać z wyboru wielu elementów, należy wykorzystać kontrolkę ListBox na formularzu, z własciwością MultiSelect ustawioną na 1 (SelectMulti). Potrzebuje Pan również pętli (for next albo do until), która załaduje wyfiltrowane wcześniej wartości unikatowe na listę ( na zdarzeniu  inicjalizacji formularza, rzecz jasna). Na formularzu umieścić należy również przycisk, który uruchomi kopiowanie zaznaczonych wartości - tutaj również pojawi się pętla for next, która powinna wyglądać w zarysie tak:

 

 
For i = 0 To ListBox1.ListCount - 1
          If ListBox1.Selected(i) Then
             'kopiowanie danych
          End If
 Next
 
  • Odpowiedział
  • @ | 17.02.2015
  • TRENER ALTKOM AKADEMII