19 Kasım 2023 Pazar

Excel VBA: Belirtilen aralıktaki çift, tek veya tüm sayıların sayısı

Yayınlama: 4/4/2014
Güncelleme: 19/11/2023
Eğer Excel'de kullanabileceğiniz bir özel fonksiyon olsaydı, "SayiSay" fonksiyonu şu şekilde işlev görebilirdi:

=SayiSay(hücreler; sayiCesidi)

Bu fonksiyon, belirtilen hücre aralığındaki sayıların sayısını belirli bir kriter veya sayı türüne göre sayan bir formül sağlar. "hücreler" parametresi, sayıları içeren hücre aralığını temsil ederken, "sayiCesidi" parametresi ise sayılardan hangi türleri saymak istediğinizi belirler.

Örneğin:

Eğer "sayiCesidi" parametresi 1 olarak belirlenirse, fonksiyon belirtilen hücre aralığındaki tek sayıların sayısını verir.
Eğer "sayiCesidi" parametresi 2 olarak belirlenirse, fonksiyon çift sayıların sayısını verir.
Eğer "sayiCesidi" parametresi belirtilmez veya 0 olarak belirlenirse, fonksiyon hücre aralığındaki tüm sayıların sayısını verir.
Bu örnek formül, belirli bir hücre aralığındaki sayıların çeşidine göre sayım yapmanıza olanak tanıyan özelleştirilmiş bir Excel fonksiyonunu temsil etmektedir. Ancak, bu fonksiyon Excel'in standart fonksiyonları arasında yer almamaktadır, bu nedenle böyle bir fonksiyonu kullanabilmek için aşağıdaki kodlar gibi özel bir VBA (Visual Basic for Applications) makro yazmanız gerekecektir.

Fonksiyonun kullanımı

hücreler olarak: "A1:E4" gibi çok sayıda hücre
sayiCesidi olarak:
Tüm sayılar için 0
Tek sayı için 1
Çift Sayı için 2
girin.

Örnek 1: =SayiSay("A1:E5")
"A1:E5" aralığındaki tüm sayıların sayısını verir.
Örnek 2: =SayiSay("A1:E5";0)
"A1:E5" aralığındaki tüm sayıların sayısını verir.
Örnek 3: =SayiSay("A1:E5";1)
"A1:E5" aralığındaki tek sayıların sayısını verir.
Örnek 4: =SayiSay("A1:E5";2)
"A1:E5" aralığındaki çift sayıların sayısını verir.

Kodları eklemek için:
Excelde ALT+F11'e basın.
Menüden Insert / Module tıklayın.
Aşağıdaki kodları ekleyin
Option Explicit
'Blog sayfam	 : https://mesutakcan.blogSpot.com
'Youtube Kanalım : https://www.youtube.com/mesutakcan
'WhatsApp kanalım: https://www.whatsapp.com/channel/0029Va5h4cQ0LKZLuB9Dpy23
'Telegram kanalım: https://t.me/mesutakcan
Enum eSayiCesidi
	tumSayilar = 0
	tekSayilar = 1
	ciftSayilar = 2
End Enum

Function SayiSay(hucreler As Range, _
	Optional sayiCesidi As eSayiCesidi = tumSayilar) As Long
	
	Dim hucre As Range
	Dim sayiAdedi As Long
	
	' belirtilen tüm hücreler
	For Each hucre In hucreler
		' hücre değeri sayı ise
		If IsNumeric(hucre.Value) Then
			'sayıları say
			If (sayiCesidi = tumSayilar) Or _
				(sayiCesidi = tekSayilar And hucre.Value Mod 2 <> 0) Or _
				(sayiCesidi = ciftSayilar And hucre.Value Mod 2 = 0) Then
					sayiAdedi = sayiAdedi + 1
			End If
		End If
	Next
	
	SayiSay = sayiAdedi
End Function

Hiç yorum yok:

Yorum Gönder