Bu bölümde VBA yerleşik formüllerin aksine düşeyara, eğersay gibi excel formüllerini VBA’de kullanmayı öğreneceğiz.
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
Code language: VB.NET (vbnet)
Sonuç:
Ö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.