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.
 

Merhum İdris SERDAR

Moderatör
Yönetici
Katılım
21 Ekim 2005
Mesajlar
17,094
Excel Vers. ve Dili
Excel, 365 - İngilizce
.

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.

.
 
Katılım
9 Ekim 2019
Mesajlar
109
Excel Vers. ve Dili
Standart 2016
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.
 
Katılım
6 Temmuz 2015
Mesajlar
926
Excel Vers. ve Dili
2003
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
 

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,111
Excel Vers. ve Dili
office2010
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
 

Ömer

Moderatör
Yönetici
Katılım
18 Ağustos 2007
Mesajlar
22,184
Excel Vers. ve Dili
Microsoft 365 Tr
Ofis 2016 Tr
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

.
 
Üst