Genel Bakış
Chr (Chr function), verilen karakter kodunu o koda karşılık gelen tek karakterlik metne çeviren bir VBA işlevidir. Satır sonu, sekme ve çift tırnak gibi doğrudan yazılamayan karakterleri metne eklemek ya da kodlardan harf üretmek için kullanılır. Karşıt işlevi, karakterin kodunu veren Asc işlevidir.
Türkçe harflerin Unicode kodları şunlardır:
Çalışma sayfasındaki karşılığı KARAKTER işlevidir; karşıt işlevi KOD'dur. VBA tarafında karşıt işlev Asc'tir.
Makro çalışınca B2 hücresine A, B3 hücresine B, B5 hücresine a yazılır. Büyük harfler 65'ten, küçük harfler 97'den başlar; aradaki fark 32'dir. 33, 63, 35, 38 ve 42 gibi kodlar ise noktalama ve simge karakterlerini verir.
C2 hücresinde "Masa Lambası"
485 TL metni görünür: ürün adı çift tırnak içindedir ve fiyat alt satırdadır. Metin birleştirilirken sayı biçimsiz eklendiği için binlik ayırıcı görünmez. WrapText özelliği kapalı olsaydı Chr(10) karakteri hücrede alt satır olarak değil, tek satırda görünürdü.
C2 hücresine FYDFM, C3 hücresine TCRQT, C4 hücresine VDWLV yazılır. Mod 26 işlemi, kaydırma Z harfini aştığında alfabenin başına dönülmesini sağlar. Bu yöntem yalnızca kod mantığını göstermek içindir; gerçek bir şifreleme yöntemi değildir.
Söz dizimi
Chr işlevinin söz dizimi aşağıdaki gibidir:
VBA
2 satır
Chr(charcode)
Chr$(charcode)
- charcode: Zorunlu. Dönüştürülecek karakter kodunu belirten, Long türünde bir sayıdır. Tek baytlı sistemlerde 0 ile 255 arasında olmalıdır; çift baytlı (DBCS) sistemlerde -32768 ile 65535 arasındaki değerler kabul edilir. Varsayılan değeri yoktur.
- Chr$: İşlevin dolar işaretli biçimidir. Chr sonucu Variant olarak, Chr$ ise doğrudan String olarak döndürür; iki biçimin ürettiği karakter aynıdır.
Kod aralıkları ve sık kullanılan kodlar
Kodların anlamı aralığa göre değişir:- 0 - 31: Yazdırılmayan denetim karakterleridir. Örneğin 9 sekme, 10 satır başı olmadan alt satıra geçiş (Line Feed), 13 satır başına dönüş (Carriage Return) karakteridir.
- 32 - 126: Standart ASCII yazdırılabilir karakterlerdir. 32 boşluk, 34 çift tırnak, 65 büyük A, 97 küçük a karakteridir.
- 127 - 255: Bilgisayarın etkin ANSI kod sayfasına bağlıdır. Aynı kod farklı bilgisayarlarda farklı karakter verebilir.
- Aralık dışı değer: Çalışma zamanı hatası 5 (Invalid procedure call or argument) oluşur.
- vbTab: Chr(9), sekme karakteri.
- vbLf: Chr(10), alt satıra geçiş.
- vbCr: Chr(13), satır başına dönüş.
- vbCrLf: Chr(13) ve Chr(10) çifti. Çoğu zaman vbNewLine ile aynı işi görür.
- vbNullChar: Chr(0), boş karakter.
Chr, ChrW ve Türkçe karakterler
Chr işlevi 128 ile 255 arasındaki kodlar için bilgisayarın ANSI kod sayfasını kullanır. Türkçe Windows'ta bu kod sayfası 1254'tür ve örneğin 254 kodu ş harfini verir; ancak aynı kod başka dil ayarlarında başka bir karakter üretir. Bu yüzden Türkçe karakterleri kodla üretirken ChrW işlevini kullanmak daha güvenlidir. ChrW Unicode kodunu esas alır ve her bilgisayarda aynı sonucu verir.Türkçe harflerin Unicode kodları şunlardır:
- Ş: 350, ş: 351
- İ: 304, ı: 305
- Ğ: 286, ğ: 287
- Euro işareti: 8364
Metin = "Sa" & ChrW(287) & "l" & ChrW(305) & "k"
1. Kodları karakterlere çevirme
A sütununda karakter kodları var. Makro, her kodu Chr ile karakter yapıp B sütununa yazar. Kodu standart modüle (Ekle > Modül) yapıştırın ve çalıştırın.
VBA
13 satır
Option Explicit
Sub KodlariKaraktereCevir()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
' 2. satırdan 12. satıra kadar her kodu karaktere çevir
For i = 2 To 12
ws.Cells(i, 2).Value = Chr(CLng(ws.Cells(i, 1).Value))
Next i
End Sub
Chr
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Kod | Karakter |
| 2 | 65 | A |
| 3 | 66 | B |
| 4 | 67 | C |
| 5 | 97 | a |
| 6 | 98 | b |
| 7 | 99 | c |
| 8 | 33 | ! |
| 9 | 63 | ? |
| 10 | 35 | # |
| 11 | 38 | & |
| 12 | 42 | * |
Kod TablosuExcelDepo v1.0.0
2. Çift tırnak ve hücre içi satır sonu
A sütunundaki ürün adı çift tırnak içine alınacak, altına fiyat yazılacak. Çift tırnak için Chr(34), hücre içinde alt satıra geçmek için Chr(10) kullanılır. Kodu standart modüle yapıştırıp çalıştırın.
VBA
18 satır
Option Explicit
Sub EtiketOlustur()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
For i = 2 To 7
' Chr(34) = çift tırnak, Chr(10) = hücre içinde alt satır
ws.Cells(i, 3).Value = Chr(34) & ws.Cells(i, 1).Value & Chr(34) _
& Chr(10) & ws.Cells(i, 2).Value & " TL"
Next i
' Alt satırın görünmesi için metni kaydır
ws.Range("C2:C7").WrapText = True
ws.Rows("2:7").AutoFit
End Sub
Chr
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ürün | Fiyat | Etiket |
| 2 | Masa Lambası | 485 | "Masa Lambası" 485 TL |
| 3 | Defter A4 | 65 | "Defter A4" 65 TL |
| 4 | Dolma Kalem | 1.250 | "Dolma Kalem" 1250 TL |
| 5 | Çalışma Sandalyesi | 3.890 | "Çalışma Sandalyesi" 3890 TL |
| 6 | Klasör | 95 | "Klasör" 95 TL |
| 7 | Mouse Pad | 120 | "Mouse Pad" 120 TL |
Etiket MetniExcelDepo v1.0.0
485 TL metni görünür: ürün adı çift tırnak içindedir ve fiyat alt satırdadır. Metin birleştirilirken sayı biçimsiz eklendiği için binlik ayırıcı görünmez. WrapText özelliği kapalı olsaydı Chr(10) karakteri hücrede alt satır olarak değil, tek satırda görünürdü.
3. Asc ve Chr ile harf kaydırma
Her kelimenin harfleri, B sütunundaki sayı kadar alfabede ileri kaydırılacak. Asc harfin kodunu verir, Chr yeni koddan harfi üretir. Kelimeler Türkçe karakter içermeyen büyük harflerle yazılmıştır. Kodu standart modüle yapıştırın.
VBA
27 satır
Option Explicit
Sub KelimeKaydir()
Dim ws As Worksheet
Dim i As Long, k As Long
Dim kod As Long, kayma As Long
Dim kelime As String, sonuc As String
Set ws = ActiveSheet
For i = 2 To 9
kelime = ws.Cells(i, 1).Value
kayma = CLng(ws.Cells(i, 2).Value)
sonuc = ""
For k = 1 To Len(kelime)
kod = Asc(Mid(kelime, k, 1))
' Yalnızca A-Z (65-90) arasındaki harfleri kaydır
If kod >= 65 And kod <= 90 Then
kod = 65 + ((kod - 65 + kayma) Mod 26)
End If
sonuc = sonuc & Chr(kod)
Next k
ws.Cells(i, 3).Value = sonuc
Next i
End Sub
Chr
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Kelime | Kaydırma | Sonuç |
| 2 | EXCEL | 1 | FYDFM |
| 3 | RAPOR | 2 | TCRQT |
| 4 | SATIS | 3 | VDWLV |
| 5 | BUTCE | 4 | FYXGI |
| 6 | FATURA | 5 | KFYZWF |
| 7 | DEPO | 3 | GHSR |
| 8 | STOK | 2 | UVQM |
| 9 | MUSTERI | 1 | NVTUFSJ |
Harf KaydırmaExcelDepo v1.0.0
Kullanırken dikkat edin
- Aralık dışı kod hata verir: Chr işlevine 0 ile 255 dışında bir değer (örneğin 350 ya da 8364) verirseniz çalışma zamanı hatası 5 oluşur. 255'ten büyük Unicode kodları için ChrW işlevini kullanın.
- Türkçe karakterlerde ChrW kullanın: 128-255 arasındaki kodlar bilgisayarın kod sayfasına bağlıdır; Türkçe Windows'ta çalışan kod başka bir bilgisayarda farklı karakter üretebilir. Ş, İ, Ğ gibi harfleri kodla yazarken ChrW(350), ChrW(304), ChrW(286) gibi Unicode kodlarını tercih edin.
- Hücre içinde satır sonu: Excel hücresinde Alt+Enter ile eklenen satır sonu Chr(10) karakteridir. Hücreye vbCrLf yazmak çoğu zaman da çalışır, ancak hücre içinde Chr(10) yeterlidir. Alt satırın görünmesi için hücrede Giriş > Hizalama > Metni Kaydır (Home > Alignment > Wrap Text) açık olmalı, VBA'da ise WrapText özelliği True yapılmalıdır.
- Metin içinde çift tırnak: VBA'da metin içine çift tırnak koymak için tırnağı iki kez yazabilir ("") ya da Chr(34) kullanabilirsiniz. Uzun formül metinlerinde Chr(34) kullanmak, tırnak sayısını karıştırma hatasını azaltır.
- Yazdırılmayan karakterler: 0-31 arasındaki kodlar ekranda görünmez. Bir metindeki gizli karakterleri bulmak için karakterleri tek tek Asc ile kontrol edebilir, temizlemek için Replace işlevinde Chr(kod) ile arayabilirsiniz.
- İlgili konular:
- ChrW: Unicode koduna karşılık gelen karakteri verir.
- Asc ve AscW: Karakterin ANSI ya da Unicode kodunu verir.
- vbCrLf, vbTab, vbLf, vbNullChar: Sık kullanılan denetim karakterlerinin VBA sabitleri.
- String: Aynı karakteri belirli sayıda yineler.
- KARAKTER: Çalışma sayfasında kodu karaktere çeviren işlev.
- KOD: Çalışma sayfasında karakterin kodunu veren işlev.