• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

3 Büyük Harf Kuralı

Katılım
15 Mayıs 2015
Mesajlar
518
Excel Vers. ve Dili
Microsoft Office 2019
Merhaba ;

Bir hücrede değer doğrulama yapmak istiyorum ama vba ile. İf else ile yazılsa yeterli Uygun Yada Ret

Türkçe Karakterlerin de kullanıldığı kuralı bozmaması lazım ( İ,Ç,Ğ,Ü,Ö)

Kural : 3 Büyükharf ABC CDE gibi.

Ret : 1A2 125 A12 aBC gibi

yardımlarınızı bekliyorum
 
Farklı algoritmalar da geliştirilebilir... Ancak Regular Expressions ile bu işlem çok daha kolay.
Test edin...

PHP:
Sub Example()
    MsgBox TestLetters("A2C")
End Sub


Function TestLetters(ByVal letter As String) As Boolean
    Static objReg As Object
  
    If objReg Is Nothing Then Set objReg = CreateObject("VBScript.RegExp")
  
    objReg.Pattern = "[A-ZİÇĞÜÖ]{3}"
  
    TestLetters = objReg.Test(letter)
End Function
 

Alternatif olarak....
Hazırlamışken ekleyeyim istedim... Eki incelersiniz...
Not : Acemi işidir...

Kullanıcı Tanımlı Fonksiyon
Kod:
Function UcBH(rng As Range)
Dim i As Integer, a As Integer, s As Integer, k As Integer, f As String
   a = Len(rng)
      If rng = "" Or a < 3 Then
         UcBH = "H A T A"
         Exit Function
      End If
   s = 0
   For i = 1 To a
      f = Mid(rng, i, 1)
      k = Application.WorksheetFunction.Unicode(f)
         If k > 64 And k < 91 Or k > 219 And k < 223 Or k = 199 Or k = 208 Or k = 214 Then
            s = s + 1
               If s > 2 Then
                  UcBH = "UYGUN"
                  Exit Function
               End If
         Else
            s = 0
         End If
   Next
      UcBH = "Uygun DEGiL"
End Function

KTF kullanımı
=UcBH(HücreAdresi)
şeklindedir.
 
Merhaba Arkadaşlar,
Zeki hocam, canınız sıkılmasın haa!
KTF de aşağıdaki satırına Ş ekleyiniz.
objReg.Pattern = "[A-ZİÇĞÜÖ]{3}"
İyi çalışmalar
 
Merhaba Arkadaşlar,
52779 arkadaşım canınız sıkılmasın haa!
KTF de aşağıdaki satırı değiştiriniz
If k > 64 And k < 91 Or k > 219 And k < 223 Or k = 199 Or k = 286 Or k = 214 Or k = 304 Or k = 350 Then
İyi çalışmalar
Not: hiç te öyle acemi işine benzemiyor. Elinize sağlık
 
Son düzenleme:
Sayın Hlojan,
Ş harfini kullanmıyorsanız Zeki hocamın KTF sini ellemeyiniz.
52779 arkadaşımın KTF sinde Or k=350 yi siliniz.
İyi çalışmalar
 
Merhaba Arkadaşlar,
52779 arkadaşım canınız sıkılmasın haa!
KTF de aşağıdaki satırı değiştiriniz
If k > 64 And k < 91 Or k > 219 And k < 223 Or k = 199 Or k = 286 Or k = 214 Or k = 304 Or k = 350 Then
İyi çalışmalar
Not: hiç te öyle acemi işine benzemiyor. Elinize sağlık

Çok teşekkür ediyorum,

If k > 64 And k < 91 Or k > 219 And k < 223 Or k = 199 Or k = 208 Or k = 214 Then

satırı, A dan Z ye ve Ç, Ğ, İ, Ö, Ş, Ü tümü için ,

If k > 64 And k < 91 Or k = 199 Or k = 214 Or k = 220 Or k = 286 Or k = 304 Or k = 350 Then

şeklinde olacak...
 
Alternatif:


Kod:
Sub Test()
    MsgBox TestLettersHD("AIW")
End Sub
'
Function TestLettersHD(ByVal strVal As String) As Boolean
    If strVal Like "[A-ZİÇĞÜÖŞ][A-ZİÇĞÜÖŞ][A-ZİÇĞÜÖŞ]" Then TestLettersHD = True
End Function



Fonksiyon, aşağıdaki gibi de olabilir;

Kod:
Function TestLettersHD(ByVal strVal As String) As Boolean
    If strVal Like WorksheetFunction.Rept("[A-ZİÇĞÜÖŞ]", 3) Then TestLettersHD = True
End Function

.

.
 
Son düzenleme:
Alternatif:


Kod:
Sub Test()
    MsgBox TestLettersHD("AIW")
End Sub
'
Function TestLettersHD(ByVal strVal As String) As Boolean
    If strVal Like "[A-ZİÇĞÜÖŞ][A-ZİÇĞÜÖŞ][A-ZİÇĞÜÖŞ]" Then TestLettersHD = True
End Function



Fonksiyon, aşağıdaki gibi de olabilir;

Kod:
Function TestLettersHD(ByVal strVal As String) As Boolean
    If strVal Like WorksheetFunction.Rept("[A-ZİÇĞÜÖŞ]", 3) Then TestLettersHD = True
End Function

.

.

Mükemmel.
Çok teşekkürler..

Nacizane önerim : Hücrede 3 karakterden fazla olması durumunun da kodlara eklenmesi...
 
Karakter sayısını, otomatik olarak alsın istiyorsanız;

Kod:
Function TestLettersHD(ByVal strVal As String) As Boolean
    If strVal Like WorksheetFunction.Rept("[A-ZİÇĞÜÖŞ]", Len(strVal)) Then TestLettersHD = True
End Function

.
 
Demek istediğim tam olarak şu idi..
Hücrede yazan 34 AJK 09 gibi bir değer olsun. (3 Büyük harf var ama) Bu durumda Fonksiyon YANLIŞ değeri vermekte.
Yani acemice belki ama Like " * " &..............& " * " gibi yapılabilir demek istemiştim.
 
Demek istediğim tam olarak şu idi..
Hücrede yazan 34 AJK 09 gibi bir değer olsun. (3 Büyük harf var ama) ....
......
..


2 dijit, 1 boşluk, 3 Büyuk Harf, 1 boşluk, 2 dijit için desen kontrolü;


Kod:
Sub Test()
    MsgBox TestLettersHD("34 AJK 09")
End Sub
'
Function TestLettersHD(ByVal strVal As String) As Boolean
    If strVal Like "## " & WorksheetFunction.Rept("[A-Z]", 3) & " ##" Then TestLettersHD = True
End Function

.
 
Tam olarak anlatamadım tabi ki.. Hata bende....
Hücrede 3 karakterden fazla bir ifade var. 34 AJK 07 de olabilir, ADANA da olabilir. Ya da başka, 3 peşpeşe büyük harf içeren herhangi uzun bir kelime de olabilir. Tüm durumlarda çalışacak şekilde fonksiyonun düzenlenmesini önermiştim...

Yordum sizi.. kusuruma bakmayın...
 
Alternatif:


Kod:
Sub Test()
    MsgBox TestLettersHD("AIW")
End Sub
'
Function TestLettersHD(ByVal strVal As String) As Boolean
    If strVal Like "[A-ZİÇĞÜÖŞ][A-ZİÇĞÜÖŞ][A-ZİÇĞÜÖŞ]" Then TestLettersHD = True
End Function



Fonksiyon, aşağıdaki gibi de olabilir;

Kod:
Function TestLettersHD(ByVal strVal As String) As Boolean
    If strVal Like WorksheetFunction.Rept("[A-ZİÇĞÜÖŞ]", 3) Then TestLettersHD = True
End Function

.

.


Herkese teşekkürler. 13 cevap görünce şaşırdım.

Hepsini denemedim ama Haluk Beyinki sorunsuz çalıştı her kombinasyonu denedim. Sorunsuz

Teşekkürler
 
Tam olarak anlatamadım tabi ki.. Hata bende....
Hücrede 3 karakterden fazla bir ifade var. 34 AJK 07 de olabilir, ADANA da olabilir. Ya da başka, 3 peşpeşe büyük harf içeren herhangi uzun bir kelime de olabilir. Tüm durumlarda çalışacak şekilde fonksiyonun düzenlenmesini önermiştim...

Yordum sizi.. kusuruma bakmayın...

Bu tip kodlamada, işin başında standart bir "desen" oluşturmak önemlidir. Oluşturulan desene göre veri(ler) incelenir. Ben sizin deseninizi maalesef anlayamadım.

Siz de benim kusuruma bakmayın, kolay gelsin ...

.
 
Bu tip kodlamada, işin başında standart bir "desen" oluşturmak önemlidir. Oluşturulan desene göre veri(ler) incelenir. Ben sizin deseninizi maalesef anlayamadım.

Siz de benim kusuruma bakmayın, kolay gelsin ...

.

Çok teşekkür ediyorum gerçekten..
Selamlarımla...
 
Bir alternatifte ben paylaşmak isterim.

C++:
Option Explicit

Function K_HARF_KONTROL(Veri As Variant) As Boolean
    Dim X As Byte, Metin As String
    
    Application.Volatile True
    
    Metin = Veri
    
    For X = 65 To 222
        Select Case X
            Case 65 To 90, 199, 208, 214, 220 To 222
            Metin = Replace(Metin, Chr(X), "|")
        End Select
    Next
    
    K_HARF_KONTROL = InStr(1, Metin, "|||") > 0
End Function
 
Geri
Üst