Genel Bakış
Format (Format işlevi), bir sayıyı, tarihi ya da metni verdiğiniz biçim desenine göre biçimlendirip metin olarak döndüren VBA işlevidir. Binlik ayırıcı, ondalık basamak, yüzde, baştaki sıfırlar, gün ve ay adları gibi görünümleri koddan üretmek için kullanılır. Sonuç her zaman metindir; hesaplamada kullanılacak değeri değiştirmez, yalnızca gösterimini oluşturur.
Makro çalışınca D sütununda tutarlar "#,##0.00" desenine göre metne dönüşür; ilk ürün için sonuç 24.999,90, ikinci ürün için 850,00 olur. E sütunundaki "0.0%" deseni oranı 100 ile çarpıp yüzde işareti ekler; ilk satırda 20,0%, son satırda 8,0% görünür. Ayırıcı karakterlerin nokta ya da virgül olması bilgisayarınızın bölge ayarına bağlıdır.
İlk personel için "dddd" deseni gün adını (Pazartesi), "mmmm yyyy" deseni ay adı ve yılı (Mart 2021), "dd.mm.yyyy" deseni ise iki haneli gün ve ayla tarihi (15.03.2021) üretir. Son satırda aynı desenler Salı, Mayıs 2023 ve 30.05.2023 sonuçlarını verir. Ad dili Windows bölge ayarına göre belirlenir.
Ankara satırında sipariş kodu SIP-00007, fark gösterimi +120 olur; sıfır adet için üçüncü bölüm devreye girer ve Bursa satırında Sıfır yazılır. Negatif farklarda ikinci bölüm kullanılır; İzmir satırı -35 sonucunu verir. Desendeki "SIP-" ifadesi tırnak içinde olduğu için olduğu gibi yazılır, 00000 ise numarayı beş haneye tamamlar.
Söz dizimi
İşlevin genel yazımı şöyledir:Format(Expression, [Format], [FirstDayOfWeek], [FirstWeekOfYear])
- Expression: Biçimlendirilecek sayı, tarih ya da metin. Zorunludur.
- Format: Biçim deseni; hazır bir ad (ör. "Percent") ya da özel desen (ör. "#,##0.00"). İsteğe bağlıdır; atlanırsa değer biçimsiz biçimde metne çevrilir.
- FirstDayOfWeek: Haftanın ilk gününü belirleyen sabit. İsteğe bağlıdır; varsayılanı vbUseSystemDayOfWeek (0), yani sistem ayarıdır. Diğer değerler: vbSunday (1), vbMonday (2) ... vbSaturday (7).
- FirstWeekOfYear: Yılın ilk haftasını belirleyen sabit. İsteğe bağlıdır; varsayılanı vbUseSystem (0). Diğerleri: vbFirstJan1 (1), vbFirstFourDays (2), vbFirstFullWeek (3). Yalnızca hafta numarası içeren (ww) desenlerde etkili olur.
Hazır (adlandırılmış) biçimler
Format bağımsız değişkenine aşağıdaki adları yazabilirsiniz. Sonuçlar Windows bölge ayarlarına göre üretilir:- General Number: Sayıyı binlik ayırıcısız gösterir.
- Currency: Para birimi simgesi ve binlik ayırıcıyla gösterir.
- Fixed: En az bir tam basamak ve iki ondalık basamak gösterir.
- Standard: Binlik ayırıcılı ve iki ondalık basamaklı gösterir.
- Percent: Değeri 100 ile çarpar ve yüzde işareti ekler.
- Scientific: Bilimsel (üstel) gösterim kullanır.
- Yes/No, True/False, On/Off: Sıfır dışındaki değer için ilk, sıfır için ikinci sözcüğü yazar.
- General Date, Long Date, Medium Date, Short Date: Tarihi sistemin genel, uzun, orta ve kısa tarih düzenine göre yazar.
- Long Time, Medium Time, Short Time: Saati uzun, 12 saatlik ve 24 saatlik kısa düzene göre yazar.
Özel sayı ve metin simgeleri
Özel desen yazarken ondalık ayırıcı için nokta, binlik ayırıcı için virgül kullanılır; bu, Türkçe Windows'ta bile böyledir. Sonuç ise bölge ayarına göre (ör. 1.234,50) görünür.- 0: Rakam yer tutucusudur; karşılığında rakam yoksa 0 yazar. Format(5, "000") sonucu 005 olur.
- #: Rakam yer tutucusudur; karşılığında rakam yoksa hiçbir şey yazmaz.
- . (nokta): Ondalık ayırıcının yerini belirler.
- , (virgül): Binlik ayırıcı ekler.
- %: Değeri 100 ile çarpar ve yüzde işareti ekler.
- E+ / E-: Bilimsel gösterim üretir.
- "metin" ya da \ : Tırnak içindeki metni ya da ters bölüden sonraki karakteri olduğu gibi yazar. VBA dizesi içinde tırnak çift yazılır.
- ; (noktalı virgül): Bölümleri ayırır: pozitif;negatif;sıfır;Null. Örneğin ikinci bölüm negatif sayıların görünümünü belirler.
- @ ve &: Metin için karakter yer tutucusudur; @ karakter yoksa boşluk, & ise hiçbir şey yazmaz.
- < ve >: Metni küçük ya da büyük harfe çevirir.
Tarih ve saat simgeleri
Tarih ve saat desenlerinde şu simgeler kullanılır:- d, dd: Ayın günü (tek ya da iki haneli).
- ddd, dddd: Gün adı (kısa ya da tam).
- m, mm: Ay numarası (tek ya da iki haneli).
- mmm, mmmm: Ay adı (kısa ya da tam).
- yy, yyyy: İki ya da dört haneli yıl.
- q: Yılın çeyreği; ww: yılın haftası.
- h, hh: Saat.
- n, nn: Dakika. VBA'da dakika için n kullanmak, m simgesiyle ay karışıklığını önler.
- s, ss: Saniye.
- AM/PM: 12 saatlik düzende öğleden önce ya da sonra göstergesi.
1. Tutar ve oranı biçimlendirme
Sayfada ürün tutarları ve KDV oranları var. Makro, tutarı binlik ayırıcılı ve iki ondalıklı, oranı ise bir ondalıklı yüzde olarak D ve E sütunlarına metin biçiminde yazar. Kodu Geliştirici > Visual Basic (Developer > Visual Basic) penceresinde Ekle > Modül (Insert > Module) ile açtığınız standart modüle yapıştırın.
VBA
17 satır
Option Explicit
Sub SayiBicimle()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
' Sonuç sütunlarını metin yapıyoruz; Excel yazılan metni yeniden sayıya çevirmesin
ws.Range("D2:E7").NumberFormat = "@"
For i = 2 To 7
' Binlik ayırıcılı, iki ondalıklı tutar
ws.Cells(i, 4).Value = Format(ws.Cells(i, 2).Value, "#,##0.00")
' Bir ondalıklı yüzde
ws.Cells(i, 5).Value = Format(ws.Cells(i, 3).Value, "0.0%")
Next i
End Sub
Format
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ürün | Tutar | Oran | Tutar (Metin) | Oran (Metin) |
| 2 | Laptop | 24999,9 | 20% | 24.999,90 | 20,0% |
| 3 | Klavye | 850 | 20% | 850,00 | 20,0% |
| 4 | Monitör | 7450,5 | 18% | 7.450,50 | 18,0% |
| 5 | Yazıcı | 4299 | 18% | 4.299,00 | 18,0% |
| 6 | Kitap | 125,75 | 1% | 125,75 | 1,0% |
| 7 | Ekmek | 12,5 | 8% | 12,50 | 8,0% |
Tutar BiçimiExcelDepo v1.0.0
2. Tarihten gün ve ay adı üretme
Sayfada personelin işe giriş tarihleri yer alır. Makro her tarihten gün adını, "ay yıl" biçimini ve noktalı kısa tarihi üretip C, D ve E sütunlarına yazar. Kodu standart bir modüle yapıştırın.
VBA
19 satır
Option Explicit
Sub TarihBicimle()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
' Sonuçlar metin olarak kalsın
ws.Range("C2:E6").NumberFormat = "@"
For i = 2 To 6
' Gün adı (Pazartesi gibi, bölge ayarına göre)
ws.Cells(i, 3).Value = Format(ws.Cells(i, 2).Value, "dddd")
' Ay adı ve dört haneli yıl
ws.Cells(i, 4).Value = Format(ws.Cells(i, 2).Value, "mmmm yyyy")
' Gün.ay.yıl biçimi
ws.Cells(i, 5).Value = Format(ws.Cells(i, 2).Value, "dd.mm.yyyy")
Next i
End Sub
Format
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Personel | İşe Giriş | Gün | Ay ve Yıl | Kısa Tarih |
| 2 | Ayşe Yılmaz | 15.03.2021 | Pazartesi | Mart 2021 | 15.03.2021 |
| 3 | Mehmet Demir | 04.11.2019 | Pazartesi | Kasım 2019 | 04.11.2019 |
| 4 | Zeynep Kaya | 21.07.2022 | Perşembe | Temmuz 2022 | 21.07.2022 |
| 5 | Can Öztürk | 09.01.2020 | Perşembe | Ocak 2020 | 09.01.2020 |
| 6 | Elif Şahin | 30.05.2023 | Salı | Mayıs 2023 | 30.05.2023 |
Personel TarihleriExcelDepo v1.0.0
3. Özel desenle kod ve işaretli fark
Sayfada şube bazında sipariş numaraları ve stok farkları var. Makro, numarayı baştaki sıfırlarla "SIP-" önekli bir koda çevirir; farkı da pozitif, negatif ve sıfır için ayrı bölümleri olan bir desenle yazar. Kodu standart bir modüle yapıştırın.
VBA
16 satır
Option Explicit
Sub OzelDesen()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
ws.Range("D2:E8").NumberFormat = "@"
For i = 2 To 8
' Sabit önek ve beş haneli numara (baştaki sıfırlarla)
ws.Cells(i, 4).Value = Format(ws.Cells(i, 2).Value, """SIP-""00000")
' Üç bölüm: pozitif; negatif; sıfır
ws.Cells(i, 5).Value = Format(ws.Cells(i, 3).Value, "+#,##0;-#,##0;""Sıfır""")
Next i
End Sub
Format
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Şube | Sipariş No | Stok Farkı | Sipariş Kodu | Fark Gösterimi |
| 2 | Ankara | 7 | 120 | SIP-00007 | +120 |
| 3 | İzmir | 125 | -35 | SIP-00125 | -35 |
| 4 | Bursa | 3048 | 0 | SIP-03048 | Sıfır |
| 5 | Adana | 42 | 1500 | SIP-00042 | +1.500 |
| 6 | Konya | 981 | -1200 | SIP-00981 | -1.200 |
| 7 | Antalya | 15 | 8 | SIP-00015 | +8 |
| 8 | Kayseri | 20077 | 0 | SIP-20077 | Sıfır |
Sipariş KodlarıExcelDepo v1.0.0
Kullanırken dikkat edin
- Sonuç metindir: Format her zaman metin döndürür. Sonucu toplama ya da karşılaştırma gibi işlemlerde kullanacaksanız özgün sayıyı koruyun. Biçimli metni hücreye yazarken Excel onu yeniden sayıya ya da tarihe çevirebilir; bunu önlemek için hücrenin NumberFormat özelliğini önceden "@" yapın.
- Yalnızca görünüm istiyorsanız: Hücredeki değeri değiştirmeden sadece görünümü değiştirmek istiyorsanız Range.NumberFormat özelliğini kullanın. Böylece hücre sayı olarak kalır ve formüllerde sorunsuz çalışır. Format ise etiket, kod, rapor metni ya da ileti oluştururken uygundur.
- Desen ve bölge ayarı: Desen içinde ondalık ayırıcı için nokta, binlik ayırıcı için virgül yazılır; sonuçtaki gerçek karakterleri Windows bölge ayarı belirler. Aynı kod, farklı bölge ayarlı bilgisayarlarda farklı ayırıcı ve ay adı üretebilir. Çıktının her yerde aynı olması gerekiyorsa bu farkı hesaba katın.
- Dakika için n kullanın: Tarih desenlerinde m hem ay hem dakika anlamına gelebilir. Saat desenlerinde dakikayı kesin olarak belirtmek için hh:nn gibi n simgesini kullanın.
- Yuvarlama davranışı: Biçim deseninde ondalık basamak sayısı azaldığında değer yuvarlanarak gösterilir. Round işlevi bankacı yuvarlaması kullanırken Format genellikle yarım değeri yukarı yuvarlar; iki işlevin sonuçları yarım değerlerde farklı çıkabilir.
- Null değeri: Expression Null ise Format Null döndürür. Bu sonucu String türünde bir değişkene atarsanız çalışma zamanı hatası oluşur; değişkeni Variant tanımlayın ya da önce Null denetimi yapın.
- İlgili konular:
- Range.NumberFormat ve NumberFormatLocal: Hücrenin sayı biçimini ayarlar.
- FormatNumber, FormatCurrency, FormatPercent, FormatDateTime: Belirli türler için hazır biçimlendirme işlevleri.
- CStr ve Str: Değeri biçimsiz olarak metne çevirir.
- Round: Sayıyı yuvarlar.
- METNEÇEVİR: Çalışma sayfasında aynı işi yapan işlev (Text); VBA'da Application.WorksheetFunction.Text ile çağrılabilir.
- Hücreleri Biçimlendir: Sayı sekmesindeki özel biçim kodlarını gösteren iletişim kutusu (Format Cells).