Özellik ikonu

CDbl

İndirme izni yok

Genel Bakış

CDbl (Convert to Double), verilen metin ya da sayısal ifadeyi Double veri türüne çeviren bir VBA tür dönüştürme işlevidir. Hücrelerde metin olarak duran sayıları hesaplamaya hazırlamak, tarihleri seri numarasına çevirmek ve ondalıklı hesaplarda türü açıkça belirlemek için kullanılır.

Söz dizimi​

İşlevin söz dizimi şöyledir:
VBA
CDbl(ifade)
  • ifade: Zorunludur. Dönüştürülecek metin, sayı, tarih ya da sayıya çevrilebilen bir değişken veya hücre değeridir. Varsayılan değeri yoktur.
İşlev, Double türünde bir değer döndürür. Double, yaklaşık olarak negatif tarafta -1,79769313486231E308 ile -4,94065645841247E-324, pozitif tarafta 4,94065645841247E-324 ile 1,79769313486232E308 arasındaki değerleri tutar. Bu aralığın dışındaki bir değer Taşma (Overflow, hata 6) hatası verir.

Dönüştürme kuralları​

  • Metin: İçeriği sayı olarak okunabiliyorsa çevrilir. Baştaki ve sondaki boşluklar sorun çıkarmaz. Sayı olarak okunamayan metin (ör. harf içeren) Type mismatch (Tür uyuşmazlığı, hata 13) verir. Boş metin de aynı hatayı verir.
  • Tarih: Tarih ve saat değerleri Excel seri numarasına dönüşür. Tam sayı kısmı gün sayısını, ondalık kısmı günün saatini gösterir.
  • Boolean: True değeri -1, False değeri 0 olur.
  • Empty: Boş bir hücrenin .Value değeri Empty olduğu için sonuç 0 çıkar.
  • Null: Null değeri Null değerinin geçersiz kullanımı (hata 94) hatası üretir.
Benzer işlevler (CInt, CLng, CSng, CCur, CDec) aynı mantıkla çalışır ama farklı veri türü döndürür. CInt ve CLng sonucu yuvarlar, CDbl ise ondalık kısmı korur.

Bölgesel ayarlar ve hata yönetimi​

CDbl, bilgisayarın bölgesel ayarlarını dikkate alır. Türkçe ayarlarda ondalık ayırıcı virgül, binlik ayırıcı noktadır. Bu nedenle bir metindeki 1.250,75 değeri Türkçe ayarlarda doğru okunurken, İngilizce ayarlı bir bilgisayarda aynı metin hata verebilir ya da farklı bir sayıya dönüşebilir. Kodun içinde yazdığınız sabit sayılar ise her zaman noktalı ondalık biçimle yazılır.
Dönüştürmenin başarılı olup olmayacağından emin değilseniz önce IsNumeric ile denetleyin ya da On Error Resume Next ve Err.Number ile hatayı yakalayın. Örnekler bölümünde ikinci örnek bu yöntemi gösterir.

1. Metin olarak yazılmış fiyatları sayıya çevirme​

Fiyatlar B sütununda metin biçiminde duruyor. Aşağıdaki kodu standart bir modüle yapıştırın. Makro her fiyatı CDbl ile sayıya çevirip C sütununa yazar, ardından D sütununda yüzde 20 KDV'li tutarı hesaplar.
VBA 15 satır
Option Explicit

Sub MetniSayiyaCevir()
    Dim r As Long
    Dim fiyat As Double

    ' 2. satırdan 6. satıra kadar fiyatları işle
    For r = 2 To 6
        ' Metni Double türüne çevir
        fiyat = CDbl(Cells(r, 2).Value)
        Cells(r, 3).Value = fiyat
        ' KDV'li tutarı hesapla
        Cells(r, 4).Value = fiyat * 1.2
    Next r
End Sub
CDbl
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünFiyat (Metin)Fiyat (Sayı)KDV'li Tutar
2Klavye12501.250,001.500,00
3Fare980980,001.176,00
4Monitör24002.400,002.880,00
5Kulaklık175175,00210,00
6Yazıcı36003.600,004.320,00
Metin SayılarExcelDepo v1.0.0
Makro çalışınca C sütununda gerçek sayılar oluşur. Klavye için fiyat 1.250,00, KDV'li tutar ise 1.500,00 olarak yazılır. Artık bu hücreler TOPLA gibi işlevlere ve diğer hesaplara doğrudan girebilir.

2. Hatalı veriyi yakalayarak güvenli dönüştürme​

Aylık satış değerlerinin bir kısmı sayı değil, açıklama metni içeriyor. Kodu standart bir modüle yapıştırın. Makro dönüştürme hatasını yakalar; başarılı satırlarda sayıyı, başarısız satırlarda "Hatalı" yazısını C sütununa, hata kodunu D sütununa yazar.
VBA 23 satır
Option Explicit

Sub GuvenliCevir()
    Dim r As Long
    Dim sayi As Double

    For r = 2 To 6
        Err.Clear
        On Error Resume Next
        sayi = CDbl(Cells(r, 2).Value)

        If Err.Number <> 0 Then
            ' Dönüştürme başarısız: hata kodunu kaydet
            Cells(r, 3).Value = "Hatalı"
            Cells(r, 4).Value = Err.Number
            Err.Clear
        Else
            Cells(r, 3).Value = sayi
            Cells(r, 4).Value = 0
        End If
        On Error GoTo 0
    Next r
End Sub
CDbl
Formülünü incelemek için bir hücre seçin.
ABCD
1AySatış (Ham Veri)SonuçHata Kodu
2Ocak150015000
3ŞubatyokHatalı13
4Mart240024000
5NisanbelirsizHatalı13
6Mayıs8758750
Hata DenetimiExcelDepo v1.0.0
Ocak satırında dönüştürme başarılı olur ve C2 hücresine 1500 yazılır. Şubat satırında "yok" metni sayıya çevrilemediği için C3 hücresinde Hatalı yazısı görünür ve D3 hücresine hata kodu 13 (Type mismatch) yazılır. Böylece makro hata verip durmaz, tüm satırları işlemeye devam eder.

3. Tarihi seri numarasına çevirme​

Sipariş tarihlerinin Excel'deki seri numaralarını görmek istiyorsunuz. Kodu standart bir modüle yapıştırın. Makro B sütunundaki tarihi CDbl ile çevirip C sütununa yazar, D sütununa ise sonucun veri türünü TypeName ile yazar.
VBA 14 satır
Option Explicit

Sub TarihiSayiyaCevir()
    Dim r As Long
    Dim seri As Double

    For r = 2 To 6
        ' Tarihi seri numarasına (Double) çevir
        seri = CDbl(Cells(r, 2).Value)
        Cells(r, 3).Value = seri
        ' Dönüşen değerin veri türünü yaz
        Cells(r, 4).Value = TypeName(seri)
    Next r
End Sub
CDbl
Formülünü incelemek için bir hücre seçin.
ABCD
1Sipariş NoSipariş TarihiSeri NoTür
2S-100115.03.202445366Double
3S-100216.03.202445367Double
4S-100301.04.202445383Double
5S-100420.05.202445432Double
6S-100530.06.202445473Double
Tarih Seri NoExcelDepo v1.0.0
S-1001 siparişinin tarihi 45366 seri numarasına dönüşür; sonraki gün olan S-1002 için seri numarası 45367 olur. Türü gösteren D2 hücresinde Double yazar. Seri numarası, 1 Ocak 1900 gününden itibaren geçen gün sayısını gösterir; tarih farkı ve gün hesaplarında bu sayı kullanılabilir.

Kullanırken dikkat edin​

  • Bölgesel ayar farkına dikkat edin: Metindeki ondalık ve binlik ayırıcılar bilgisayarın bölgesel ayarlarına göre yorumlanır. Aynı dosya farklı dil ayarlı bir bilgisayarda açılırsa metin tabanlı dönüştürmeler farklı sonuç verebilir. Dışarıdan gelen verilerde önce ayırıcıları kontrol edin.
  • Çevrilemeyen değerde hata oluşur: Harf içeren metin, boş metin ya da hata değeri içeren hücre CDbl ile çevrilirse Type mismatch (hata 13) oluşur. Emin olmadığınız verilerde önce IsNumeric ile denetleyin ya da On Error Resume Next ve Err.Number ile hatayı yakalayın. Hata kapsamını işi bitince On Error GoTo 0 ile kapatmayı unutmayın.
  • Boş hücre 0 olarak çevrilir: Boş bir hücrenin .Value değeri Empty olduğundan CDbl sonucu 0 çıkar. Boş hücreleri 0'dan ayırmak istiyorsanız dönüştürmeden önce IsEmpty ya da Len ile kontrol edin.
  • Birden çok hücreyi tek seferde çeviremezsiniz: CDbl tek bir değer ister. Birden çok hücre içeren bir Range nesnesini doğrudan veremezsiniz; hücreler üzerinde For döngüsüyle tek tek dolaşmanız gerekir.
  • Kayan noktalı sayı hassasiyeti: Double türü yaklaşık 15 anlamlı basamak tutar. Çok büyük tam sayılarda ve ondalık karşılaştırmalarında küçük yuvarlama farkları oluşabilir. Parasal hesaplarda CCur (Currency) ya da CDec daha güvenli olabilir.
  • İlgili konular:
    • CInt, CLng, CSng, CCur, CDec: Diğer tür dönüştürme işlevleri.
    • Val: Metnin başındaki sayısal kısmı, ondalık ayırıcı olarak noktayı kullanarak okur ve bölgesel ayarlardan etkilenmez.
    • IsNumeric: Bir ifadenin sayıya çevrilebilir olup olmadığını denetler.
    • TypeName ve VarType: Bir değerin veri türünü öğrenmek için kullanılır.
    • On Error deyimi ve Err nesnesi: Dönüştürme hatalarını yakalamak için kullanılır.
    • DEĞER ve TARİHSAYISI: Çalışma sayfasında metni sayıya ya da tarihe çeviren işlevler.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
12
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst