Wpis z mikrobloga

Potrzebuję nieco pomocy od #programista15k ws. #macro w #excel

Moje "umiejętności" kończą się na macro recording, a potrzebuje czegoś nieco bardzie "zaawansowanego".

Mam dokument, nie więcej jak 1000 linii w excelu. Potrzebuję, aby macro wyszukiwało daną wartość (zawsze trzy literowy kod AAA, BBB, CCC, ABC, ZXC itd). i kopiowało rząd (linijkę) do sheet2 w danej (niezmiennej) kolejności. Czyli musi być "po mojemu", ale zawsze kolejność taka sama.

Zrobiłem to vlookup, ale powyżej pewnej ilości linijek to staje się uciążliwie wolne.

Jeżeli nie znajduje wartości (exact match) to niech wpisuje ERROR.

#programowanie #vba
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@matti05: Wydaje mi się, że powinieneś wyzerować CopyRange (set to nothing), bo po pierwszym ustawieniu na wiersz już nie będzie pusty i nie zrobi następnych przebiegów, więc skopiuje tylko jeden wiersz.
  • Odpowiedz
@matti05:
Może użyć select case r.value zamiast if r.Value?
Select Case r.value
case "AAA", "BBB", "CCC" 'dla select case warune OR zapisuje się w ten sposób, listując możliwości po przecinkach
If CopyRange Is Nothing Then
Set CopyRange
  • Odpowiedz
@Eswemenasja: może ten kod i zadziała tak jak OP chce (sam nie bardzo wiem, o co chodzi w tym pytaniu), ale jeśli wynik miałby być właśnie taki, to mi ręce opadają jak na to patrzę. @matti05 podał przykład, w miarę wydajny, ale to co zrobiłeś z tym kodem to naprawdę jakiś koszmar:(.

Choćby to:

i_lst_dest_row = Application.CountA(ws_dest.Columns(1)) + 1
Odpalane przy każdym wierszu. Skoro kod dodaje po jednym wierszu
  • Odpowiedz
@brak_nicku: to jak określisz ostatni wiersz do którego należy wkleić dane skoro jest to wartość zmienna? Można ewentualnie zamienić na czy usedrange.rows.count, pytanie co będzie wydajniejsze? Pierwotne pytanie nie donosiło się natomiast do wydajności nie mówiąc o tym, że jasno określono ilość wierszy do przejrzenia na 1000.
P.S. W zasadzie rzeczywiście można użyć licznika i_iterate zamiast counta "Ale mi jest głupio" #pdk .
  • Odpowiedz
@boguslaw-de-cubalibre:

nie wiem w której kolumnie szukasz wartości - założyłem, że w pierwszej.
nie wiem gdzie ma wpisać ERROR, więc ustawiłem by zamieniał znalezioną wartość niezgodną z szukaną na ERROR.

na pewno da sie to zrobić efektywniej, np
  • Odpowiedz