Excel’de Sıralı / Sırasız Bir Dizide Eksik Tam Sayıları Bulma VBA Makrosu-Formülü

Son güncelleme : Kasım 20, 2018


Bazı durumlarda, en düşük (minimum) ve en yüksek  (maksimum) değerlerini bildiğimiz bir dizideki, sıralı ya da sırasız tam sayılar içinde, hangi sayıların eksik olduğunu bulmamız gerekebilir. İşte bu vba makrosu / formülü de tam bu noktada işe yarıyor.
Öncelikle yeni açtığımız Excel dosyasını “Makro içerebilen Excel çalışma kitabı (.xlsm)” olarak kayıt ediyoruz.
Makro içerebilen Excel çalışma kitabı .xlsmMakro içerebilen Excel çalışma kitabı xlsm


Not: Kayıt etmeye çalışırken “Dikkat belgenizin bazı bölümleri belge denetçisi tarafından bilgiler içeriyor olabilir.” Belge denetçisi uyarısı gelirse;
Sırasıyla Dosya > Seçenekler > Güven Merkezi > Gizlilik Seçenekleri  > “Kaydederken dosya özelliklerinden kişisel bilgileri kaldır”  işaretini kaldırın.
Belge denetçisi uyarısı 1 Belge denetçisi uyarısı 2

 


Visual Basic (vba) Makro muzu oluşturalım
Önce Menüden Geliştirici > Makrolar‘a açıyoruz

 Makrolar

 
Sayı_Bul Makromuzu Oluşturuyoruz

Sayı Bul vba makrosu oluştur

VBA Kodu şöyle:

[code lang=”vb”] Option Explicit
Sub Sayı_Bul()

Dim InputRange As Range, OutputRange As Range, ValueFound As Range
Dim LowerVal As Double, UpperVal As Double, count_i As Double, count_j As Double
Dim NumRows As Long, NumColumns As Long
Dim Horizontal As Boolean

‘Varsayılanda sonuçlar bir sütuna çıkartılır
Horizontal = False

On Error GoTo ErrorHandler

‘Kontrol edilecek aralığı sor
Set InputRange = Application.InputBox(Prompt:="Kontrol edilecek aralığı seçin :", _
Title:="Eksik değerleri bul", _
Default:=Selection.Address, Type:=8)

‘Aralıktaki / dizideki en düşük ve en yüksek değerleri bul
LowerVal = WorksheetFunction.Min(InputRange)
UpperVal = WorksheetFunction.Max(InputRange)

‘Çıkışın nereye gideceğini sor
Set OutputRange = Application.InputBox(Prompt:="Sonuçların nereye gitmesini istediğinizi seçin :", _
Title:="Sonuçlar için hücre seç", _
Default:=Selection.Address, Type:=8)

‘Çıkış aralığındaki satır ve sütun sayısını kontrol edin
NumRows = OutputRange.Rows.Count
NumColumns = OutputRange.Columns.Count

‘Satırlardan daha fazla sütun seçilmişse, çıktı yatay olarak devam eder
If NumRows < NumColumns Then

Horizontal = True
‘Satır sayısını 1 olarak ayarlayın, böylece çıktı ilk satırdan başlasın
NumRows = 1

Else

‘Sütun sayısını 1 olarak ayarlayın, böylece çıktı ilk sütundan başlasın
NumColumns = 1

End If

‘Sayaç ve döngüyü en düşükten en yüksek değere doğru sırayla başlat
count_j = 1
For count_i = LowerVal To UpperVal

‘Mevcut değeri ara (count_i)
Set ValueFound = InputRange.Find(count_i, LookIn:=xlValues, LookAt:=xlWhole)

‘Bulunmazsa dizide eksik bir numaramız var demektir
If ValueFound Is Nothing Then

‘Eksik sayıyı sayfaya aktar
If Horizontal Then

OutputRange.Cells(NumRows, count_j).Value = count_i
count_j = count_j + 1

Else

OutputRange.Cells(count_j, NumColumns).Value = count_i
count_j = count_j + 1

End If

End If

Next count_i

Exit Sub

ErrorHandler:

If InputRange Is Nothing Then

MsgBox "HATA : Giriş aralığı belirtilmedi!"
Exit Sub

End If

If OutputRange Is Nothing Then

MsgBox "HATA: Çıkış hücresi belirtilmedi!"
Exit Sub

End If

MsgBox "Bir hata oluştu. Makro sonlandırılacak."

Application.Goto Reference:="Sayı_Bul"
End Sub

[/code]

Sayı Bul vba
Makroyu girdikten sonra kaydedip makro (vba) sayfasını kapatıyoruz.


Aşağıdaki 1. Örnekte;
Geliştirici > Ekle > Düğme ile bir düğme ekliyoruz.
Düğmeye Sayı_Bul makrosunu atayarak, Sayı Bul metnini girelim,
Daha sonra A1 hücresinden başlayarak, 1’den 20’ye kadar sırasıyla tam sayı değerlerini giriyoruz.
Excel Dizi Eksik Tam Sayıları Bulma Makrosu Formülü 1 1

Makro Ata

 
Deneme amaçlı rastgele bazı sayıları siliyoruz. (Örnekte silinen tam sayılar: 8,12,15,17)
Excel Dizi Eksik Tam Sayıları Bulma Makrosu Formülü 2

 
Sayı Bul düğmesine tıklayarak eksik sayıların bulunacağı hücre aralığını seçiyoruz.
Excel Dizi Eksik Tam Sayıları Bulma Makrosu Formülü 3 1

 
Sonuçların çıkarılacağı ilk hücreyi seçiyoruz.
Excel Dizi Eksik Tam Sayıları Bulma Makrosu Formülü 4 1

 
Ve aşağıda görüldüğü gibi, sonuç olarak eksik olan sayılar B1 hücresinden başlayarak aşağıya doğru sıralandı.
Excel Dizi Eksik Tam Sayıları Bulma Makrosu Formülü 5 1


2. Örnekte ise;
sayıları karışık sırada ve negatif bir sayıdan başlatıyoruz (-4 ve 22 arası)
Excel karışık sayılar negatif eksik bul makrosu

 
Ve sonuç olarak eksik sayıların hepsi sıralanıyor:
Excel karışık sayılar negatif eksik bul makrosu 2


Kaynak:
Philip Treacy, MyOnlineTrainingHub.com


Bir cevap yazın