Veri işleme, bir veya birden fazla sütunu silmek de dahil olmak üzere Excel'de düzenli bir görevdir. Excel'de görevleri otomatikleştirdiğimizde, birkaç sütunu silebiliriz ve bunun ardındaki mantığı bilmek otomasyonun hayati bir parçasıdır. VBA Delete Column, belirli bir sütunu silmek ve verilerinden kurtulmaktır, böylece sağ taraftaki sütun silinen sütunun yerini alır. Örneğin, Excel'deki aşağıdaki verilere bakın.

“C” sütununu silmemiz gerektiğini varsayalım; aşağıdaki kodu kullanabiliriz.
Sub Delete_Column_Intro()
Range(“C:C”).Delete
End Sub
Kodu çalıştırdığımızda, “C” sütununu silecektir. Görüldüğü gibi “C” sütununda veri yok, çünkü sütun silme yöntemini kullandığımızdan silinen sütundaki tüm veriler silindi.

- Sütun silme, bir sütunun tamamını, içindeki veriler ve biçimlendirmeyle birlikte silmekten başka bir şey değildir.
- Birden fazla sütunu aynı anda silebiliriz.
- COLUMNS özelliğini kullanıyorsak sütun sütun numarayı silebiliriz. RANGE nesnesini kullanıyorsak, numara yerine sütun adını girmeliyiz.
- VBA Delete Columns, mantıksal koşul kullanılarak boş sütunları silmek için kullanılabilir. Verilen aralıktaki herhangi bir hücre boşsa tüm sütunu silebilir.
Excel VBA'da Sütun Sil komutu ne işe yarar?
Adından da anlaşılacağı gibi, Delete Column belirli bir sütunu siler. Gerekli sütunun seçimi koşullara göre farklı olacaktır; bu nedenle bu makalede yaygın ve gerçek zamanlı örneklerden bazılarını dönüştüreceğiz.
Bir sütunu silmek için, silinecek sütunu aşağıdaki yöntemlerden birini kullanarak belirtmemiz gerekir.
- SÜTUNLAR (Columns) özelliği.
- ARALIK (Range) Nesnesi
Örneğin, VBA COLUMNS özelliğini kullanarak herhangi bir sütuna başvurmak için aşağıdaki yapıyı kullanabiliriz .
Columns(2).Delete (Bu, VBA'nın sütunları numaraya göre silmesidir)
VEYA
Columns(“B”).Delete
Sütuna referans vermek için RANGE nesnesini kullanabiliriz.
Range(“B:B”).Delete
- Her iki yöntemde de gördüğümüz gibi, önce sütunlara başvurduk; ardından Delete metodunu kullanarak onları sildik.
- Silinecek birden fazla sütun olması durumunda başlangıç ve bitiş sütun adlarına başvurulması gerekmektedir.
- Örneğin, B, C ve D sütunlarını silmek istiyorsak, sütuna aşağıdaki şekilde başvurabiliriz:
- Range(“B:D”).Delete (Bu VBA Sil sütun aralığıdır)
Sütun "B" başlangıç noktasıdır ve sütun "D" bitiş noktasıdır. Araya "C" dahildir.
VBA'da Sütun Nasıl Silinir?
Excel'de VBA Delete Column yöntemini uygulamak için adım adım bir yaklaşım gösterelim. Bu örnek için Excel'de aşağıdaki verileri kullanın.

Durum sütununu (D sütunu) silmemiz gerektiğini varsayalım, o zaman aşağıdaki adımları takip edebiliriz.
Adım 1: Makroya isim vererek alt prosedürü başlatın.

Adım 2: Şimdi silinecek sütuna başvurmalıyız. Bu nedenle COLUMNS özelliğini veya RANGE nesnesini kullanın.

Adım 3: “D” sütununu sildiğimiz için, bu sütuna çift tırnak içindeki sütun adını kullanarak başvurun.

Adım 4: İstenilen sütun girildikten sonra parantezi kapatın.

Adım 5: Şimdi, bu sütunun “Sil” yöntemini seçmeliyiz. “Sil” yöntemine erişmek için bir nokta girin.

RANGE nesnesi yerine COLUMNS özelliğini kullanmanın sınırlamalarından biri, noktayı girdiğimizde IntelliSense listesini göremememizdir. Bu nedenle, sütunlara başvurmak için her zaman RANGE nesnesini kullanmanızı öneririz.
Adım 6: Noktayı girdikten sonra “Sil” metoduna girin.

İşte bu kadar.
Kodu çalıştıralım, başvurulan sütun silinecektir.

Görüldüğü gibi durum sütunu siliniyor ve hemen sağındaki sütun silinen sütunun yerini alıyor.
Silinme gerçekleşmeden önce “E” sütununda bulunan “Maliyet” sütunu bir sütun sola kayarak “D” sütununun yerini alır.
Excel VBA Sütun Silme Yöntemi Örnekleri
Excel'de VBA Delete Column yöntemini uygulamak için bazı vaka çalışmalarını gösterelim. Aşağıda listelenen örnekleri takip edelim.
Örnek 1: Delete Yöntemini Kullanma
VBA Delete Column metodunu uygulamak için aşağıdaki verileri kullanacağız.

“D” sütununu silmemiz gerektiğini varsayalım. Aşağıdaki adımları kullanabiliriz.
Adım 1: İlk olarak, sütun adına başvurmalıyız. Bu nedenle, COLUMNS özelliğini veya RANGE nesnesini kullanmalıyız. IntelliSense listesi RANGE nesnesiyle birlikte mevcut olduğundan, sütuna başvurmak için RANGE nesnesini kullanalım.

Adım 2: Tüm sütunu sildiğimiz için sütun adresini çift tırnak içine alıyoruz.

Adım 3: Sütun adresi verildikten sonra bir nokta girin, VBA RANGE nesnesiyle ilişkili özelliklerin ve yöntemlerin listesi gösterilecektir .

Adım 4: IntelliSense listesinden “Sil” yöntemini seçin.

Şimdi kodu çalıştıralım. "D" sütununu silmeli.

Görüldüğü gibi “D” sütununda “Mar” verisi vardı, silindi ve hemen sağdaki sütuna, yani APR verisi sütununa eklendi.
Benzer şekilde sağ taraftan itibaren gelen tüm sütunlar bir sütun sola doğru hareket etti.
Örnek 2: Belirli Başlığa Sahip Sütunu Sil
Önceki örnekte, "D" sütununu sildik ve hemen sağdaki sütunlar onun yerini aldı. Ancak, kodu tekrar çalıştırmak geçerli "D" sütununu, yani "Apr" sütununu silecektir.

Bu sorunları önlemek için başlık tabanlı mantığı kullanabilir ve eğer başlık verilen isme uygunsa sütunu silebiliriz.
Örneğin, VBA Delete Column metodunu uygulamadan önce sahip olduğumuz orijinal verilere bakalım.

“D” sütununu silmeliyiz ve onun “D” başlığı “Mar”dır. “D” sütununun başlığının “Mar”a eşit olup olmadığını kontrol etmek için mantıksal bir koşul uygulayabiliriz; eğer eşitse, sütunu silebilir veya kullanıcı dostu bir mesaj gösterebiliriz.
Aşağıdaki kod, başlık adını kontrol etmek ve verilen başlık adıyla eşleşiyorsa sütunu silmek için kullanılabilir.
Sub Delete_Column_Ex2()
‘Define a variable to find store the header name
Dim Header_Name As String
‘Set the header name to the variable
Header_Name = “Mar”
‘Apply logical condition to check if the column “D” header value is “Mar”
‘If it matches then delete the column
If Range(“D1”).Value = Header_Name Then
Range(“D:D”).Delete
Else
MsgBox “The column ‘D’ header value is something different”
End If
End Sub
"D" sütununu silecek kodu çalıştıralım.

“D” sütununun başlığı “Mar” olduğundan, “D” sütunu silindi. Kodu tekrar çalıştıralım ve ne olacağını görelim.

Sütunu silmek yerine, önce sütun başlığı adını kontrol eder. "D" sütununun başlık adı "Mar" olmadığından, VBA Delete Column yöntemini uygulamamıştır. Bunun yerine, "'D' sütununun başlık değeri farklı bir şey" mesajını gösterir.
Kodu daha esnek hale getirir ve gereksiz sütun silinmelerini önler.
Örnek 3: VBA Başlığa Dayalı Sütun Silme
Önceki iki kod, herhangi bir etkin çalışma sayfasından "D" sütununu silecektir. Ancak, bu kodu çalıştırırken, kodu yürütürken hangi çalışma sayfasında olduğumuzdan emin olmalıyız.
Örneğin, "Satışlar" çalışma sayfasındaki sütunu silmemiz gerektiğini varsayalım, o zaman "Satışlar" çalışma sayfasını seçebilir ve ardından VBA Delete Column yöntemini çalıştırabiliriz. Aşağıdaki koda bakın.
Sub Delete_Column_Ex3()
‘Define a variable to find store the header name
Dim Header_Name As String
‘Set the header name to the variable
Header_Name = “Mar”
‘Select the worksheet “Sales” before execute the VBA Delete Column code
Worksheets(“Sales”).Select
‘Apply logical condition to check if the column “D” header value is “Mar”
‘If it matches then delete the column
If Range(“D1”).Value = Header_Name Then
Range(“D:D”).Delete
Else
MsgBox “The column ‘D’ header value is something different”
End If
End Sub
Görüldüğü gibi sarı renkli çizgiler “Satışlar” çalışma sayfasını aktifleştirecek ve ardından VBA Sütun Sil kodunu çalıştıracaktır.
Örnek 4: Boş Sütunları Sil
Boş sütunlarla uğraşmak genellikle çok zordur. Bu nedenle bu boş sütunları silmek, farkında olmamız gereken veri işleme tekniklerinden biri olacaktır.
Örneğin Excel'deki aşağıdaki verilere bakalım.

C, G ve I sütunlarında bazı boş sütunlarımız var.
Burada tüm boş sütunları silmek için dinamik kodu dinamik olarak kullanmalıyız. Aşağıdaki kod tüm boş sütunları dinamik olarak silecektir.
Sub Delete_Column_Ex4()
‘Define variable to find the last used column in first row
Dim LC As Long
‘Find the last used column in row #1
LC = Cells(1, Columns.Count).End(xlToLeft).Column
‘Define a variable to use for loop
Dim k As Long
‘Define a variable to get the entire column filled cells count
Dim Column_Count As Long
For k = 1 To LC
‘Find the column cells count
Column_Count = WorksheetFunction.CountA(Columns(k))
‘Check if the current looping column count is 0
‘If count is 0 then delete that entire column
If Column_Count = 0 Then
Cells(1, k).EntireColumn.Delete
‘Once the deletion of column happens one column eliminated
‘Hence we need to reset the last used column variable LC by 1
LC = LC – 1
‘At any given point of time if hte looping value is less than last used column then exit the loop
If LC < k Then Exit For
End If
Next k
End Sub
Bu kodu çalıştırın. Tüm boş sütunları silecektir.

Örnek 5: Boş Hücre Sütunlarını Sil
Boş sütunları silmek bir yoldur ve boş hücre sütunlarıyla uğraşmak başka bir yoldur. Örneğin, Excel'deki aşağıdaki verilere bakın.

Bazı sütunlarda boş hücreler var. Herhangi bir hücre boşsa tüm sütunu silmek gerekir.
Aşağıdaki kod her sütundaki boş hücreleri kontrol edecek ve eğer boş hücre varsa tüm sütunu silecektir.
Sub Delete_Column_Ex5()
‘Define a variable to find the last used row
Dim LR As Long
‘Find the last used row
LR = Cells(Rows.Count, 1).End(xlUp).Row
‘Define a variable to find the last used column
Dim LC As Long
‘Find the last used row
LC = Cells(1, Columns.Count).End(xlToLeft).Column
‘Define a varaible to set the dynamic range
Dim Rng As Range
‘Set the range using the last used row and last used column
Set Rng = Cells(1, 1).Resize(LR, LC)
‘Use the special cells method and choose the blank cells and insert dummy value “Hii”
Rng.SpecialCells(xlCellTypeBlanks).Value = “Hii”
‘Start the loop of each column
Dim k As Long
For k = 1 To LC
‘Define variable to count dummay value
Dim Dummy_Count As Long
Dummy_Count = WorksheetFunction.CountIf(Columns(k), “Hii”)
‘If the dummy value count in the looping column is greter than 1 then delete that column
If Dummy_Count > 0 Then
Cells(1, k).EntireColumn.Delete
LC = LC – 1
If LC < k Then Exit For
End If
Next k
End Sub
Bu kod her sütundaki boş hücreleri kontrol edecek ve "Hii" adı verilen bir kukla değer ekleyecektir. Bir kukla değer ekledikten sonra, FOR NEXT döngüsü her sütunu dolaşacak ve kukla değer sayısını kontrol edecektir.
IF mantıksal koşulu, kukla değer sayısını kontrol edecektir; sayım birden büyükse, o sütunun tamamını silecektir; aksi takdirde, bir sonraki sütuna geçecektir. Bu kodun sonucu aşağıdaki gibi olacaktır.

Dikkat Edilmesi Gereken Önemli Noktalar
- COLUMNS özelliği ile IntelliSense listesini görmüyoruz; dolayısıyla, özellikle VBA kodlamaya başlıyorsanız, alternatif olarak RANGE nesnesini kullanmanız önerilir .
- Birden fazla sütundan birden fazla hücre seçildiğinde, seçili hücrelerin tüm sütunlarını silme işlemini gerçekleştiremeyiz; hata verir.
- RANGE nesnesini kullanarak herhangi bir sütuna başvururken, çift tırnak içinde tam sütun adresini vermeliyiz.
- Herhangi bir sütunu sildiğimizde, hemen sağındaki sütun silinen 'in yerini alacaktır. Bu nedenle, sütun silme kodunu ikinci kez çalıştırırken dikkatli olmalıyız.
Birden fazla sütunu tek seferde silmek için sütunların başlangıcını ve sonunu vermeliyiz. Örneğin, C, D, E ve F sütunlarını silmek istiyorsak, bu sütunların referanslarını aşağıdaki gibi uygulamalıyız.
Range(“C:F”).Delete
Bir sütunu isme göre silmek için satır #1'de başlık değerlerine sahip olmalıyız. Başlık değerini kontrol etmek için IF mantıksal koşulunu kullanabiliriz. Bu başlık değeri verilen değerle eşleşiyorsa, VBA Delete Column yöntemi mantığını uygulayabiliriz.
Bir sütundan yinelenenleri silmek için “Yinelenenleri Kaldır” yöntemini kullanmalıyız. VBA Sütunu Sil yöntemi tüm sütunu kendisi kaldıracaktır.
Her hücrenin değerini kontrol etmek için FOR…NEXT döngüsüyle birlikte IF mantıksal koşulunu kullanabiliriz. Hücre değeri belirli bir değere eşitse Delete column yöntemini uygulayabiliriz.
