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