Genel Bakış
Len (Len function), bir metin ifadesindeki karakter sayısını veren VBA işlevidir. Metin değişkenlerinde karakter sayısını, Integer ya da Double gibi sayısal türlerde ise değişkenin bellekte kapladığı bayt sayısını döndürür. Kod doğrulama, sabit uzunluklu alan hazırlama, metin ayrıştırma ve döngü sınırı belirleme gibi işlerde sık kullanılır.
İlk satırda makro 20 karakter sayar ve ayraçlara bakarak 3 etiket bulur. Üçüncü veri satırındaki metnin sonunda bir boşluk vardır; Len bu boşluğu da saydığı için sonuç 9 çıkar. Boş hücrede karakter sayısı 0, etiket adedi 0 olur; bu yüzden etiket sayımından önce Len(s) = 0 denetimi yapılmıştır.
Birinci numara 000045 olarak tamamlanır ve durum Tamam yazılır. Tek haneli numara 000008 biçimini alır. Tam 6 haneli numara olduğu gibi kalır (123456). Son satırdaki numara 6 haneden uzun olduğu için B sütunu doldurulmaz ve durum sütununda Çok uzun uyarısı görünür. B sütunu önce metin biçimine alındığı için baştaki sıfırlar silinmez.
String değişkeninde sonuç karakter sayısıdır (7). Sayısal türlerde ise bayt boyutu döner: Integer için 2, Long için 4, Double için 8. Variant değişkeninde değer metne çevrilip karakterleri sayıldığı için sonuç 5 olur. Sayının kaç basamaklı olduğunu öğrenmek istiyorsanız değişkeni Variant ya da String olarak tutmanız veya önce CStr ile metne çevirmeniz gerekir.
Söz dizimi
Len işlevi iki biçimde yazılır:
VBA
2 satır
Len(string)
Len(varname)
- string: Karakter sayısı bulunacak herhangi bir metin ifadesi; zorunludur. varname ile birlikte kullanılmaz, ikisinden biri verilir.
- varname: Herhangi bir geçerli değişken adı; zorunludur. Variant türündeki değişken, metin gibi ele alınır ve içeriğinin karakter sayısı döndürülür.
Dönüş değeri ve davranış
Len işlevinin sonucu, verdiğiniz bağımsız değişkenin türüne göre değişir:- Metin (String): Boşluklar, noktalama işaretleri ve satır sonu karakterleri dahil tüm karakterler sayılır. Boş metin için sonuç 0'dır.
- Variant: İçindeki değer metne çevrilir ve karakter sayısı verilir. Örneğin Variant içindeki 12345 sayısı için sonuç 5'tir.
- Sayısal değişkenler: Değişken Integer, Long, Double gibi bildirilmişse karakter sayısı değil, değişkenin kapladığı bayt sayısı döndürülür. Integer için 2, Long için 4, Double için 8'dir.
- Sabit uzunluklu String: Bildirimde belirtilen uzunluk döndürülür; içine daha kısa bir metin atanmış olması sonucu değiştirmez.
- Null: Bağımsız değişken Null içeriyorsa sonuç da Null olur.
- Kullanıcı tanımlı tür: Değişken Type ile tanımlanmış bir türse toplam bayt boyutu döndürülür.
Sık kullanım kalıpları
Len tek başına kullanıldığı kadar diğer metin işlevleriyle birlikte de güçlüdür:- Son karakteri atmak: Left(s, Len(s) - 1) biçiminde yazılır.
- Belirli bir karakterin kaç kez geçtiğini bulmak: Len(s) - Len(Replace(s, ";", "")) ifadesi, metinden o karakter çıkarıldığında kısalan miktarı verir.
- Sıfırla doldurmak: String(6 - Len(s), "0") & s ile metin soldan sıfırlarla 6 haneye tamamlanır.
- Boş metin denetimi: If Len(s) = 0 Then kontrolü, metni boş metinle karşılaştırmaya göre hızlı ve nettir.
1. Karakter ve etiket sayısını bulma
Ürünlerin etiketleri noktalı virgülle ayrılmış olarak A sütunundadır. Makro, her satır için karakter sayısını B sütununa, etiket adedini C sütununa yazar. Kodu standart bir modüle (Ekle > Modül) yapıştırın.
VBA
20 satır
Option Explicit
Sub EtiketSay()
Dim ws As Worksheet
Dim i As Long
Dim s As String
Set ws = ActiveSheet
For i = 2 To 7
s = ws.Cells(i, 1).Value
' Len, boşluklar dahil tüm karakterleri sayar
ws.Cells(i, 2).Value = Len(s)
If Len(s) = 0 Then
ws.Cells(i, 3).Value = 0
Else
' Ayraç çıkarılınca kısalan miktar ayraç sayısını verir
ws.Cells(i, 3).Value = Len(s) - Len(Replace(s, ";", "")) + 1
End If
Next i
End Sub
Len
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Etiketler | Karakter Sayısı | Etiket Adedi |
| 2 | elektronik;ev;mutfak | 20 | 3 |
| 3 | kırtasiye | 9 | 1 |
| 4 | bahçe;ev | 9 | 2 |
| 5 | 0 | 0 | |
| 6 | spor;outdoor;kamp;yürüyüş | 25 | 4 |
| 7 | oyuncak;hediye | 14 | 2 |
Etiket SayımıExcelDepo v1.0.0
2. Sipariş numarasını 6 haneye tamamlama
A sütunundaki sipariş numaraları metin olarak girilmiştir. Makro, numaraları soldan sıfırla 6 haneye tamamlayıp B sütununa yazar; 6 haneden uzun olanları C sütununda uyarır. Kodu standart bir modüle yapıştırın.
VBA
26 satır
Option Explicit
Sub SiparisNoDoldur()
Dim ws As Worksheet
Dim i As Long
Dim sonSatir As Long
Dim s As String
Const HANE As Long = 6
Set ws = ActiveSheet
sonSatir = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' Baştaki sıfırlar kaybolmasın diye B sütununu metin biçimine alın
ws.Range("B2:B" & sonSatir).NumberFormat = "@"
For i = 2 To sonSatir
s = Trim(ws.Cells(i, 1).Value)
If Len(s) > HANE Then
ws.Cells(i, 3).Value = "Çok uzun"
Else
' Eksik hane kadar sıfır üretip numaranın soluna ekleyin
ws.Cells(i, 2).Value = String(HANE - Len(s), "0") & s
ws.Cells(i, 3).Value = "Tamam"
End If
Next i
End Sub
Len
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Sipariş No | Doldurulmuş No | Durum |
| 2 | 45 | 000045 | Tamam |
| 3 | 1207 | 001207 | Tamam |
| 4 | 8 | 000008 | Tamam |
| 5 | 93015 | 093015 | Tamam |
| 6 | 123456 | 123456 | Tamam |
| 7 | 1234567 | Çok uzun |
Sipariş NumaralarıExcelDepo v1.0.0
3. Değişken türlerine göre Len sonucu
Aynı işlevin metin, sayısal ve Variant değişkenlerde farklı sonuç verdiğini göstermek için makro, her türden bir değişken tanımlar ve Len sonucunu C sütununa yazar. Kodu standart bir modüle yapıştırın.
VBA
27 satır
Option Explicit
Sub TurBoyutlari()
Dim ws As Worksheet
Dim sMetin As String
Dim iSayi As Integer
Dim lSayi As Long
Dim dSayi As Double
Dim vSayi As Variant
sMetin = "Merhaba"
iSayi = 100
lSayi = 100000
dSayi = 3.14
vSayi = 12345
Set ws = ActiveSheet
' String: karakter sayısı
ws.Range("C2").Value = Len(sMetin)
' Integer, Long, Double: bellekte kapladığı bayt sayısı
ws.Range("C3").Value = Len(iSayi)
ws.Range("C4").Value = Len(lSayi)
ws.Range("C5").Value = Len(dSayi)
' Variant: içeriğin metin olarak karakter sayısı
ws.Range("C6").Value = Len(vSayi)
End Sub
Len
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Değişken Türü | Örnek Değer | Len Sonucu |
| 2 | String | Merhaba | 7 |
| 3 | Integer | 100 | 2 |
| 4 | Long | 100000 | 4 |
| 5 | Double | 3,14 | 8 |
| 6 | Variant | 12345 | 5 |
Tür BoyutlarıExcelDepo v1.0.0
Kullanırken dikkat edin
- Sayısal değişkenlerde karakter sayısı beklemeyin: Integer, Long ya da Double olarak bildirilmiş bir değişkende Len bayt sayısı verir. Basamak sayısı gerekiyorsa Len(CStr(sayi)) biçiminde metne çevirin.
- Null değeriyle dikkatli olun: Veritabanından ya da bir Variant değişkenden gelen değer Null ise Len sonucu da Null olur. Bu sonucu Long türünde bir değişkene atarsanız "Null kullanımı geçersiz" hatası alırsınız. Güvenli yol, Len(deger & "") yazmaktır.
- Boşlukları unutmayın: Baştaki ve sondaki boşluklar da sayılır. Kullanıcı girdilerini denetlerken Len(Trim(s)) kullanmak yanlış uyarıları önler. Web'den kopyalanan metinlerde bölünmez boşluk (Chr(160)) bulunabilir; Trim bunu temizlemez, Replace ile ayrıca silmeniz gerekir.
- Hücre değerini açıkça yazın: Hücredeki sayı biçimli görünür ancak asıl değeri farklıdır. Örneğin 0,5 değeri yüzde biçiminde 50% görünür, ancak .Value ile okunan metin 0,5'tir. Ekrandaki görünümün uzunluğu gerekiyorsa .Text özelliğini kullanın; sonuç hücre genişliğine ve biçime bağlıdır.
- Emoji ve özel karakterler: VBA metinleri UTF-16 olarak tutar. Bazı emoji ve nadir karakterler iki kod birimi kapladığı için Len bunları 2 karakter olarak sayabilir.
- İlgili konular:
- LenB: Metnin kapladığı bayt sayısını verir.
- Left, Right, Mid: Metnin belirli bölümünü alan VBA işlevleri; konum hesabında sıkça Len ile birlikte kullanılır.
- Trim, LTrim, RTrim: Baştaki ve sondaki boşlukları siler.
- Replace ve InStr: Metin içinde değiştirme ve arama yapar.
- String: Bir karakteri belirli sayıda tekrarlar; doldurma işlemlerinde kullanılır.
- UZUNLUK: Çalışma sayfasındaki karşılığı olan işlev; ilgili işlevler SOLDAN, SAĞDAN, PARÇAAL ve KIRP işlevleridir.