ID tematu: 70186
 |
VlookUp jako makro w VBA |
Autor |
Wiadomość |
Gurallek
Świeżak

Wersja: Win Office 365
Posty: 5
|
Wysłany: 19-02-2021, 12:48 VlookUp jako makro w VBA
|
|
|
Cześć,
szukałem na forum ale niestety nigdzie nie mogłem znaleźć odpowiedzi na moje pytanie.
Chciałbym stworzyć makro działające jak vlookup. Na samym początku makro pyta : zaznacz co chcesz szukać - następnie my zaznaczamy zakres jedno-kolumnowy. następnie makro pyta : gdzie chcesz szukać - następnie zaznaczamy zakres, w którym chcemy szukać. Następnie makro pyta z której komórki chcesz brać dane : my wpisujemy numer kolumny. Doszedłem do etapu gdzie makro nas pyta gdzie chcemy szukać i niestety nie potrafię sobie z tym poradzić, nie umiem kodzie vlookup odwołać się do zakresu, który zaznaczyłem. Rzućcie okiem na mój kod :
Kod: | Dim tbl As Range
Dim tbl2 As Range
Dim tbl3 As Range
Dim n As Integer
Dim a As Integer
Dim b As Variant
Set tbl = Application.InputBox(prompt:="Zaznacz czego chcesz szukac", _
Title:="Dane wejściowe", _
Type:=8)
If tbl.Columns.Count > 1 Then
MsgBox prompt:="Zaznacz po czym chcesz szukac", _
Title:="bład", _
Buttons:=vbOKOnly + vbCritical
End If
Set tbl2 = Application.InputBox(prompt:="Zaznacz gdzie chcesz szukać", _
Title:="Dane wejściowe", _
Type:=8)
Set tbl3 = Application.InputBox(prompt:="Zaznacz pierwsza komórke dla wyniku", _
Title:="Dane wejściowe", _
Type:=8)
'a = tbl.Rows.Count
' On Error Resume Next
'For n = 0 To a
b = Chr(34)
Range("P2").Value = "=VLOOKUP(" & b & tbl.Cells(1, 1).Value & b & ", tbl2.range,2,0)"
'Next n |
byłbym bardzo wdzięczny za jakieś wskazówki.
oczywiście na samym końcu chciałbym wrzucić to w pętle ale póki co nie potrafię poradzić sobie z jedną komórka :(
dzięki :) |
|
 | ID posta:
400677
|
|
|
 |
|
|
|
wczesny
Stały bywalec Excelforum

Wersja: Win Office 2016
Pomógł: 31 razy Posty: 269
|
|
 | ID posta:
400686
|
|
|
 |
|
|
Rafał B.
Exceloholic


Wersja: Win Office 2016
Pomógł: 33 razy Posty: 232
|
Wysłany: 19-02-2021, 14:19
|
|
|
Kod: | Application.Vlookup != Application.WorksheetFunction.Vlookup |
Te dwa przykłady różnią się wiązaniem: warto dodać, że w przypadku błędu pierwsza funkcja zwraca wartość (typ - błąd), natomiast druga wykonuje Err.Raise. |
_________________ Jest niemal niemożliwe nauczenie dobrego programowania uczniów, którzy byli narażeni na kontakt z BASIC: jako potencjalni programiści są okaleczeni, bez nadziei na poprawę. (Edsger Dijkstra, pionier informatyki).
Po części dotyczy również VBA. |
Ostatnio zmieniony przez Rafał B. 19-02-2021, 14:35, w całości zmieniany 1 raz |
|
 | ID posta:
400687
|
|
|
 |
|
|
wczesny
Stały bywalec Excelforum

Wersja: Win Office 2016
Pomógł: 31 razy Posty: 269
|
Wysłany: 19-02-2021, 14:33
|
|
|
Rafał, czytałem watek na forum :)
To i to rozwiazanie zadziała, a obsługi błędów kolega jeszcze nie ma. |
|
 | ID posta:
400689
|
|
|
 |
|
|
Gurallek
Świeżak

Wersja: Win Office 365
Posty: 5
|
Wysłany: 19-02-2021, 14:37
|
|
|
Hej Panowie,
bardzo dziekuje za szybka odpowiedz. W zalaczniku przykladowa tabela oraz kod.
jeszcze raz dzieki za pomoc!
Test_1.xlsm
|
Pobierz Plik ściągnięto 4 raz(y) 16.13 KB |
|
|
 | ID posta:
400692
|
|
|
 |
|
|
wczesny
Stały bywalec Excelforum

Wersja: Win Office 2016
Pomógł: 31 razy Posty: 269
|
Wysłany: 19-02-2021, 15:22
|
|
|
Co konkretnie chcesz znaleźć? Wiek danej osoby?
Bo szukana to tekst a nie zakres.
Sprubuj tak:
Kod: |
Range("P2").Value = Application.VLookup(tbl, tbl2, 1, 0)
|
Pamiętaj, że tbl - wybierasz jedną wartość, tbl2 - Zaznaczasz całą tabelę. |
|
|
 | ID posta:
400698
|
|
|
 |
|
|
Gurallek
Świeżak

Wersja: Win Office 365
Posty: 5
|
Wysłany: 19-02-2021, 15:47
|
|
|
@Wczesany
bardzo mi pomogłeś - wystarczyło dodac application i sprawa sie rozwiazała :)
dziekuje Ci bardzo!!!
udanego dnia |
|
 | ID posta:
400701
|
|
|
 |
|
|
wczesny
Stały bywalec Excelforum

Wersja: Win Office 2016
Pomógł: 31 razy Posty: 269
|
Wysłany: 19-02-2021, 15:49
|
|
|
To tak nie do końca.
Ty dodawałeś formułę w arkuszu, a ja używając funkcji arkuszowej dodałem wartość, która ta funkcja zwraca. |
|
 | ID posta:
400702
|
|
|
 |
|
|
Gurallek
Świeżak

Wersja: Win Office 365
Posty: 5
|
Wysłany: 19-02-2021, 16:33
|
|
|
@wczesany
a rzucilbys okiem jaki tutaj blad robie :
On Error Resume Next
Kod: |
a = tbl.Rows.Count
On Error Resume Next
For n = 1 To a
tbl4.Offset(n - 1, 0).Value = Application.VLookup(tbl.Cells(n, 1).Value, tbl2.Cells(n, 1).Value, tbl3, 0)
Next n |
Wrzucam to w petle tak by zrobic ta sama czynnosc dla kazdej komórki z wybranego zakresu ale caly czas mi wyrzuca arg ;( |
|
|
 | ID posta:
400707
|
|
|
 |
|
|
wczesny
Stały bywalec Excelforum

Wersja: Win Office 2016
Pomógł: 31 razy Posty: 269
|
Wysłany: 19-02-2021, 17:30
|
|
|
Poczytaj o funkcji Vlookup i sprawdź jakie argumenty przyjmuje. Link masz powyżej. |
|
 | ID posta:
400711
|
|
|
 |
|
|
Gurallek
Świeżak

Wersja: Win Office 365
Posty: 5
|
Wysłany: 19-02-2021, 20:37
|
|
|
Wszystko działa. Jeszcze raz dzięki ! |
|
 | ID posta:
400721
|
|
|
 |
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
 |
Strona używa plików cookies.
Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przeglądarce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
Sprawdź, w jaki sposób przetwarzamy dane osobowe
|