Genel Bakış
FormulaLocal (Range.FormulaLocal), bir hücrenin formülünü Excel'in kullanıcı arayüzündeki dille, yani yerel işlev adları ve yerel ayırıcılarla okuyan ya da yazan Range özelliğidir. Türkçe Excel'de formül çubuğunda gördüğünüz metni (TOPLA, EĞER, noktalı virgül ayırıcı, ondalık virgül) olduğu gibi VBA'ya taşır. Aynı işi İngilizce adlarla yapan Formula özelliğinden farkı, sonucun makroyu çalıştıran kişinin Excel diline bağlı olmasıdır.
Başkalarına dağıtacağınız ya da farklı dilde Excel'lerde çalışacak makrolarda Formula kullanın. FormulaLocal, formülü kullanıcıya kendi dilinde göstermek, mevcut bir formülü yerel biçimiyle okumak ya da formül metnini kullanıcıdan alıp hücreye yazmak gibi durumlarda anlamlıdır. Ayırıcıları ve işlev adlarını elle yazmak yerine önce Formula ile yazıp sonra FormulaLocal ile okumak güvenli bir yoldur.
E sütunu formülü Excel'in arayüz diliyle, F sütunu ise her zaman İngilizce adlarla gösterir. Toplam satırında F6 hücresi =SUM(D2:D5) metnini taşır. E6 hücresi =SUM(D2:D5) metnini gösterir; Türkçe Excel'de burada TOPLA işlevi ve noktalı virgül ayırıcı görürsünüz. İngilizce Excel'de iki sütun aynı olur.
Tek bir FormulaLocal atamasıyla E2:E7 aralığının tamamı dolar. Göreli başvurular her satıra uyarlandığı için E2 hücresi Hedefte, E3 hücresi Hedef altı ve E6 hücresi Hedefte sonucunu verir. Aynı kodu Türkçe ya da İngilizce Excel'de çalıştırabilirsiniz, çünkü yerel metin Excel'in kendi çevirisinden alınmıştır.
D2 hücresi formülün yerel metnini, yani =ROUND(B2*1,2;2) değerini gösterir. E2 hücresindeki ; karakteri, bu bilgisayarda bağımsız değişkenleri ayıran karakterdir. Türkçe bölgesel ayarlarda işlev adı YUVARLA olur, ayırıcı noktalı virgüldür ve 1.2 sabiti 1,2 biçiminde görünür. Formülü kullanıcıya yerel biçimiyle göstermeniz gerektiğinde bu yaklaşım işe yarar.
Söz dizimi
Özellik hem okunabilir hem yazılabilir. Okurken formülü metin olarak verir, yazarken verdiğiniz metni formül olarak hücreye işler.
VBA
5 satır
' Okuma
Değişken = ifade.FormulaLocal
' Yazma
ifade.FormulaLocal = Değer
- ifade: Bir Range nesnesini veren ifade; zorunludur. Örneğin Range("C2") ya da ActiveCell.
- Değer: Yazma sırasında kullanılan Variant türünde değer; zorunludur. Başında eşittir işareti olan bir metin yerel dilde yazılmış formül sayılır. Eşittir işaretiyle başlamayan metin, sayı ya da tarih normal bir sabit değer olarak girilir.
Dönüş değeri ve davranışı
- Okurken: Hücrede formül varsa başında eşittir işareti olan metin döner. Formül yoksa hücrenin değeri döner, boş hücrede boş metin elde edilir.
- Çok hücreli aralık: Aralığın FormulaLocal değerini okumak tek bir metin değil, hücre sayısı kadar öğesi olan bir dizi verir. Bu yüzden formülü okurken genellikle tek hücre kullanın.
- Çok hücreli aralığa yazma: Tek bir metin atarsanız formül, aralığın sol üst hücresine girilmiş gibi kabul edilir ve göreli başvurular diğer hücrelere uyarlanır. Yani aralığı doldurmak için döngü gerekmez.
- Hatalı metin: İşlev adı ya da ayırıcı kullanıcının diline uymuyorsa 1004 numaralı çalışma zamanı hatası oluşur. İngilizce adlarla yazılmış bir formülü Türkçe Excel'de FormulaLocal ile atamaya çalışmak tipik örnektir.
- Dinamik dizi: Microsoft 365'teki dinamik dizi davranışı için Formula2Local özelliği vardır. FormulaLocal eski, örtük kesişim davranışıyla çalışır.
Formula ile farkı
Formula her zaman İngilizce işlev adlarını, virgül ayırıcıyı ve ondalık noktayı kullanır. Bu nedenle hangi dilde Excel kullanılırsa kullanılsın aynı çalışır. FormulaLocal ise bölgesel ayarlara ve arayüz diline göre değişir. Aynı hücre için Türkçe ve İngilizce biçimler şöyle görünür:Başkalarına dağıtacağınız ya da farklı dilde Excel'lerde çalışacak makrolarda Formula kullanın. FormulaLocal, formülü kullanıcıya kendi dilinde göstermek, mevcut bir formülü yerel biçimiyle okumak ya da formül metnini kullanıcıdan alıp hücreye yazmak gibi durumlarda anlamlıdır. Ayırıcıları ve işlev adlarını elle yazmak yerine önce Formula ile yazıp sonra FormulaLocal ile okumak güvenli bir yoldur.
1. Formülün yerel ve İngilizce metnini yan yana listeleme
Tutar sütununda çarpma formülleri, son satırda toplam formülü var. Kodu standart bir modüle yapıştırın. Makro her formülün FormulaLocal ve Formula metnini E ve F sütunlarına metin olarak yazar. Başa konan kesme işareti, metnin yeniden formül olarak yorumlanmasını engeller.
VBA
16 satır
Option Explicit
Sub FormulleriListele()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
' 2. satırdan 6. satıra kadar sonlu döngü
For i = 2 To 6
' Yerel dildeki formül metni (kesme işareti metin olarak saklar)
ws.Cells(i, 5).Value = "'" & ws.Cells(i, 4).FormulaLocal
' İngilizce formül metni
ws.Cells(i, 6).Value = "'" & ws.Cells(i, 4).Formula
Next i
End Sub
FormulaLocal
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar | FormulaLocal | Formula |
| 2 | Kalem | 120 | 8,50 | 1.020,00 | =B2*C2 | =B2*C2 |
| 3 | Defter | 80 | 24,00 | 1.920,00 | =B3*C3 | =B3*C3 |
| 4 | Dosya | 45 | 12,75 | 573,75 | =B4*C4 | =B4*C4 |
| 5 | Zımba | 30 | 36,90 | 1.107,00 | =B5*C5 | =B5*C5 |
| 6 | Toplam | 4.620,75 | =SUM(D2:D5) | =SUM(D2:D5) |
Satış ToplamExcelDepo v1.0.0
2. Yerel formülü aralığa tek atamayla yazma
Temsilcilerin hedef ve gerçekleşen satış rakamları ile oran sütunu var. Durum sütunu boş. Kodu standart bir modüle yapıştırın. Makro önce E2 hücresine formülü Formula ile yazar, FormulaLocal ile yerel metnini okur, sonra bu metni E2:E7 aralığına tek atamayla yazar. Böylece işlev adı ve ayırıcıyı elle yazmak zorunda kalmazsınız, kod her dilde çalışır.
VBA
18 satır
Option Explicit
Sub DurumFormuluYaz()
Dim ws As Worksheet
Dim yerel As String
Set ws = ActiveSheet
' Formülü önce dilden bağımsız (İngilizce) yaz
ws.Range("E2").Formula = "=IF(D2>=1,""Hedefte"",""Hedef altı"")"
' Aynı formülün yerel dildeki metnini oku
yerel = ws.Range("E2").FormulaLocal
' Yerel metni tüm aralığa tek atamayla yaz;
' göreli başvurular (D2, D3, ...) otomatik uyarlanır
ws.Range("E2:E7").FormulaLocal = yerel
End Sub
FormulaLocal
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Temsilci | Hedef | Gerçekleşen | Oran | Durum |
| 2 | Ayşe Kaya | 50.000 | 56.000 | 112% | Hedefte |
| 3 | Mehmet Demir | 45.000 | 41.200 | 92% | Hedef altı |
| 4 | Zeynep Arslan | 60.000 | 63.500 | 106% | Hedefte |
| 5 | Can Yıldız | 38.000 | 35.400 | 93% | Hedef altı |
| 6 | Elif Şahin | 52.000 | 52.000 | 100% | Hedefte |
| 7 | Burak Çelik | 47.000 | 49.800 | 106% | Hedefte |
Hedef TakipExcelDepo v1.0.0
3. Yerel formül ve liste ayırıcısını sayfaya yazma
Net tutarlardan KDV dahil tutarı bulan bir formül sütunu var. Kodu standart bir modüle yapıştırın. Makro, C sütunundaki her formülün FormulaLocal metnini D sütununa, Excel'in kullandığı liste ayırıcısını (Application.International(xlListSeparator)) E sütununa yazar. Böylece yerel biçimde ondalık ayırıcı ile bağımsız değişken ayırıcısının nasıl değiştiğini görürsünüz.
VBA
15 satır
Option Explicit
Sub YerelBicimBilgisi()
Dim hucre As Range
Dim ws As Worksheet
Set ws = ActiveSheet
For Each hucre In ws.Range("C2:C5")
' Formülün yerel metni (metin olarak saklanır)
ws.Cells(hucre.Row, 4).Value = "'" & hucre.FormulaLocal
' Bağımsız değişkenleri ayıran karakter
ws.Cells(hucre.Row, 5).Value = Application.International(xlListSeparator)
Next hucre
End Sub
FormulaLocal
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ürün | Net Tutar | KDV Dahil | Yerel Formül | Liste Ayırıcı |
| 2 | Klavye | 850,00 | 1.020,00 | =ROUND(B2*1,2;2) | ; |
| 3 | Fare | 420,00 | 504,00 | =ROUND(B3*1,2;2) | ; |
| 4 | Monitör | 4.600,00 | 5.520,00 | =ROUND(B4*1,2;2) | ; |
| 5 | Kulaklık | 1.250,00 | 1.500,00 | =ROUND(B5*1,2;2) | ; |
KDV HesabıExcelDepo v1.0.0
Kullanırken dikkat edin
- Dile bağımlılık: FormulaLocal ile yazan bir makro, başka dilde Excel kullanan birinin bilgisayarında 1004 hatası verebilir. Makroyu başkalarıyla paylaşacaksanız formülü Formula ile yazın. FormulaLocal kullanacaksanız metni elle yazmak yerine örnek 2'deki gibi Excel'den okuyun.
- Ayırıcılar bölgesel ayarlara bağlıdır: Bağımsız değişken ayırıcısı arayüz dilinden değil, Windows bölgesel ayarlarındaki liste ayırıcısından gelir. Türkçe ayarlarda genellikle noktalı virgül, ondalık ayırıcı ise virgüldür. Bu ayarlar değiştirilmişse yerel formül metni de değişir. Mevcut ayırıcıyı öğrenmek için Application.International özelliğini kullanabilirsiniz.
- Formül metnini sayfaya yazarken kesme işareti: FormulaLocal ile okuduğunuz metni bir hücreye Value ile yazarsanız Excel metni yeniden formül olarak yorumlar. Metni olduğu gibi göstermek için başına kesme işareti ekleyin ya da hücrenin sayı biçimini önce Metin yapın.
- Çok hücreli aralıklarda okuma: Birden fazla hücreli bir aralığın FormulaLocal değeri dizi olarak döner. Bu diziyi doğrudan bir metin değişkenine atamaya çalışırsanız tür uyuşmazlığı hatası alırsınız. Hücreleri tek tek okuyun ya da For Each döngüsü kullanın.
- Yazarken sonuç hücrede formüle dönüşür: Atanan metin eşittir işaretiyle başlıyorsa formül olarak işlenir. Eşittir işareti olmayan bir metin sabit değer olur. Bu nedenle yalnızca formül yazmak istediğinizde metnin başında eşittir işareti olduğundan emin olun.
- İlgili konular:
- Range.Formula: Formülü İngilizce işlev adlarıyla okur ve yazar.
- Range.FormulaR1C1 ve FormulaR1C1Local: Formülü R1C1 başvuru biçiminde işler.
- Range.Formula2 ve Formula2Local: Dinamik dizi davranışıyla formül yazar.
- Range.FormulaArray: Dizi formülü girer.
- Range.HasFormula: Hücrede formül olup olmadığını denetler.
- Application.International: Liste ve ondalık ayırıcı gibi bölgesel ayarları verir.
- Range.Value ve Range.Text: Formül yerine sonucu okumak için kullanılır.
- TOPLA, EĞER ve YUVARLA: Yerel formül metninde karşılaşacağınız Türkçe işlev adlarından bazılarıdır.