Farklı Excel dilleriyle uyumluluğu sağlamak için formülleri kaydetmek üzere makro kaydediciyi kullanın. Formüller her zaman varsayılan olarak İngilizce adıyla kaydedilir. Bu sayede formüller Excel'in tüm farklı dillerinde çalışır.
FormulaR1C1 özelliği, hücrelere başvurmak için satır ve sütun numaralandırmasını kullanır. Formula özelliği, A1 referans tipini kullanır (bununla birlikte, R1C1 referansını da yorumlayabilir).
İpucu: Excel formülleri kullanıp kopyalamak, VBA formülleri döngü içinde kullanmaktan daha hızlı sonuç verir.
Örnek: Aşağıdaki komutla F sütununda, eğer B sütunundaki değer 1 ile başlıyorsa E sütunundaki tutarı 1,18 ile çarpıyoruz.
Sub Makro_Excel_Formul() Dim SatirSayisi As Long Dim i As Long SatirSayisi = Range("A" & Rows.Count).End(xlUp).Row 'Eğer B sütunundaki hücre değeri 1 ile başlıyorsa tutarı 1,18 ile çarpıyoruz Range("F2").FormulaR1C1 = "=IF(VALUE(LEFT(RC[-4],1))=1,RC[-1]*1.18,"""")" Range("F2").AutoFill Destination:=Range("F2:F" & SatirSayisi) 'hücrenin sağ altına tıklayıp formülü aşağı kopyalama işlemi Application.Calculate 'excel dosyası hesaplama seçeneği manuel olması ihtimaline karşı Range("A2", "E" & SatirSayisi).Interior.Color = xlNone 'renklendirmeyi siliyoruz 'Eğer F sütunundaki hücre 5000 den küçükse satırı yeşil yapıyoruz For i = 2 To SatirSayisi If Range("F" & i).Value < 5000 Then Range("A" & i, "E" & i).Interior.Color = VBA.ColorConstants.vbGreen Debug.Print Range("F" & i).Value End If Next i 'Range("F2:F" & SatirSayisi).Clear End Sub
Önemli Not: Eğer büyüktür işareti kullanırsak (If Range("F" & i).Value > 5000 Then) sonuç aşağıdaki gibi hatalı oluyor. VBA, değer boş olduğu halde döngüye girip renklendirme yapıyor.
Bu durumu önlemek için (If Range("F" & i).Value > 5000 And Range("F" & i).Value <> "" Then) komutunu kullanmamız gerekir.