Excel VBA'daki Mod işlevi, bir sayıyı başka bir sayıya böldüğünüzde kalanı hesaplar. VBA Mod komutu, tam sayılar, uzun sayılar ve çift sayılar gibi sayısal veri türleriyle çalışır. Ancak, çift hassasiyetli sayılarla kullanıldığında beklenmeyen sonuçlar üretebileceğini unutmamak önemlidir.
Bunun nedeni, çift hassasiyetli sayıların ikili kesirler olarak temsil edilmesidir ve bu da ondalık kesirlerle karşılaştırıldığında yuvarlama hataları ve hassasiyet sorunlarına yol açabilir. Aşağıdaki örneği ele alalım:

Burada, 10'un 3'e bölümünden kalan 1 olduğundan, Hemen kutusuna '1' yazılacaktır.

- MOD, bir sayının diğerine bölünmesiyle kalanı bulur. Mod operatörünün sözdizimi şöyledir: result = number1 Mod number2.
- Mod operatörü, çarpma ve bölme gibi diğer aritmetik operatörlerden daha düşük önceliğe sahiptir. Mod operatörünü tek bir ifadede diğer operatörlerle birlikte kullanırsanız, işlemlerin sırasını kontrol etmek için parantez kullanmanız gerekebilir.
- Mod operatörü, tamsayı, uzun ve çift dahil olmak üzere farklı veri türleriyle kullanılabilir. Ancak, çift hassasiyetli sayılarla yuvarlama hataları meydana gelebilir ve bu da beklenmeyen sonuçlar doğurur.
Sözdizimi
Excel VBA Mod bölümünün sözdizimi aşağıda gösterildiği gibidir:
result = number1 Mod number2
Neresi
- 'number1' (Gerekli) sayısal temettü
- 'number2' (Gerekli) sayısal bölendir
- 'result' kalandır
VBA'da MOD nasıl kullanılır?
VBA Mod'u kullanabilmek için onu uygulayacak gerekli kodu yazmanız gerekiyor.
Adım 1: Araç çubuğundaki “ Geliştirici ” sekmesine gidin ve “ Visual Basic ” seçeneğine tıklayın. Şimdi, işlevler ve alt prosedürler eklemek için VBA Düzenleyicisi açılır. Sonra, yeni bir modül veya boş sayfa oluşturmak için “ Ekle ” düğmesine ve ardından “ Modül ”e tıklayın.


Adım 2: Girişin çift mi yoksa tek sayı mı olduğunu kontrol etmemiz gereken bir örneği ele alalım. Aşağıda gösterildiği gibi VBA Mod komutu kullanılarak kontrol edilebilir.
Sayının tek mi yoksa çift mi olduğunu kontrol eden OddorEven() adında bir fonksiyon oluşturun.

Adım 3: “num” adlı bir değişkeni Integer olarak tanımlayın. Excel VBA'da, kullanıcıdan bir açılır kutu kullanarak girdi kabul eden ve Excel'in bunu okuduğu InputBox()'ı kullanın.

Adım 4: Giriş sayısının tek mi çift mi olduğunu kontrol etmek için bir If-Else ifadesi başlatın. Burada, sayı çiftse Mod sıfır döndürür.

VBA'da sekmedeki girdi sayısını ve ifadeyi yazdıracaktır.
Kod:
Sub OddOrEven()
Dim num As Integer
num = InputBox(“Enter number:”)
If num Mod 2 = 0 Then
Debug.Print num & ” is an even number.”
Else
Debug.Print num & ” is an odd number.”
End If
End Sub
Yukarıdaki kod çalıştırıldığında (F5 kullanılarak) kullanıcının kontrol edilecek sayıyı girebileceği bir açılır pencere getirecektir. Burada, '22' girdisini veriyoruz, bu da '22 çift sayıdır' yazdıracaktır.
Adım 5: F5'e veya Çalıştır düğmesine basarak kodu çalıştırın. Yukarıda belirtildiği gibi yazdırılacaktır.

Örnekler
VBA Mod bölümünü ve işlevlerini anlamanıza yardımcı olacak birkaç örnek aşağıda verilmiştir.
Örnek 1
Kullanıcının InputBox() fonksiyonunu kullanarak iki sayı girdiği ve bu sayılardan birinin diğerine bölünüp bölünemediğini kontrol ettiği bir uygulamayı düşünün.
InputBox() kullanıcının değer girmesi için bir istem açar. “Tamam” düğmesine bastıktan sonra Excel kullanıcının girdisini okur.
Adım 1: Bir sayının diğerine bölünebilir olup olmadığını kontrol etmek için yeni bir DivisibleBy() alt prosedürü oluşturun.

Adım 2: 'num1' ve 'num2' adlı iki değişkeni tam sayı olarak bildirin.

Adım 3: InputBox() fonksiyonunu kullanarak hem 'num1' hem de 'num2' için kullanıcıdan özel girdi kabul edin.

Adım 4: Mod'u sayılarda kullanmanın bir kalan döndürüp döndürmediğini kontrol etmek için bir If-Else ifadesi başlatın. Eğer bir kalan döndürürse, ilk sayı ikinciye bölünemez; aksi takdirde bölünebilir.

Kod:
Sub DivisibleBy()
Dim num1 As Integer
Dim num2 As Integer
num1 = InputBox(“Enter the first number:”)
num2 = InputBox(“Enter the second number:”)
If num1 Mod num2 = 0 Then
MsgBox num1 & ” is divisible by ” & num2
Else
MsgBox num1 & ” is not divisible by ” & num2
End If
End Sub
Adım 5: Kodu çalıştırmak için VBA araç çubuğundaki yeşil ok düğmesine tıklayın.

Adım 6: İstenilen sayıları istemlere girin ve “Tamam”a tıklayın. Çıktı aşağıda gösterildiği gibidir:

Örnek 2
Diyelim ki bir tarih listeniz var ve listedeki her üçüncü tarihi pembe renkle vurgulamak istiyorsunuz. Bu durumda, VBA Mod fonksiyonu her üçüncü hücreyi vurgulayan bir If-Else ifadesi oluşturabilir.

Adım 1: Yukarıdaki koşulu kontrol eden yeni bir HighlightEveryThirdDate() alt prosedürü oluşturun.

Adım 2: Üç değişken tanımlayın; burada 'dateRange' ve 'cell' Range veri türünde, 'counter' ise Integer veri türündedir.

Adım 3: “dateRange” değerini yukarıdaki tablonun aralığı olarak (tercih edilen aralığa göre değiştirilebilir) ve sayacı 0 olarak başlatın.

Adım 4: Her hücreyi kontrol etmek için sayaç değişkenini artırmak üzere bir For döngüsü başlatın. For döngüsünün içinde, VBA Mod fonksiyonunu kullanarak hücre satır dizininin 3'e bölünebilir olup olmadığını kontrol etmek için bir If-Else ifadesi başlatın.

Eğer sayaç Mod 3 = 0 ise o zaman
cell.Interior.ColorIndex = 7
Burada, sayaç üçe bölünebiliyorsa, bu üçüncü hücredir; dolayısıyla, onu pembeye boyarız (renk indeksi 7). Dolayısıyla, her üçüncü hücre pembe ile gölgelendirilir.
Kod:
Sub HighlightEveryThirdDate()
Dim dateRange As Range
Dim cell As Range
Dim counter As Integer
Set dateRange = Range(“A1:A10”)
counter = 0
For Each cell In dateRange
counter = counter + 1
If counter Mod 3 = 0 Then
cell.Interior.ColorIndex = 7
End If
Next cell
End Sub
Adım 5: Kodu çalıştırmak için VBA araç çubuğundaki yeşil ok düğmesine tıklayın.

Adım 6: Ortaya çıkan çıktı aşağıda gösterildiği gibidir:

Yukarıda görüldüğü gibi hücre indeksleri 3, 6 ve 9 pembe renkle vurgulanmıştır çünkü indeks numarası 3'e bölünebilir ve bu VBA MOD ile kontrol edilebilir.
Excel MOD fonksiyonu ve VBA Mod operatörü
Excel'deki MOD işlevi ve VBA MOD operatörü, bir bölme işleminin kalanını döndürmek için aynı işlemi gerçekleştirir. Ancak, ikisi arasında bazı farklar vardır:
- Sözdizimi: Excel'deki MOD fonksiyonunun sözdizimi MOD(sayı, bölen ) şeklindedir; burada sayı bölünecek değerdir ve bölen bölünecek değerdir. VBA MOD operatörünün sözdizimi sayı Mod bölen şeklindedir ; burada sayı ve bölen Excel fonksiyonunda olduğu gibi aynı anlama gelir.
- Değer aralığı: Excel MOD işlevi pozitif ve negatif sayılar üzerinde modül işlemleri gerçekleştirebilirken, VBA MOD operatörü yalnızca pozitif sayılarla kullanılabilir. VBA MOD operatörüyle negatif bir sayı kullanırsanız, negatif bir kalan döndürür. Pozitif kalanı elde etmek için, böleni modül işleminin sonucuna eklemeniz gerekir.
- Veri türleri: Excel MOD işlevi sayılar, tarihler ve saatler gibi çeşitli veri türlerini işleyebilirken, VBA MOD operatörü yalnızca tam sayılar ve çift sayılar gibi sayısal veri türleriyle kullanılabilir.
- Hata işleme: Excel MOD fonksiyonu, sayı veya bölen bağımsız değişkenlerinden biri sayısal değilse #VALUE! hatasını döndürür ; oysa VBA MOD operatörü, bağımsız değişkenlerden biri sayısal değilse çalışma zamanı hatası oluşturur.
Genel olarak, VBA'da sayısal veri türleriyle çalışıyorsanız, modül işlemleri için MOD operatörünü kullanabilirsiniz. Ancak, sayısal olmayan veri türlerinde modül işlemleri yapmanız gerekiyorsa veya negatif sayıları işlemeniz gerekiyorsa, Excel'de MOD işlevini kullanabilirsiniz.
Excel MOD fonksiyonuna örnek
Aşağıda gösterildiği gibi iki sütuna iki sayı girildiğini düşünün. Kalanları =MOD(<hücre_numarası1>,<hücre_numarası2>) kullanılarak hesaplanabilir.

Çıktı şu şekilde olur:

Dikkat Edilmesi Gereken Önemli Noktalar
- Mod fonksiyonu, koşullu ifadelerde çift veya tek sayıları test etmek ve bir bölme işleminin kalanına dayalı diğer hesaplamaları yapmak için kullanılabilir.
- Mod işlevi, çarpma ve bölme gibi diğer aritmetik operatörlerden daha düşük önceliğe sahiptir. Bu, Mod işlevini tek bir ifadede diğer operatörlerle birlikte kullanırsanız, işlemlerin sırasını kontrol etmek için parantez kullanmanız gerekebileceği anlamına gelir.
- Mod fonksiyonu, bölen sıfır veya boş bir değerse sıfıra bölme hatası üretebilir. Bu hatayı önlemek için, Mod fonksiyonunu kullanmadan önce bölenin sıfır olmadığından emin olmak için bir kontrol ekleyebilirsiniz.
- Mod fonksiyonu hem pozitif hem de negatif sayılarla kullanılabilir. Ancak sonuç her zaman pozitif olacaktır.
- VBA Mod ondalık sayılarla yapıldığında çift hassasiyetli sayılarla bu yuvarlama hataları birikerek beklenmeyen sonuçlara yol açabilir.
Örneğin, aşağıdaki kodu ele alalım:

Yukarıda belirtildiği gibi, bu kod çalıştırılırsa hatalı değerler yazdıracaktır. Bu durumda, doğru cevap olmayan 0 cevap olarak yazdırılır.

