vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest środa, 01 kwietnia 2026 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Wyszukiwanie danych w kolumnie


otwartyotwarty rozpoczął: Qbapl postów: 9



napisał: Qbapl
postów: 5


umieszczony:
15 października 2007
15:25

  
Dzięki. Działa. Co prawda musiałem usunąć apostrofy ale już wszystko jest ok. Swoją drogą to jednak według mnie przy zwykłym FORrze ma się większą kontrolę na kodem niestety problem z szybkością
napisał: jottad
postów: 118


umieszczony:
15 października 2007
14:48

  
Spróbuj tak:

Private Sub cboxMaterialNumber_Change()
Dim Numer As Variant
Numer = Me.cboxMaterialNumber.Value
If IsNumeric(Numer) Then Numer = CDbl(Numer)
Szukaj Numer
End Sub

napisał: Qbapl
postów: 5


umieszczony:
15 października 2007
14:04

  
Witam, dzięki za pomoc niestety nadal nie działa u mnie tak jak powinno. Mam 2 procedury:
1. Pierwsza pobiera z polo combo wartość, która będzie wyszukiwana:
Private Sub cboxMaterialNumber_Change()
Dim Numer As Variant
Numer = (Me.cboxMaterialNumber.Value)
Szukaj (Numer)
End Sub


2. Wyszukuje w arkuszu w kolumnie A wiersz w którym występuje wartość pobrana z formatki
Sub Szukaj(Szukana As Variant)
Dim Wiersz As Variant
Wiersz = Application.Match(Szukana, Range("A1:A5000"), 0)
If IsError(Wiersz) Then MsgBox "0": Exit Sub
MsgBox (Wiersz)
End Sub


Przykładowe wyszukiwane wartości to:
70071401817
41380003578 A
DC999800170
DC999800220
41380003065
41380003107
Niestety funkcja nadal znajduje tylko te wartości,które jakieś "litery" lub w których występuje apostrof na początku
napisał: jottad
postów: 118


umieszczony:
15 października 2007
08:11

edytowany:
15 października 2007
08:46

  
Zastosuj typ Variant:
Sub Szukaj(Szukana As Variant)
Dim Wiersz As Variant
Wiersz = Application.Match(Szukana, Range("A1:A5000"), 0)
If IsError(Wiersz) Then MsgBox "0":Exit Sub
MsgBox (Wiersz)
End Sub



(nieco uprościłem i zmieniłem na Sub, bo i tak nie jest zwracana żadna wartość)
napisał: Qbapl
postów: 5


umieszczony:
14 października 2007
22:43

  
Wielkie dzięki Trebor. Makro działa. Zauważyłem, że funkcja MATCH jest bardzo "czuła" na punkcie zgodności formatów szukanej wartość i przeszukiwanego zakresu. Mam jeszcze pytanko w jaki sposób zrobić to makro bardziej uniwersalne pod względem formatów, mam do przeszukiwania zakres gdzie wartości mają różne postacie np. 7800990900 i DC90992919. Jak przypisze zmiennej Szukana String to muszę we wszystkich komórkach w arkuszu wpisać apostrof (zmiana formatu na tekstowy nie pomaga niestety) bo inaczej nie znajdzie wartości.
napisał: Trebor
postów: 1209


umieszczony:
13 października 2007
21:27

  
Musisz zabezpieczyć funkcję na wypadek nieznalezienia np.
Function Szukaj(Szukana As Double)
Dim Wiersz As Double
On Error Resume Next
Wiersz = WorksheetFunction.Match(Szukana, Range("A1:A5000"), 1)
On Error GoTo 0
MsgBox (Wiersz)
End Function



Pozdrawiam
napisał: Qbapl
postów: 5


umieszczony:
13 października 2007
20:58

  
Witam,
oczywiście, samo function bez sub. Literówki powstały przy pisaniu posta (było trochę późno w nocy).
Przy próbie użycia tej funkcji otrzymuje komunikat:
Run-time error '1004':
Pobranie właściwości Match klasy WorksheetFunction nie jest możliwe


Jeszcze raz proszę o pomoc
napisał: Trebor
postów: 1209


umieszczony:
13 października 2007
08:13

  
Cytat:
Sub Function Szukaj(Szukana as Double)
Dim Wiersz as double
Wiersz = WorksheetFunction.Match(Szakana, Range("A1:A5000"), 1)
MsgBox (Wiersz)
End Sub


1. Sub czy function - podejmij męską decyzję
2. Szukana czy Szakana - jak wyżej

Pozdrawiam
napisał: Qbapl
postów: 5


umieszczony:
13 października 2007
00:04

  
Witam,
makra jakie tworzę w VBA (jestem początkujący w tej) służą głównie do wyciągania odpowiednich danych z różnych arkuszy. Bardzo często stosuje funkcję, która musi znaleźć w kolumnie odpowiednią wartość i podać dokładną pozycję dla tej wartości w arkuszu (nr wiersza). Do tej pory stosowałem w tym celu zwykłą pętlę FOR, metoda może mało elegancka ale jak dla mnie była wystarczając i do tej pory skuteczna. Jednak przy dużej ilość danych pojawia się problem zbyt długiego czasu oczekiwania na wynik. W celu poprawienia wydajności postanowiłem użyć metody MATCH (przeczytałem o niej na tym forum). Stworzyłem funkcję, która niestety nie działa (już w momencie kompilacji wywala błąd)

Sub Function Szukaj(Szukana as Double)
Dim Wiersz as double
Wiersz = WorksheetFunction.Match(Szakana, Range("A1:A5000"), 1)
MsgBox (Wiersz)
End Sub

Pewnie robie jaki prosty i banalny błąd ale helpie nie za wiele znalazłem na temat tej metody.
Proszę o pomoc w tym temacie
ps. Nie upieram się, że do wyszukiwania danej wartości w kolumnie muszę używać methody MATCH może to być jakiś inny sposób, który będzie wydajniejszy od FORa


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z