Excel VBA XLUP nedir?
Excel çalışma sayfalarında çalışırken, işi hızlı bir şekilde halletmek için birçok kısayol tuşu kullanırız. Bunlardan biri, alttan sütunun en üst hücresine gitmektir. Bunun için kullanılan kısayol tuşu Ctrl + Yukarı Ok'tur.
VBA'da benzer bir görev için, RANGE nesnesi içinde XLUP yönünü kullanmalıyız. Bu nedenle, VBA XLUP geçerli hücreden yukarı yönde ilk boş olmayan hücreye ulaşmamıza yardımcı olur. Bunun Excel çalışma sayfasında nasıl çalıştığına dair basit bir örnek gösterelim. Excel'deki aşağıdaki verilere bakın.

A1 ile B12 aralığında verilerimiz var ve şu anda A15 hücresindeyiz. Klavyede Ctrl + Yukarı Ok kısayol tuşunu kullanalım.

Kısayol tuşuna bastığımızda, etkin hücre C15 hücresinden C12'ye, yani ilk boş olmayan hücreye taşınır. XLUP yöntemi aşağıda görüldüğü gibi benzer bir işlevi gerçekleştirir.
Sub VBA_XLUP()
Range(“A14”).End(xlUp).Select
End Sub
Bu, A14 hücresinden yukarı doğru ilk boş olmayan hücreyi seçecektir. Önemli olan, bu kodda VBA XLUP'ı kullanmış olmamızdır.
Kodlamada VBA XLUP Nasıl Kullanılır?
Kodlamada VBA XLUP'ı kullanmanın adım adım yaklaşımını gösterelim. Aşağıda listelenen adımları izleyin. Örneğin, Excel çalışma sayfasındaki şu verilere bakın.

A1'den B10'a kadar bir veri aralığımız var. Buradaki kritik nokta VBA XLUP komutunun işlevselliğini anlamaktır.
Bunu anlamak için öncelikle VBA XLUP'un Range.End özelliğiyle olan sözdizimine bakmamız gerekiyor.
Aralık Sonu Özelliğinin Sözdizimi
Range.End özelliği, üzerinde çalıştığımız veri aralığındaki belirli bir hücreye manevra yapmamızı sağlar. Sözdizimi aşağıdaki gibidir:
Range(From Cell).End(Direction)
Range nesnesinin içinde, manevraya başlayacağımız hücre adresini sağlamamız gerekir. Örneğin, manevraya A10 hücresinden başlamamız gerekir.
Sonra, END özelliği manevranın yönünü kontrol etmek için RANGE nesnesinin bir parçası olarak kullanılır. RANGE nesnesinin END özelliğinin içinde, aşağıdaki dört yön komutunu kullanabiliriz.
xlDown – RANGE nesnesinin başlangıç hücresinden son boş olmayan hücreye aşağı doğru hareket etmek için. Bu, Ctrl + Aşağı Ok tuşunu kullanmakla aynıdır .
xlUp– RANGE nesnesinin başlangıç hücresinden son boş olmayan hücreye kadar yukarı doğru hareket etmek için. Bu, klavye kısayolu Excel'de Ctrl + Yukarı Ok tuşunu kullanmakla aynıdır .
xlToLeft – RANGE nesnesinin başlangıç hücresinden son boş olmayan hücrenin sol tarafına geçmek için. Klavye kısayolunda Ctrl + Sol Ok tuşunu kullanmakla aynıdır .
xlToRight – RANGE nesnesinin başlangıç hücresinden son boş olmayan hücrenin sağ tarafına geçmek için. Klavye kısayolunda Ctrl + Sağ Ok tuşunu kullanmakla aynıdır . Aşağıda RANGE END özelliğinin bir parçası olarak kullanılabilen seçeneklerin görüntüsü bulunmaktadır.


A15'ten son boş olmayan hücreye gitmemiz gerektiğini varsayalım. Aşağıda listelenen adımları izleyin.
Adım 1: Makroyu Excel'de adlandırarak alt rutin prosedürünü başlatın .

Adım 2: İlk olarak, VBA XLUP özelliğini nereden başlatmamız gerektiğine karar vermeliyiz. Bu durumda, A15 hücresinden başlamalıyız. Bu nedenle, RANGE nesnesini kullanın ve hücre adresini A15 olarak sağlayın.

Adım 3: Verilen hücreden yukarıya doğru hareket etmemiz gerektiğinden, yön için “End” özelliğini seçmeliyiz. Bu nedenle, bir nokta girin ve END özelliğini kullanın.

Adım 4: END özelliği için bir parantez açın. IntelliSense listesinde yön seçeneklerini göreceğiz.

Adım 5: Yukarı doğru hareket etmemiz gerektiğinden VBA XLUP seçeneğini seçip parantezi kapatıyoruz.

Adım 6: Yukarı doğru hareket ettiğimizde, boş olmayan son hücreyi seçmeliyiz. Bu nedenle, bir nokta girin ve Select yöntemini seçin.

Şimdi imlecimizi öncelikle A15 hücresinin üzerine getirelim.

Şimdi kodu çalıştırın. İlk boş olmayan hücreyi, yani A10 hücresini seçmelidir.

Görüldüğü gibi A15 hücresinden yukarı doğru ilk boş olmayan hücre A10 hücresidir ve VBA XLUP özelliği ile aynı hücre seçilmiştir.
Bu şekilde VBA XLUP'ı kullanarak boş olmayan hücreyi seçebiliriz.
Örnek 1 – Hücreleri Silinen Hücrelerin Konumuna Taşı
Verilerle çalıştığımızda boş hücrelerle uğraşırız ve verilerle sorunsuz çalışmak için bu boş hücrelerden kurtulmamız gerekir. Örneğin, Excel çalışma sayfasındaki aşağıdaki verilere bakın.

İlk veri setinde, A1'den B12'ye kadar olan aralıkta aylık satışlarımız var. Ancak, satır #5 ve satır #9'da bazı boş satırlarımız var.
En basit yol boş satırı seçip silmektir. Ancak buradaki sorun sağ tarafta başka bir veri setimiz olmasıdır. Bu boş satırları silmeye çalışırsak bu satırların verileri sağ taraftaki tablodan da silinecektir. Sonunda ikinci tablodan da bazı verileri silmek zorunda kalacağız.
Bunu yapmanın bir yolu özel hücreleri kullanmaktır. Aynı mantığı VBA XLUP kullanarak VBA kodlamasında nasıl uygulayabileceğimizi göstermeden önce, yalnızca ilk tablodan boş hücreleri silmek için aşağıda listelenen adımları izleyelim .
Adım 1: A1'den B12'ye kadar olan tüm veri aralığını seçin.

Adım 2: “Git” penceresini açacak olan F5 tuşuna basın. Bu pencerede “Özel” seçeneğine tıklayın.

Adım 3: “Özel’e Git” penceresinde “ Boş ” seçeneğini seçin.

Adım 4: “Tamam”a tıklayın. Seçili bölgedeki tüm boş hücreler, yani A1'den B12'ye kadar olan hücreler seçilecektir.

Adım 5: Boş hücreleri seçili tutarken Delete tuşuna “Ctrl ve Eksi (-)” işaretine basarak aşağıdaki “Sil” penceresini getirin.

Buradan VBA'daki VBA XLUP'ın kopyası olan "Hücreleri Yukarı Kaydır" seçeneğini seçin.

“Tamam”a tıklayın. Tüm seçili satırlar seçilmeli ve altlarındaki hücreler yukarı kaydırılmalıdır.

Benzer bir eylem kümesi VBA'da VBA XLUP metodu kullanılarak gerçekleştirilebilir. Aşağıdaki kod aynısının bir örneğidir. Bunu ayrıntılı olarak açıklayalım.
Sub VBA_XLUP_Ex1()
Range(“A1:B12”).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
End Sub
Range(A1:B12) – Verilerimiz A1 ila B12 hücre aralığına yayıldığı için, RANGE nesnesini kullanarak veri aralığı referansını sağladık.
SpecialCells (xlCellTypeBlanks) – Verilen aralık referansında, yalnızca boş hücrelerle çalışmalıyız. Bu nedenle, VBA Special Cells yöntemini kullanıyoruz. Bu özel hücreden, xlCellTypeBlanks'ı kullanarak yalnızca boş hücreleri seçtik.
Delete Shift:xlUp – Boş hücreyi silmemiz gerektiğinden, VBA Delete metodunu kullandık. Ayrıca, tüm hücreleri yukarı kaydırmalıyız. Bu nedenle, Delete metodunun Shift argümanını kullandık ve verileri alt hücrelerden üst hücrelere itmek için VBA XLUP'ı kullandık.
Örnek 2 – VBA XLUP kullanarak Son Kullanılan Satırı Bulma
Aynı görevi birden fazla satır için gerçekleştirmemiz gerektiğinde, döngüleri kullanmamız gerekir ve döngünün kaç kez çalışması gerektiğini bulmak, veri aralığının son satırına bağlıdır.
Son kullanılan satırı dinamik olarak bulmak için VBA XLUP'ı kullanmamız gerekir. Bunu şimdi pratik bir örnekte yapalım. Bu örnek için kullanacağımız veriler aşağıdadır.

Son kullanılan satırı bulmak için aşağıdaki adımları takip edelim.
Adım 1: Makroya isim vererek alt prosedürü başlatın.

Adım 2: Bildiğimiz gibi, Ctrl + Yukarı Ok kısayol tuşuna bastığımızda , bizi ilk boş olmayan hücreye götürecektir. Burada da aynı yöntemi kullanmamız gerekiyor.
Hangi hücreden yukarı çıkmamız gerekiyor? Verilere bağlı. Ancak, yukarı çıkmanın en iyi yolu Excel çalışma sayfasının son hücresindendir.
Excel çalışma sayfamızda 1 milyondan fazla satır var.

Bu hücreden başlayalım.

Adım 3: Sonra, bu hücreden VBA XLUP kullanarak yukarı çıkmamız gerekiyor. Bunun için VBA XLUP end'i kullanmalı, bir nokta girmeli ve END özelliğini kullanmalıyız.

Adım 4: END özelliği içerisinde, son hücreden ilk boş olmayan hücreye gitmek için VBA XLUP'ı kullanmamız gerekiyor.

Adım 5: İşlem burada bitmiyor; şimdi, buradan ilk boş olmayan hücreye gittikten sonra ne yapmamız gerektiğini seçmemiz gerekiyor. Diyelim ki o hücreyi seçmemiz gerekiyor; dolayısıyla SELECT metodunu kullanalım .

Tamamdır, bu kadar.
Kodu çalıştıralım. Son hücreden, yani A10 hücresinden, ilk boş olmayan hücreyi seçmelidir.

Görüldüğü gibi ilk boş olmayan hücre olan A10 hücresi seçilmiştir.
Son kullanılan satır numarasını bir değişkene almak için bu kodla oynayabiliriz. Örneğin, aşağıdaki koda bakın.

Bölüm #1: Son kullanılan satır numarasını depolamak için değişkeni tanımladık. Atayacağımız değer bir sayı olduğundan, LONG VBA veri türünü kullandık.
Bölüm #2: Tanımlı değişken için, son kullanılan satır numarasını atıyoruz. Bu nedenle, SELECT yöntemini kullanmak yerine, satır numarasını döndürecek olan ROW özelliğini kullanıyoruz.
Bölüm #3: Son olarak, atanan değişken değerini bir mesaj kutusunda gösteriyoruz.
Kodu çalıştıralım ve aşağıdaki gibi bir mesaj kutusunda son kullanılan satır numarasını alalım.

Yani son kullanılan satır numarası on'dur ve aynı değer bir mesaj kutusuna döndürülmüştür.
Bu kodun güzelliği dinamik olmasıdır. Veri arttıkça, sütun A'nın veri boyutuna göre en son satır numarasını otomatik olarak alır. Örneğin, şimdi aşağıdaki verilere bakın.

11. satırda bir boşluk var ve 12. satıra yeni veri ekledik.
Şimdi kodu çalıştıralım ve aşağıdaki gibi son kullanılan satırı döndürmelidir.

Veriler 12. satıra kadar yayıldığı için kod tarafından aynı değer döndürülmüştür.
