Sesli - Sessiz Harf Ayırabilme

gbm

Katılım
19 Şubat 2022
Mesajlar
8
Excel Vers. ve Dili
türkçe
Bir hücre içerisindeki sesli ve sessiz harfleri ayırmak istiyorum. Bunun için de şöyle bir kod buldum:



Fakat kodu çalıştırdığımda hep bir önceki değerin üzerine ekleniyor.

Örn:
İlk başta "Excel" yazmış olayım, sesliler "ee" ve sessizler "xcl" olarak ayrılıyor, buraya kadar tamam.

Sonrasında "makro" yazarsam, sesliler "eeao" ve sessizler "xclmkr" şeklinde oluyor. Ben ise sadece "ao" ve "mkr" olsun istiyorum.



Bunu yapabilmek için yeni bir kod önerebilir misiniz? Ya da bu kodu nasıl güncellemeliyim?

Veya bunu kodsuz, daha basit şekilde fonksiyon ya da formüllerle yapabilme şansım var mı?
 

gbm

Katılım
19 Şubat 2022
Mesajlar
8
Excel Vers. ve Dili
türkçe
kodun yazılı halini de bırakayım

Option Explicit
Dim i As Single
Dim Dizi As String, Karakter As String * 1, Sessiz As String, Sesli As String

Sub DizidekiSesliSessizYazıKarakterleri()
On Error GoTo Hata
Dizi = Range("E3").Value
For i = 1 To Len(Dizi)
Karakter = VBA.Mid(Dizi, i, 1)
Select Case VBA.LCase(Karakter)
Case "a", "e", "ı", "i", "o", "ö", "u", "ü"
Sesli = Sesli & Karakter
Case Else
Sessiz = Sessiz + Karakter
End Select
Next i
Range("E16") = Sessiz
Range("E17") = Sesli
Exit Sub
Hata:
Range("E16") = ""
Range("E17") = ""
End Sub
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
"Libre Office" de REGEX fonksiyonu kullanarak basit bir formülle yapabilirsiniz...








.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Libre Office'de kopyalayıp, MS Excel'e yapıştırabilirsiniz.

.
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,900
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Kullanıcı tanımlı Fonksiyon

Kod:
Function Karekterduz(aString As String, eslesen As String, _
                    Optional CaseSensitive As Boolean = False, Optional AlphaOnly As Boolean = True) As String
    Dim testString As String, testChr As String
    Dim i As Long
    testString = aString
    
    If Not CaseSensitive Then
        testString = LCase(testString)
        eslesen = LCase(eslesen)
    End If
    
    If Not eslesen Like "[?*]" Then
        eslesen = "[" & eslesen & "]"
    ElseIf eslesen = vbNullString Then
        eslesen = "*"
    End If
    
    For i = 1 To Len(testString)
        testChr = Mid(testString, i, 1)
        If testChr Like eslesen Then
            If AlphaOnly And (UCase(testChr) = LCase(testChr)) Then
            Else
                Karekterduz = Karekterduz & Mid(aString, i, 1)
            End If
        End If
    Next i

End Function
Sessiz harfler için
Kod:
=Karekterduz(A1;"!aeiüıö")
Sesli harfler için
Kod:
=Karekterduz(A1;"aeiüıö")
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,900
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Başka bir kullanıcı tanımlı fonksiyon

Kod:
Function Sesli(str As String) As String
Dim re As Object
Set re = CreateObject("vbscript.regexp")
re.IgnoreCase = True
re.Global = True
re.Pattern = "[bcçdfgğhjklmnpqrsştvwxyz]"
Sesli = re.Replace(str, "")
End Function

Function Sessiz(str As String) As String
Dim re As Object
Set re = CreateObject("vbscript.regexp")
re.IgnoreCase = True
re.Global = True
re.Pattern = "[aeiüıö]"
Sessiz = re.Replace(str, "")
End Function
=Sesli(A1)
=Sessiz(A1)
 

gbm

Katılım
19 Şubat 2022
Mesajlar
8
Excel Vers. ve Dili
türkçe
Çok teşekkür ederim herkese ellerinize sağlık. Bunu çalıştırabildim sağolun

Başka bir kullanıcı tanımlı fonksiyon

Kod:
Function Sesli(str As String) As String
Dim re As Object
Set re = CreateObject("vbscript.regexp")
re.IgnoreCase = True
re.Global = True
re.Pattern = "[bcçdfgğhjklmnpqrsştvwxyz]"
Sesli = re.Replace(str, "")
End Function

Function Sessiz(str As String) As String
Dim re As Object
Set re = CreateObject("vbscript.regexp")
re.IgnoreCase = True
re.Global = True
re.Pattern = "[aeiüıö]"
Sessiz = re.Replace(str, "")
End Function
=Sesli(A1)
=Sessiz(A1)
 
Üst