Özellik ikonu

Val

İndirme izni yok

Genel Bakış

Val (Val function), bir metnin başında yer alan sayısal karakterleri okuyup sayıya çeviren VBA işlevidir. Sayı olarak yorumlayamadığı ilk karakterde okumayı bırakır ve o noktaya kadar okuduğu değeri döndürür. Ölçü, adet ya da kod gibi hem sayı hem metin içeren hücre değerlerinden sayıyı ayıklamak için kullanılır.

Söz dizimi​

Val işlevi tek bir bağımsız değişken alır:
VBA
Val(string)
  • string: sayıya çevrilecek metin ifadesi; zorunludur, varsayılan değeri yoktur. Genellikle bir metin değişkeni ya da hücrenin Value özelliği verilir.
İşlev, metindeki sayıyı uygun sayısal türde döndürür; ondalıklı ve büyük değerlerde sonuç genellikle Double türündedir. Sonucu bir değişkene ya da hücreye yazarak kullanırsınız: x = Val("12.5 kg") ifadesi 12,5 değerini verir.

Metin nasıl okunur​

Val metni soldan sağa tarar ve şu kurallara göre çalışır:
  • Boşluklar: boşluk, sekme ve satır sonu karakterleri yok sayılır. Bu yüzden "1 250 gr" metni 1250, "4 5 6" metni 456 olarak okunur.
  • Ondalık ayracı: yalnızca nokta (.) ondalık ayracı olarak tanınır. Bilgisayarınızın bölgesel ayarı virgül olsa bile "3.5" metni 3,5 olur; "3,5" metni ise virgülde durduğu için 3 olur.
  • Tanınmayan karakterler: para simgesi ($), yüzde işareti (%), binlik ayracı olarak virgül ve harfler sayının parçası sayılmaz. Metin bunlardan biriyle başlıyorsa sonuç 0 olur.
  • Birden çok nokta: "1.2.3" metninde ikinci noktada okuma durur ve sonuç 1,2 olur.
  • Önek: &H öneki onaltılık, &O öneki sekizlik sayı olarak yorumlanır. Örneğin Val("&HFF") 255, Val("&O17") 15 verir.
  • Sayı bulunamazsa: metin sayıyla başlamıyorsa ya da boş metinse sonuç 0 olur; hata üretilmez.

Val ile diğer dönüştürme yöntemleri​

CDbl, CLng gibi dönüştürme işlevleri metnin tamamının geçerli bir sayı olmasını bekler ve bölgesel ayarlara uyar; uygun olmayan metinde Tür uyuşmazlığı (Type mismatch) hatası verir. Val ise hata vermez, baştaki sayıyı alır ve her zaman nokta ayracını kullanır.
  • Val: "12.5 kg" gibi karışık metinlerden baştaki sayıyı almak için uygundur.
  • CDbl: kullanıcının yerel biçimde yazdığı "12,5" gibi saf sayı metinleri için uygundur.
  • IsNumeric: dönüştürmeden önce metnin sayıya benzeyip benzemediğini denetler.
Yerel biçimli metinlerle çalışıyorsanız Val yerine bölgesel ayara duyarlı dönüştürme işlevlerini tercih edin.

1. Ölçü metninden sayıyı ayıklama​

Sayfada ürünlerin ölçüleri "12.5 kg" gibi metin olarak yazılıdır. Alt+F11 ile Visual Basic Düzenleyicisi'ni açın, Ekle > Modül (Insert > Module) ile standart modül ekleyin ve aşağıdaki kodu yapıştırın. Makro, B sütunundaki metinlerin sayısal karşılığını C sütununa yazar.
VBA 13 satır
Option Explicit

Sub OlculeriSayiyaCevir()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets("Ölçüler")

    ' 2-8. satırlardaki ölçü metinlerini sayıya çevirir
    For i = 2 To 8
        ws.Cells(i, 3).Value = Val(ws.Cells(i, 2).Value)
    Next i
End Sub
Val
Formülünü incelemek için bir hücre seçin.
ABC
1ÜrünÖlçü MetniSayısal Değer
2Un12.5 kg12,5
3Zeytinyağı3.5 lt3,5
4Çay500 gr500
5ŞekerKutu 240
6Makarna3,5 kg3
7Tuz1 250 gr1250
8Süt%18 yağ0
ÖlçülerExcelDepo v1.0.0
Un için 12,5, zeytinyağı için 3,5, çay için 500 değeri yazılır. "Kutu 24" metni harfle başladığı için 0 sonucunu verir. "3,5 kg" metninde virgül ondalık ayracı sayılmadığı için okuma orada durur ve 3 yazılır. "1 250 gr" metnindeki boşluk yok sayıldığından sonuç 1250 olur. "%18 yağ" metni yüzde işaretiyle başladığı için 0 döner.

2. Özel biçimler ve tanınmayan karakterler​

Bu örnek Val işlevinin farklı metin kalıplarını nasıl yorumladığını gösterir. Standart bir modül ekleyip aşağıdaki kodu yapıştırın; makro A sütunundaki metinleri okuyup sonucu B sütununa yazar.
VBA 13 satır
Option Explicit

Sub KaliplariDene()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ThisWorkbook.Worksheets("Metin Kalıpları")

    ' A sütunundaki her metin için Val sonucunu B sütununa yazar
    For i = 2 To 8
        ws.Cells(i, 2).Value = Val(ws.Cells(i, 1).Value)
    Next i
End Sub
Val
Formülünü incelemek için bir hücre seçin.
ABC
1MetinVal SonucuAçıklama
2&HFF255Onaltılık sayı öneki
3&O1715Sekizlik sayı öneki
4$1000Para simgesi tanınmaz
51,2341Virgülde okuma durur
61.2.31,2İkinci noktada okuma durur
74 5 6456Boşluklar yok sayılır
8abc0Sayı yoksa 0 döner
Metin KalıplarıExcelDepo v1.0.0
"&HFF" metni onaltılık sayı olarak okunur ve 255 değerini verir; "&O17" sekizlik sayı olarak 15 olur. "$100" metni para simgesiyle başladığı için 0 sonucunu verir. "1,234" metninde okuma virgülde durur ve 1 yazılır. "1.2.3" için 1,2, "4 5 6" için 456 elde edilir. Sayı içermeyen "abc" metni 0 döndürür.

3. Sipariş notlarından tutar hesaplama​

Siparişlerin adetleri "24 adet" gibi serbest notlar içinde yazılmıştır. Standart bir modüle aşağıdaki kodu yapıştırın. Makro adedi Val ile ayıklar, adet okunamıyorsa satırı "Kontrol" olarak işaretler ve geçerli satırların tutarlarını toplar.
VBA 26 satır
Option Explicit

Sub SiparisTutariHesapla()
    Dim ws As Worksheet
    Dim i As Long
    Dim adet As Double

    Set ws = ThisWorkbook.Worksheets("Sipariş Notları")

    For i = 2 To 7
        ' Nottaki baştaki sayıyı adet olarak al
        adet = Val(ws.Cells(i, 2).Value)

        If adet > 0 Then
            ws.Cells(i, 3).Value = adet
            ws.Cells(i, 5).Value = adet * ws.Cells(i, 4).Value
        Else
            ' Not sayıyla başlamıyorsa elle denetlenmesi için işaretle
            ws.Cells(i, 3).Value = "Kontrol"
            ws.Cells(i, 5).Value = "Hesaplanamadı"
        End If
    Next i

    ' Metin olan hücreler toplama katılmaz
    ws.Range("E8").Value = Application.WorksheetFunction.Sum(ws.Range("E2:E7"))
End Sub
Val
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünSipariş NotuAdetBirim FiyatTutar
2Defter24 adet2418,50444,00
3Kalem100 adet1003,25325,00
4DosyaAcil: 15Kontrol6,75Hesaplanamadı
5Klasör8 adet842,00336,00
6Silgi12adet122,5030,00
7Zımba5 adet585,00425,00
8Toplam1.560,00
Sipariş NotlarıExcelDepo v1.0.0
Defter satırında adet 24, tutar 444,00 olarak yazılır. "12adet" gibi boşluksuz yazılmış notlarda da sayı doğru ayıklanır; silgi satırında adet 12 olur. "Acil: 15" notu harfle başladığı için Val 0 döndürür; dosya satırının adet hücresine Kontrol, tutar hücresine Hesaplanamadı yazılır. Genel toplam 1.560,00 hücresinde görünür; metin içeren hücreler toplama katılmaz.

Kullanırken dikkat edin​

  • Virgüllü sayılara dikkat edin: Türkçe bölgesel ayarda sayılar virgülle yazılır, ancak Val yalnızca noktayı ondalık ayracı olarak tanır. "3,5" metni 3,5 değil 3 olarak okunur. Kullanıcıdan gelen verilerde virgül olabiliyorsa metni önce Replace ile düzeltin ya da bölgesel ayara duyarlı CDbl işlevini kullanın.
  • Binlik ayracı ve para simgesi: "1,250" metni 1 olarak okunur, "$100" ve "%18" gibi metinler 0 verir. Para ya da yüzde biçimli metinlerde önce bu simgeleri Replace ile temizleyin, sonra dönüştürün.
  • Sonuç 0 ise ne olduğunu ayırt edin: Val hem gerçek 0 değerinde hem de sayı bulunamadığında 0 döndürür. Ayrım gerekiyorsa önce metnin ilk karakterini ya da IsNumeric sonucunu denetleyin; üçüncü örnekteki gibi 0'ı "Kontrol" olarak işaretleyebilirsiniz.
  • Hata değeri ve Null: Hücre #N/A gibi bir hata değeri içeriyorsa Val bu değeri işleyemez ve çalışma zamanı hatası oluşur. Null değer verilmesi de hata doğurur. Döngüde hücreleri okurken IsError ile denetim yapmak güvenlidir.
  • Sayı hücrelerinde gerekmez: Val metin bekleyen bir işlevdir. Hücre zaten sayı içeriyorsa değeri doğrudan kullanın; sayıyı yeniden metne çevirip Val ile okumak bölgesel ayar yüzünden yanlış sonuç doğurabilir.
  • İlgili konular:
    • CDbl, CLng, CInt: tüm metni sayıya çeviren, bölgesel ayara uyan dönüştürme işlevleri
    • IsNumeric: bir ifadenin sayıya çevrilebilir olup olmadığını denetler
    • Str ve CStr: sayıyı metne çevirir
    • Replace: metindeki virgül ve simgeleri değiştirmek için
    • Left, Mid, Right: metinden belirli bir parçayı ayırmak için
    • DEĞER: çalışma sayfasında metni sayıya çeviren işlev
    • SAYIDEĞERİ: ondalık ve binlik ayracını kendiniz belirterek metni sayıya çeviren işlev
Ö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
11
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst