excel rządzi, excel radzi, excel nigdy cię nie zdradzi

Wpis

wtorek, 08 czerwca 2010

Excel VBA: potrzebny mi cały wiersz na podstawie wartości z jednej kolumny

Zadanie

Mam tabelkę z różnymi dziwnymi danymi. Chcę móc wyszukać w dowolnej kolumnie dowolną wartość i po jej znalezieniu - mieć dostęp do danych z całego wiersza, w którym jest ta wartość. Funkcja/procedura ma być dostępna z posiomu VBA, nie musi być dostępna z arkusza.

Rozwiązanie

Idziemy na łatwiznę i robimy procedurę. Jeden z jej parametrów będzie odwołaniem do zmiennej (w uproszczeniu), w której będziemy trzymać wynik. Jeśli nie zostanie znaleziona komórka z tekstem szukanym - zwracamy wartość Nothing. Do działania użyjemy metody Find.

Public Sub getRowWith(co As String, _
zakres As Range, wynik As Range)
Dim tmp As Range

Set tmp = zakres.Find(What:=co, _
After:=zakres.Cells(zakres.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not tmp Is Nothing Then
Set wynik = tmp.EntireRow
Else
Set wynik = Nothing
End If

End Sub

Prawda, że proste?

Zastosowanie

Przypuśmy, że mam na arkuszu tabelkę w komórkach A1:C3

id komunikat PL EN
1 Pole musi być wypełnione to se wypełnij!
spik inglisz!
2 Arkusz zablokowany dla zmian no to co z tego!
so what!

i z poziomu VBA chcę znaleźć cały wiersz, w którym kolumna "komunikat" zawiera tekst "Pole musi być wypełnione". Mam już procedurę i nie zawaham się jej użyć! Przykładowe makro, które da się uruchomić z powyższą procedurą:

sub makro1()
dim tuchce as range

getRowWith "Pole musi być wypełnione", Range("b1:b3"), tuchce

msgbox tuchce.cells(1,1)
msgbox tuchce.cells(1,2)
msgbox tuchce.cells(1,3)
end sub

Takie trochę wyszukaj.pionowo (vlookup) tylko trochę inaczej. Oczywiście nic nie stoi na przeszkodzie, by przerobić procedurę na funkcję. Mi akurat była potrzebna taka, bo w wyniku dostaję wiersz, który jest typu Range. Używam tej procedury z inną - getColumnWith, co pozwala mi na łatwe znalezienie komórki znajdującej się na przecięciu określonego wiersza i kolumny. Ale o tym następnym razem.




Szczegóły wpisu

Tagi:
Kategoria:
Autor(ka):
originalhmm
Czas publikacji:
wtorek, 08 czerwca 2010 00:07

Polecane wpisy

Kanał informacyjny

tak, błąd jest zamierzony ;)