• DİKKAT

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

Soru Virgülden Sonra 2 Hane Kontrolü

Katılım
9 Ekim 2019
Mesajlar
109
Excel Vers. ve Dili
Standart 2016
Arkadaşlar merhaba,

B sütununa girilen sayılarda virgülden sonra 2 hane olarak girilip girilmediğini girilmedi ise hata mesajı veren kodu nasıl yazabiliriz? İstediğim virgülden sonra 1 hanede olmasın 2 den fazla da olmasın. Tüm rakamlar virgülden sonra 2 hane olsun istiyorum.
Çok aradım ama bulamadım işime yarayacak bir şey. Yardımcı olabilirseniz sevinirim.
 
.

Makrosuz.

İngilizce sürüm kullandığım için İngilizce olarak vereceğim.

1. B sütununda ilgili alanı seçerek, Number Format'tan 2 desimali seçin.

2. B1 hücresine aşağıdaki formüllerden birini Data Validation'ın Custo, Formula bölümüne aşağıdaki formüllerden birini yazın.

Kod:
=MOD(B1*100;1)=0

=INT(B1*100)=(B1*100)

=B1=ROUND(B1;2)

=ABS(B1-ROUND(B1;2))<0,00000001

=FIND(",";B1;1)>=LEN(B1)-2

3. Belirlediğiniz alana kopyalayın.

.
 
Cevabınız için teşekkür ederim @İdris SERDAR
Ben girilen değerler üzerinde yuvarlama yapıyorum zaten ama gözden kaçan olabilir diye dosyayı kaydetmeden önce makronun kontrol etmesini istiyorum. If komutu ile yazdıklarınız üzerinden kontrol yapabilirim ama 500bin satırlık verilerde çok zaman alır diye düşünüyorum.
 
Merhabalar,

Bu şekilde bir deneyiniz.

Sub Düğme1_Tıklat()
For a = 1 To [B1048576].End(xlUp).Row
If Cells(a, 2) <> "" Then
If Mid(Cells(a, 2), Len(Cells(a, 2)) - 2, 1) <> "," Then
MsgBox "Virgülden sonra 2 basamak girmelisiniz."
Cells(a, 2).Select
Exit Sub
End If
End If
Next a
End Sub
 
Veri aralığı B2:B? olarak yapılan çalışma.

Kod:
Sub test()
    a = Range("B2:B" & Cells(Rows.Count, 2).End(3).Row).Value
    ReDim b(1 To UBound(a), 1 To 1)
    For i = 1 To UBound(a)
        On Error Resume Next
        If IsNumeric(a(i, 1)) Then
            deg = Split(a(i, 1), ",")(1)
            If Err = 0 Then
                If Val(Len(deg)) <> 2 Then
                    b(i, 1) = "HATALI GİRİŞ"
                End If
            End If
        End If
        On Error GoTo 0
    Next i
    [C2].Resize(UBound(a)).Value = b
    Erase a
    MsgBox "C sütununu kontrol ediniz.", vbInformation
End Sub
 
Merhaba,

Sayı olarak değilde biçimi kontrol etmeyecekseniz;
Veriler sayıysa virgülden sonra 0 yada 1 basamağı mantık olarak kontrol etmeye gerek kalmaz.
5,8 ile 5,80 arasında yada 5 ile 5,00 arasında sayısal olarak bir fark yoktur. Sizin de istediğiniz bu sanırım.

Sayın Ziynettin'in yazdığı kodlarda;

If Val(Len(deg)) <> 2 Then

yerine, aşağıdaki gibi kullanarak deneyin.

If Val(Len(deg)) > 2 Then

.
 
Geri
Üst