Çoklu Metin Araması KTF-UDF

Bu gunku ornegimizde ekran resminden anlamak zor olabilir, ama calismamiz bir nevi search fonksiyonunun coklu kullanilabilmesi ile ilgili bir fonksiyon paylasimi ile ilgili.

Merhaba Dunya ExcelTR! seklinde bir metnimiz var ve bu metin icerisinde ExcelTR kisminin kacinci harften basladigini bulmak icin search fonksiyonunu kullanabiliriz.

=SEARCH(A5,A1,1) seklinde bir formul bize ekran resmimizdeki gibi 15 sonucunu verecektir.

Merhaba(7)+ bosluk(1)+Dunya(5)+bosluk(1)+Bir Sonraki Harfin baslangici = 15

Peki bu kadar basit sekilde bu aramayi yapabiliyorsak neden bir kullanici tanimli fonksiyon yazmak isteyelim ?

Soyle ki; dinamik bir metniniz ve bu metinde gecmesini beklediginiz kriterleriniz olabilir ve her kriterinizin kacinci harften basladigini bilmek yahut kriterlerinizden birini icerip icermedigini bilmek isteyebilirsiniz. Ornek resimde bir nevi oyle 3 kriter belirledik ve son kriterimiz olan ExcelTR kriteri metin icerisinde yer aldi ve 15 sonucunu verdi.

Kriterlerinizi verdiginiz sira da onemli ayrica listenizdeki kriterlerden iki yahut daha fazlasini metninizin icerme olasiligi var ise ilk gordugu kriterin sonucunu verecektir.

Function Search_Multiple(Start As Long, SourceText As String, WordsToFind As Variant, _
                  Optional CaseSensitive As Boolean = False, _
                  Optional AdditionalWordBreaks As String) As Long
  Dim x As Long, Str1 As String, Pattern As String, WordBreaks As String, Word As Variant
  WordBreaks = "[&"" '(),./:;<>?[_`{|}~©®«»­´¶·¿!" & Chr$(160) & "-]"
  For x = 1 To Len(AdditionalWordBreaks)
    If InStr(WordBreaks, Mid(AdditionalWordBreaks, x, 1)) Then Mid(AdditionalWordBreaks, x, 1) = " "
  Next
  WordBreaks = Replace(WordBreaks, "-]", Replace(AdditionalWordBreaks, " ", "") & "-]")
  If CaseSensitive Then
    Str1 = SourceText
  Else
    Str1 = UCase(SourceText)
  End If
  If TypeName(WordsToFind) = "String" Then WordsToFind = Split(WordsToFind, Chr$(1))
  For Each Word In WordsToFind
    If Not CaseSensitive Then Word = UCase(Word)
    For x = Start To Len(Str1) - Len(Word) + 1
      If Mid(" " & Str1 & " ", x, Len(Word) + 2) Like WordBreaks & Word & WordBreaks Or _
         Mid(" " & Str1 & " ", x, Len(Word) + 2) Like WordBreaks & Word & "[]]" Then
        Search_Multiple = x
        Exit Function
      End If
    Next
  Next
End Function

Çoklu Metin Araması KTF-UDF

Yazar: mmustafaaslan

2004 yilindan itibaren ozel bir sirketin finans departmaninda calismaktadir. Kendini excel, visual basic kullaniminda gelistirmis olan yazarimiz; Meslegi geregi SAP konusunda ileri derecede bilgilidir.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


2 + 8 =