Excel VBA Blog

2010-03-19

Split fonksiyonu yerine

Filed under: Uncategorized — Etiketler:, , — dutali @ 10:51 pm

Bu yazıyı exceltr.net altında okumak için  tıklayın


 

Split fonksiyonu verilen bir stringi, verilen bir karakterlerin bulunduğu noktalardan böler ve geriye bir dizi döndürür.
Dizi 0. elemandan başlar. Bunun yerine sırf iş olsun diye diziyi 1. eleman ilk eleman olmak üzere yaratan bir sınıf (class) yazalım. Sonra da kullanalım. Bir dahaki yazıda aynı şeyin sınıf yazmadan, sadece bir fonksiyon ile yapılabileceğini göstereceğim

Sınıf:

Option Explicit

Private sParam As String
Private sAyrac As String
Private vParamArray() As Variant

'Programcı:Ebubekir Çelik
'Kısa Tanım: Split fonksiyonunun yaptığı şeyi yapar. Fakat dizi 0'dan değil birden başlar
'Ayrıca verilen bir diziyi elemanlarının arasına ayraç koyarak parametre haline getirir
'Split kullanılarak daha efektif olabilir.Sadece  sınıf yazmaya örnek olsun diye
' 2007.Nisan


Private bIsReady As Boolean

Property Get Paramt() As String
 Paramt = sParam

End Property
Property Let Paramt(ByVal prm As String)
     sParam = prm
  If bIsReady Then setArrayFromParam vParamArray
     bIsReady = True
End Property
Property Get Ayrac() As String
    Ayrac = sAyrac
End Property

Property Let Ayrac(ByVal ayr As String)
    sAyrac = ayr
      If bIsReady Then setArrayFromParam vParamArray
     bIsReady = True
End Property
Property Get NthParameter(ByVal iPrNo As Integer)
    ParamNumN = vParamArray(iPrNo)
End Property

Property Get ParameterArray()
    ParameterArray = vParamArray
End Property
Property Let ParameterArray(pa)
    vParamArray = pa
End Property
Public Function PArrayToGetParam() ''(ByVal pArr, sAyr As String)

'vParamArray = pArr
'sAyrac = sAyr
If sAyrac <> "" Then setParamFromArray vParamArray, sAyrac
End Function


Private Function setParamFromArray(ByVal pArr, ByVal sAyr)
Dim i As Integer
Dim ADim As Integer
ADim = fnGetDimension(pArr)
    If ADim = 1 Then
            For i = 1 To UBound(pArr, 1) - 1 ''dikkatttt -1 olmazsa sona da koyar
                sParam = sParam & pArr(i) & sAyr
              Next
             sParam = sParam & pArr(i)
              
     Else
     '2iki boyutlu ise 1. sütunu okur ! 1. satırı değil!!
             For i = 1 To UBound(pArr, 1) - 1 ''dikkatttt -1 olmazsa sona da koyar
              sParam = sParam & pArr(i, 1) & sAyr
            Next
             sParam = sParam & pArr(i, 1)
     End If

End Function



Private Function setArrayFromParam(ByRef vArray)
    Dim i As Integer, k As Integer
    Dim sTemp As String
    Dim iAyracAdet As Integer

    
    iAyracAdet = CountStringChar(sParam, sAyrac)
    sTemp = sParam
    ReDim vArray(1 To iAyracAdet + 1)
      If iAyracAdet = 0 Then
        vArray(1) = sTemp
      Else
      
        For i = 1 To iAyracAdet
                k = InStr(1, sTemp, sAyrac)  ''ilk ayracın konumu
               vArray(i) = Left(sTemp, k - 1)
                sTemp = Right(sTemp, Len(sTemp) - k)
        Next
            vArray(i) = sTemp
    End If
                
End Function


Private Function CountStringChar(ByVal str As String, ByVal seperator As String)
Dim i As Integer
Dim iAmnt As Integer
Dim iLenFirst As Integer
 iAmnt = 0

  iLenFirst = Len(str)
    If seperator <> "" Then
        For i = 1 To iLenFirst
          If Mid(str, i, 1) = seperator Then iAmnt = iAmnt + 1
         Next
    End If

CountStringChar = iAmnt
End Function
Private Function fnGetDimension(vaArray)

    Dim i As Integer, l As Long

    On Error Resume Next
    Err.Clear
    For i = 1 To 4
        l = UBound(vaArray, i)
        If Err.Number <> 0 Then Exit For
        fnGetDimension = i
    Next
    Err.Clear

End Function

Ve nasıl kullanılacağı;
(Sınıfın ismi DiziParametre)

Public Function StringBol(sStr As String, sAyrac As String) As Variant
'Programcı :Ebubekir Çelik
'Kısa Tanım:string bölmek için yazılmış olan sınıfı kullanır
Dim pAdet As Integer, i As Integer
Dim grParam As New DiziParametre

    With grParam
        .Ayrac = sAyrac
        .Paramt = sStr
        StringBol = .ParameterArray
     End With
End Function

WordPress.com'da Blog Oluşturun.