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

  tytuł wątku:
Wątki dyskusji

ciąg znaków


otwartyotwarty rozpoczął: VBAmator postów: 9



napisał: Trebor
postów: 1209


umieszczony:
20 stycznia 2017
16:14

edytowany:
20 stycznia 2017
16:15

  
Tablica jest szybka do obróbki w VBA. Jeśli masz zdefiniowany zakres przerabiasz go na tablicę w bardzo prosty sposób
Sub aa()
Dim tablica(), i As Long
tablica = Range("zakres")

For i = 1 To UBound(tablica) 'zakładam w tej chwili jednowymiarową tablicę
'jakiś kod MsgBox tablica(i, 1)
Next i

End Sub


Czyli pętlisz na tablicy a wynik możesz wprost wpisywać w arkuszu (chociaż szybciej jest jednorazowo wpisać wyniki hurtem do arkusza).
napisał: VBAmator
postów: 67


umieszczony:
20 stycznia 2017
15:18

  
Mam jeszcze pytanie. Dlaczego tablica miała by być lepszym rozwiązaniem niż zdefiniowany zakres?
Uchroni mnie przed ingerencjami typu wstaw kolumnę itd?

Podrzucisz przykład?
napisał: VBAmator
postów: 67


umieszczony:
20 stycznia 2017
15:14

  
Super sprawa szczególnie FindNext.
Wielkie dzięki.
napisał: Trebor
postów: 1209


umieszczony:
19 stycznia 2017
19:59

  
Kod w rodzaju
Sub FRAGMENT_TXT()
Dim Z As String
Dim znaleziona As Range, adres As String

Z = InputBox("Wpisz ciąg znaków")
With Sheets(1).Range("Zakres")
Set znaleziona = .Find(Z, after:=.Cells(.Rows.Count, .Columns.Count), LookIn:=xlValues, LookAt:=xlPart, MatchCase:=True)

    If Not znaleziona Is Nothing Then
        adres = znaleziona.Address
        Do
            MsgBox "Znaleziono w " & znaleziona.Address

            Set znaleziona = .FindNext(znaleziona)
        Loop While Not znaleziona Is Nothing And znaleziona.Address <> adres
    End If
End With

End Sub


Osobiście polecam kod pierwszy, ale w miejsce nazwanego zakresu sugeruję tablicę.
Jeśli należy wyszukać tylko pierwsze wystąpienie ciągu można posiłkować się funkcjami arkuszowymi.
napisał: VBAmator
postów: 67


umieszczony:
19 stycznia 2017
14:53

  
Bardzo dziękuję.

Byłbym wdzięczny gdybyś podrzucił kod z zastosowaniem tym razem metody expression.Find.
Przetestował bym sobie co szybciej pracuje no i dokształcił się dodatkowo.

Zaintrygowałeś mnie. Zakres jest mały do 1000. A co jeśli miał by paręnaście tys?
napisał: Trebor
postów: 1209


umieszczony:
19 stycznia 2017
13:41

edytowany:
19 stycznia 2017
13:43

  
Jeśli zakres nie jest zbyt duży to wystarczy kod:
Sub FRAGMENT_TXT()
Dim Z As String
Dim komorka As Range

Z = InputBox("Wpisz ciąg znaków")

For Each komorka In Range("Zakres")
 If InStr(1, komorka, Z) Then
 MsgBox "Znaleziono w " & komorka.Address
 End If
Next

End Sub


Zakładam, że zakres to zdefiniowana nazwa obejmująca ileś tam komórek oraz że kod ma rozróżniać wielkie litery.
napisał: VBAmator
postów: 67


umieszczony:
17 stycznia 2017
15:34

  
Mój problem polega tym:

Sub FRAGMENT_TXT()
Dim Z As String
Dim komorka As Range

Application.ScreenUpdating = False

Z = InputBox("Wpisz ciąg znaków")

For Each komorka In Range("Zakres")
 'If w zawartości komorki znajdzisz "Z" Then
  'coś tam
 'End If
Next

End Sub

napisał: Trebor
postów: 1209


umieszczony:
13 stycznia 2017
18:11

  
W zasadzie masz dwa sposoby:
Pętla po komórkach i funkcja InStr
Metoda "expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)" - działa podobnie jak arkuszowe Ctrl+f

Sprecyzuj warunki, cel, zakres przeszukiwania to będzie łatwiej udzielić pomocy.
napisał: VBAmator
postów: 67


umieszczony:
13 stycznia 2017
15:57

  
Witam.
Potrzebuję wyszukać zadanego przez InputBox ciągu znaków w komórkach.
Podrzucicie zaklęcie?


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z