VBA|Seviye|Temel
1. Hücrelere Veri Yazmak
Aşağıdaki örnekte indeks numarası 1 olan “ishakkutlu.com” isimli sayfanın farklı hücrelerine veri yazdırılmıştır.
Private Sub CommandButton1_Click()
Dim MyRange As Range, Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets(1)
Set MyRange = Ws.Range("A1")
MyRange.Value = "ishakkutlu.com"
'MyRange değişkenine yeni bir değer atayalım.
Set MyRange = Ws.Range("B1:B10")
MyRange.Value = "ishakkutlu.com"
'MyRange değişkenine tekrar yeni bir değer atayalım.
Set MyRange = Ws.Range("C3:E7")
MyRange.Value = "ishakkutlu.com"
End SubSonucun ekran görüntüsü aşağıdadır.

Aynı işlem, MyRange, Ws gibi nesnelere herhangi bir değişken atamadan aşağıdaki şekilde yapılabilir.
Private Sub CommandButton1_Click()
ThisWorkbook.Worksheets(1).Range("A1").Value = "ishakkutlu.com"
ThisWorkbook.Worksheets(1).Range("B1:B10").Value = "ishakkutlu.com"
ThisWorkbook.Worksheets(1).Range("C3:E7").Value = "ishakkutlu.com"
End SubYukarıdaki prosedürün sonucu yukarıdaki ekran görüntüsü ile aynı olacaktır. Ancak görüldüğü gibi değişken atamadan yapılan işlemlerde, özellikle de daha karmaşık ve tekrarlayan süreçlere sahip prosedürlerde, aynı metotları/kodları tekrarlayarak yazmak gerekir. Bu durumda ise prosedür oldukça uzun ve karmaşık olacağından, herhangi bir müdahale etmeniz gerektiğinde, düzeltmeler ve/veya geliştirimeler sizi yıpratacak, projenizin karmaşıklığına göre belki de süreç kontrolden çıkacaktır. Bununla birlikte tekrar etmeyen süreçlerde ilgili nesnelere sürekli değişken atamak yukarıdaki sürece benzer bir karmaşıklığa yol açabilir. Bu sebeple kimi bölümlerde nesnelere değişken atamak avantajlı iken, kimi bölümlerde nesnelere değişken atamamak daha avantajlı olabilir.
Aynı çalışma kitabının farklı bir sayfasına veri yazmak için hedef sayfanın indeks numarasını (veya ismini) değiştirmeniz yeterli olacaktır.
Private Sub CommandButton1_Click()
Dim MyRange As Range, Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets(2) ‘Sadece burada değişiklik yapıldı.
Set MyRange = Ws.Range("A1")
MyRange.Value = "ishakkutlu.com"
'MyRange değişkenine yeni bir değer atayalım.
Set MyRange = Ws.Range("B1:B10")
MyRange.Value = "ishakkutlu.com"
'MyRange değişkenine tekrar yeni bir değer atayalım.
Set MyRange = Ws.Range("C3:E7")
MyRange.Value = "ishakkutlu.com"
End SubYukarıdaki prosedür çalıştırıldığında indeks numarası 2 olan sayfanın belirtilen hücrelerine veriler otomatik olarak yazılır.
Range ve Cellls metotları tamamen aynı özelliklere sahip olmamakla birlikte, hücrelere veri yazmak için Range metodu yerine Cells metodunu da kullanabilirsiniz.
Private Sub CommandButton1_Click() Dim MyRange As Range, Ws As Worksheet Set Ws = ThisWorkbook.Worksheets(1) Set MyRange = Ws.Cells(2, 1) MyRange.Value = "ishakkutlu.com" End Sub
Yukarıdaki prosedürün sonucuna ilişkin ekran görüntüsü aşağıdadır.

Cells(2,1) metodunda, ilk değer olan 2 satır numarasını, ikinci değer olan 1 ise sütun numarasını temsil eder. Diğer bir ifadeyle Cells(2,1) ifadesi 1. sütunun (A sütunu) 2. satırını (2 no.lu satırı) ifade eder.
Örnek-1: Cells(2,1)=Range(“A2”)
Örnek-2: Cells(1,3)=Range(“C1”)
Örnek-3: Cells(5,2)=Range(“B5”)
Söz gelimi tek satır kod ile B1 ve B10 arasına Cells metodu ile veri yazdırmak için Range ve Cells metotlarının birleşiminden yararlanabilirsiniz.
Private Sub CommandButton1_Click() Dim MyRange As Range, Ws As Worksheet Set Ws = ThisWorkbook.Worksheets(1) Set MyRange = Ws.Range(Ws.Cells(1, 2), Ws.Cells(10, 2)) MyRange.Value = "ishakkutlu.com" End Sub
Yukarıdaki prosedürün sonucuna ilişkin ekran görüntüsü aşağıdadır.

Ws.Range(Ws.Cells(1, 2), Ws.Cells(10, 2)) komutu, çalışma kitabının indeks numarası 1 olan sayfasının 2. sütununun, 1 ile 10. satırları arasındaki tüm satırlarını (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) temsil eder.
Örnek-1: Range(Cells(1, 2), Cells(10, 2))=Range(“B1:B10”)
Örnek-2: Range(Cells(3, 3), Cells(7, 5))=Range(“C3:E7”)
Örnek-3: Range(Cells(1, 1), Cells(1, 4))=Range(“A1:D1”)
Yukarıdaki örneklere ilişkin Select metoduna göre hazırlanmış aşağıdaki kodları çalıştırıp inceleyebilirsiniz.
Private Sub CommandButton1_Click()
Dim MyRange As Range, Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets(1)
Set MyRange = Ws.Range(Ws.Cells(1, 2), Ws.Cells(10, 2))
MyRange.Select
'Set MyRange = Ws.Range(Ws.Cells(3, 3), Ws.Cells(7, 5))
'MyRange.Select
'Set MyRange = Ws.Range(Ws.Cells(1, 1), Ws.Cells(1, 4))
'MyRange.Select
'Ws.Range("B1:B10, C3:E7, A1:D1").Select ‘çoklu seçim
End Sub2. Hücrelere Yazılan Verileri Silmek
A1 ile A10 arasındaki hücrelerde veri olduğu varsayımında, A3 ile A5 arasındaki hücrelerde bulunan verileri silmek için aşağıdaki yöntemden yararlanabilirsiniz.
Private Sub CommandButton1_Click() Dim MyRange As Range, Ws As Worksheet Set Ws = ThisWorkbook.Worksheets(1) Set MyRange = Ws.Range(Ws.Cells(3, 1), Ws.Cells(5, 1)) MyRange.ClearContents End Sub

Silme işlemini şu şekilde de yapabilirsiniz.
Private Sub CommandButton1_Click() Dim MyRange As Range, Ws As Worksheet Set Ws = ThisWorkbook.Worksheets(1) Set MyRange = Ws.Range(Ws.Cells(3, 1), Ws.Cells(5, 1)) MyRange.Value = "" 'Sadece burada değişiklik yapıldı. End Sub
Bir sayfada yer alan tüm verileri silmek için aşağıdaki iki yöntemden birini kullanabilirsiniz.
Private Sub CommandButton1_Click() Dim Ws As Worksheet Set Ws = ThisWorkbook.Worksheets(1) 'Ws.Cells.ClearContents 'Yöntem 1 Ws.UsedRange.ClearContents 'Yöntem 2 End Sub
3. Hücrelere Formül Yazmak
Vba ile bir sayfanın hücrelerine formül yazmak için Range nesnesinin Formula metodundan yararlanılır.
Private Sub CommandButton1_Click() Dim Ws As Worksheet Dim i As Integer Set Ws = ThisWorkbook.Worksheets(1) For i = 1 To 10 Ws.Cells(i, 2).Formula = "=A" & i & "*2" Next i End Sub
Yukarıdaki prosedürde B1 ile B10 arasına, A1 ile A10 arasındaki hücrelerinin değerlerinin 2 ile çarpan formüller yazdırılmıştır. 1’den 10’a kadar ardışık olarak birer artan (1, 2, 3 vb.) basit bir For-Next döngüsü kullanılmış olup Ws.Cells(i, 2).Formula = “=A” & i & “*2” komut satırı; i=1 değerini aldığında, Ws.Cells(1, 2).Formula = “=A” & 1 & “*2” (yani =A1*2) değerini, benzer şekilde i=2 değerini aldığında, Ws.Cells(2, 2).Formula = “=A” & 2 & “*2” (yani =A2*2) değerini alır. Sonucu aşağıdadır.

4. Bir Sütunda Veri İçeren İlk ve Son Hücrenin Satır Numarası (Dikey Satır Tespiti)
Aşağıdaki resimde gösterildiği gibi A sütununda verilerin bulunduğu bir veri setimiz olsun.

Bir sütunda veri içeren ilk ve son hücrenin satır numarasını bulmak için aşağıdaki yöntemden yararlanılabilir.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet, SonSatir As Long, IlkSatir As Long
Set Ws = ThisWorkbook.Worksheets(1)
IlkSatir = Ws.Range("A1").End(xlDown).Row
MsgBox "A sütununda kullanılan ilk satırın numarası: " & IlkSatir, vbOKOnly + vbInformation, "ishakkutlu.com"
SonSatir = Ws.Range("A1000000").End(xlUp).Row
MsgBox "A sütununda kullanılan son satırın numarası: " & SonSatir, vbOKOnly + vbInformation, "ishakkutlu.com"
End SubYukarıdaki ilk metotta (IlkSatir) derleyici, veri içeren ilk satırı bulmak için A1 hücresinden aşağıya doğru tarama yapar ve bulduğu ilk dolu satırın satır numarasını döndürür. Bu da bize A sütununda kullanılan ilk hücrenin satır numarasını verir.
İkinci metotta (SonSatir) ise derleyici önce 1 milyon satır aşağıya gider, sonra da yukarı doğru tarama yapar ve bulduğu ilk dolu satırın satır numarasını döndürür. Bu da bize A sütununda kullanılan son hücrenin satır numarasını verir. Sonuca ilişkin ekran görüntüleri aşağıdadır.


Bir sütunda veri içeren ilk ve son hücrenin satır numarasını bulmak için aşağıdaki yöntem de kullanılabilir.
Private Sub CommandButton1_Click() Dim Ws As Worksheet, SonSatir As Long, IlkSatir As Long Set Ws = ThisWorkbook.Worksheets(1) IlkSatir = Ws.Cells(1, 1).End(xlDown).Row MsgBox "A sütununda kullanılan ilk satırın numarası: " & IlkSatir, vbOKOnly + vbInformation, "ishakkutlu.com" 'MsgBox Rows.Count SonSatir = Ws.Cells(Rows.Count, 1).End(xlUp).Row MsgBox "A sütununda kullanılan son satırın numarası: " & SonSatir, vbOKOnly + vbInformation, "ishakkutlu.com" End Sub
Yukarıdaki yöntemin çalışma ilkesi bir önceki yöntem ile aynı mantığa dayanır. İlk metot bir önceki yöntem ile birebir aynıdır. İkinci metotta (SonSatir) ise derleyici, önce 1 milyon satır değil, Excel’de bulunan satır sayısı kadar (ki o da 1 milyondan fazla olup Rows.Count komutu Excel’de var olan satır sayısını verir) aşağıya gider, sonra da (bir önceki yöntemde olduğu gibi) yukarı doğru tarama yapar ve bulduğu ilk dolu satırın satır numarasını döndürür (verir).
5. Bir Sütunda Veri İçeren İlk ve Son Hücrenin Değeri (Dikey Değer Tespiti)
Yukarıdaki yöntemle bir sütunda veri içeren ilk ve son hücrenin satır numarası tespit edilebildiğine göre ilk ve son hücrenin değeri aşağıdaki şekilde kolaylıkla elde edilebilir.
Private Sub CommandButton1_Click() Dim Ws As Worksheet, SonSatir As Long, IlkSatir As Long Dim IlkDeger As Range, SonDeger As Range Set Ws = ThisWorkbook.Worksheets(1) IlkSatir = Ws.Cells(1, 1).End(xlDown).Row Set IlkDeger = Ws.Cells(IlkSatir, 1) MsgBox "A sütununda kullanılan ilk satırın değeri: " & IlkDeger.Value, vbOKOnly + vbInformation, "ishakkutlu.com" SonSatir = Ws.Cells(Rows.Count, 1).End(xlUp).Row Set SonDeger = Ws.Cells(SonSatir, 1) MsgBox "A sütununda kullanılan son satırın değeri: " & SonDeger.Value, vbOKOnly + vbInformation, "ishakkutlu.com" End Sub


6. Bir Satırda Veri İçeren İlk ve Son Hücrenin Sütun Numarası (Yatay Sütun Tespiti)
Aşağıdaki resimde gösterildiği gibi 1 no.lu satırda sütun numaralarının, 3 no.lu satırda ise verilerin bulunduğu bir veri setimiz olsun.

Bir satırda veri içeren ilk ve son hücrenin sütun numarasını bulmak için aşağıdaki yöntemden yararlanılabilir.
Private Sub CommandButton1_Click() Dim Ws As Worksheet, SonSutun As Integer, IlkSutun As Integer Set Ws = ThisWorkbook.Worksheets(1) IlkSutun = Ws.Cells(3, 1).End(xlToRight).Column MsgBox "3 no.lu satırda kullanılan ilk sütunun numarası: " & IlkSutun, vbOKOnly + vbInformation, "ishakkutlu.com" 'MsgBox Columns.Count SonSutun = Ws.Cells(3, Columns.Count).End(xlToLeft).Column MsgBox "3 no.lu satırda kullanılan son sütunun numarası: " & SonSutun, vbOKOnly + vbInformation, "ishakkutlu.com" End Sub
Yukarıdaki ilk metotta (IlkSutun) derleyici, kullanılan ilk sütunu bulmak için A3 hücresinden sağa doğru tarama yapar ve bulduğu ilk dolu hücrenin sütun numarasını döndürür. Bu da bize 3 no.lu satırda, (soldan sağa doğru) veri içeren ilk hücrenin sütun numarasını verir.
İkinci metotta (SonSutun) ise derleyici önce Excel’de bulunan sütun sayısı kadar (ki o da 15 binden fazla olup Columns.Count komutu Excel’de var olan sütun sayısını verir) sağa gider, sonra da sola doğru tarama yapar ve bulduğu ilk dolu hücrenin sütun numarasını döndürür. Bu da bize 3 no.lu satırda, (soldan sağa doğru) veri içeren son hücrenin sütun numarasını verir. Sonuca ilişkin ekran görüntüleri aşağıdadır.


7. Bir Satırda Veri İçeren İlk ve Son Hücrenin Değeri (Yatay Değer Tespiti)
Yukarıdaki yöntemle bir satırda veri içeren ilk ve son hücrenin sütun numarası tespit edilebildiğine göre ilk ve son hücrenin değeri aşağıdaki şekilde kolaylıkla elde edilebilir.
Private Sub CommandButton1_Click() Dim Ws As Worksheet, SonSutun As Integer, IlkSutun As Integer Dim IlkDeger As Range, SonDeger As Range Set Ws = ThisWorkbook.Worksheets(1) IlkSutun = Ws.Cells(3, 1).End(xlToRight).Column Set IlkDeger = Ws.Cells(3, IlkSutun) MsgBox "3 no.lu satırda kullanılan ilk hücrenin değeri: " & IlkDeger.Value, vbOKOnly + vbInformation, "ishakkutlu.com" 'MsgBox Columns.Count SonSutun = Ws.Cells(3, Columns.Count).End(xlToLeft).Column Set SonDeger = Ws.Cells(3, SonSutun) MsgBox "3 no.lu satırda kullanılan son hücrenin değeri: " & SonDeger.Value, vbOKOnly + vbInformation, "ishakkutlu.com" End Sub


8. Seçili-Aktif Hücrenin Satır ve Sütun Numarası (ActiveCell Metodu)
Excel sayfasında seçili-aktif bir hücrenin satır ve sütun numaralarını aşağıdaki şekilde elde edebilirsiniz.
Private Sub CommandButton1_Click() Dim Ws As Worksheet, SatırNo As Integer, SutunNo As Integer Set Ws = ThisWorkbook.Worksheets(1) SatırNo = ActiveCell.Row SutunNo = ActiveCell.Column MsgBox "Seçili-aktif hücrenin satır numarası : " & SatırNo & vbNewLine & _ "Seçili-aktif hücrenin sütun numarası : " & SutunNo, vbOKOnly + vbInformation, "ishakkutlu.com" End Sub

9. Verileri Farklı Hücrelerde Alt Alta Yazdırmak
Verileri farklı hücrelerde alt alta yazdırmak için basit bir For-Next döngüsünden yararlanılabilir.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet
Dim i As Integer
Set Ws = ThisWorkbook.Worksheets(1)
For i = 1 To 7
Ws.Cells(i, 1).Value = "ishakkutlu.com"
'Ws.Range("A" & i).Value = "ishakkutlu.com"
Next i
End Sub
Yukarıdaki örnekten devam edilecek olursa, yani yazdırılacak yeni veriyi 8 no.lu satıra yazdırmak için aşağıdaki yöntemden faydalanılabilir.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet
Dim i As Integer, SonSatir As Long
Set Ws = ThisWorkbook.Worksheets(1)
'For i = 1 To 7
' Ws.Cells(i, 1).Value = "ishakkutlu.com"
' 'Ws.Range("A" & i).Value = "ishakkutlu.com"
'Next i
SonSatir = Ws.Cells(Rows.Count, 1).End(xlUp).Row
Ws.Cells(SonSatir + 1, 1).Value = "Son Satırın Altına Yaz"
End Sub
Yukarıdaki yöntemde butona her tıklandığında bir alt satıra “Son Satırın Altına Yaz” verisi yazılacaktır.

10. Verileri Aynı Hücrede Alt Alta Yazdırmak
Verileri aynı hücrenin içinde alt alta yazdırmak için aşağıdaki yöntem kullanılabilir.
Private Sub CommandButton1_Click() Dim Ws As Worksheet Dim i As Integer Set Ws = ThisWorkbook.Worksheets(1) For i = 1 To 7 If i = 1 Then Ws.Cells(1, 1).Value = "ishakkutlu.com" Else Ws.Cells(1, 1).Value = Ws.Cells(1, 1).Value & vbNewLine & "ishakkutlu.com" End If Next i End Sub
Yukarıdaki yöntemde, A1 hücresine ilk değer yazılması sırasında satır boşluğu verilmemesi için i=1 iken koşulundan yararlanılmıştır. Döngüde i ifadesi 1’e eşit değilken (Else koşulu içinde) A1 hücresinin değeri ile yeni değer birleştirilmeden önce alt satıra geçiş komutu olan “vbNewLine” ilave edilmiştir.

11. Satır ve Sütun Silmek
Aşağıdaki resimde gösterildiği gibi veri setimiz olduğunu varsayalım.

Belirli bir satırı (örneğin 7 no.lu satırı) aşağıdaki gösterildiği gibi silebiliriz.
Private Sub CommandButton1_Click() Dim Ws As Worksheet Set Ws = ThisWorkbook.Worksheets(1) Ws.Rows(7).EntireRow.Delete End Sub
Sonucu aşağıdaki resimde gösterilmiştir.

Silinmek istenen satırın numarasını doğrudan belirtmek yerine, satırın numarası için bir değişken kullanıyorsanız aşağıdaki yöntemi kullanabilirsiniz.
Private Sub CommandButton1_Click() Dim Ws As Worksheet, i As Long Set Ws = ThisWorkbook.Worksheets(1) i = 7 Ws.Rows(i).EntireRow.Delete End Sub
Aşağıdaki resimde gösterildiği gibi yukarıdakinden farklı bir veri setimiz olduğunu varsayalım.

Yukarıdaki resimde gösterildiği gibi belirli bir satır aralığını (örneğin 7 ile 10 no.lu satır aralığını) silmek için aşağıdaki metot kullanılabilir.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Worksheets(1)
Ws.Rows("7:10").EntireRow.Delete
End SubSonucu aşağıdaki resimde gösterilmiştir.

Silinmek istenen aralıktaki satırların numarasını doğrudan belirtmek yerine, satırların numarası için birer değişken kullanıyorsanız söz konusu işlemi aşağıdaki şekilde yapabilirsiniz.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet, IlkSatir As Long, SonSatir As Long
Set Ws = ThisWorkbook.Worksheets(1)
IlkSatir = 7
SonSatir = 10
Ws.Rows(IlkSatir & ":" & SonSatir).EntireRow.Delete
'Ws.Rows(IlkSatir & ":" & 10).EntireRow.Delete
'Ws.Rows(IlkSatir & ":10").EntireRow.Delete
'Ws.Rows(7 & ":" & SonSatir).EntireRow.Delete
'Ws.Rows("7:" & SonSatir).EntireRow.Delete
End SubSütunların silinmesine ilişkin aşağıdaki yöntemleri inceleyebilirsiniz.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer
Dim StrIlkSutun As String, StrSonSutun As String
Set Ws = ThisWorkbook.Worksheets(1)
Ws.Columns(1).EntireColumn.Delete
'i = 1
'Ws.Columns(i).EntireColumn.Delete
''Sütunların çoklu olarak silinebilmesi için sütun numarası değil, sütun başlığı kullanılır!
'Ws.Columns("A:C").EntireColumn.Delete
'StrIlkSutun = "A"
'StrSonSutun = "B"
'Ws.Columns(StrIlkSutun & ":" & StrSonSutun).EntireColumn.Delete
'Ws.Columns(StrIlkSutun & ":B").EntireColumn.Delete
'Ws.Columns("A:" & StrSonSutun).EntireColumn.Delete
End SubDikkat edilirse çoklu şekilde satır silmek için satır numarası kullanılırken, aynı işlemi sütunlar için yapmak istediğimizde sütun numarası değil, sütun başlıkları kullanılır. Bu durumda sütun numaralarının sütun başlıklarına dönüştürülmesi gerekli olabilir.
12. Sütun Numarasının Sütun Başlığına Dönüştürülmesi
Konuyla ilgili olarak öncelikle, “String-Metin Değişkeni” isimli makalede yer alan Split metodu alt başlığının incelenmesi önerilir.
Sütun numarasının sütun başlığına dönüştürülmesi için aşağıdaki algoritmayı inceleyebilirsiniz. Gerekli tüm açıklamalar kodun içinde yapılmış olup gerekli görürseniz yorum satırı olarak kapatılan satırları açıp algoritmanın işleyiş sürecini analiz edebilirsiniz.
Private Sub CommandButton1_Click() Dim Ws As Worksheet Dim IlkSutun As Long, SonSutun As Long Dim StrIlkSutun As String, StrSonSutun As String Dim Dizi() As String Set Ws = ThisWorkbook.Worksheets(1) IlkSutun = 3 SonSutun = 5 '____Tüm açıklamalar bu bölümdedir ''Aşağıdaki Address metoduna ilişkin yorum satırını kaldırıp sonucunu görmeniz önerilir. 'MsgBox Ws.Cells(1, IlkSutun).Address, vbOKOnly, "ishakkutlu.com" ''Sonuç: $C$1 'Dizi() = Split(Ws.Cells(1, IlkSutun).Address, "$") ''Yukarıdaki dizinin ayracı $ işareti ve girdisi $C$1 olduğu için girdiyi ''Dizi(0)="", Dizi(1)=C, Dizi(2)=1 olmak üzere üç parçaya böler. 'StrIlkSutun = Dizi(1) 'Ayraç $ işareti olduğu için aradığımız daima dizinin 1 no.lu Split değeri olacaktır. 'Yukarıdaki dizi işleminin kısayolu ise şudur: StrIlkSutun = Split(Ws.Cells(1, IlkSutun).Address, "$")(1) 'Yukarıda satırda dizi değişkeni kullanılmadan girdinin 1 no.lu Split değeri, 'doğrudan StrIlkSutun String değişkenine atanmıştır. MsgBox "StrIlkSutun değişkeninin değeri: " & StrIlkSutun, vbOKOnly, "ishakkutlu.com" '___________ 'Yukarıdaki açıklamalara göre SonSutun değişkenininde belirtilen sütun numarasının sütun başlığına dönüştürülmesi StrSonSutun = Split(Ws.Cells(1, SonSutun).Address, "$")(1) MsgBox "StrSonSutun değişkeninin değeri: " & StrSonSutun, vbOKOnly, "ishakkutlu.com" End Sub

13. Sütun Başlığının Sütun Numarasına Dönüştürülmesi
Sütun başlığının sütun numarasına dönüştürülmesi için aşağıdaki algoritmayı inceleyebilirsiniz. Gerekli tüm açıklamalar kodun içinde yapılmış olup gerekli görürseniz yorum satırı olarak kapatılan satırları açıp algoritmanın işleyiş sürecini analiz edebilirsiniz.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet
Dim StrSutunAdi As String, SutunNo As Long
Set Ws = ThisWorkbook.Worksheets(1)
StrSutunAdi = "C"
''Amacımız sütun adını aşağıdaki gibi "C:C" şeklinde ifade etmek.
'MsgBox Range("C:C").Column, vbOKOnly, "ishakkutlu.com" 'Bu satır C sütunun sütun numarasını verir.
StrSutunAdi = StrSutunAdi & ":" & StrSutunAdi '"C:C" oldu
SutunNo = Ws.Range(StrSutunAdi).Column
MsgBox "SutunNo değişkeninin değeri: " & SutunNo, vbOKOnly, "ishakkutlu.com"
End Sub
14. Satır ve Sütun Eklemek
Aşağıdaki resimde gösterildiği gibi veri setimiz olduğunu varsayalım.

Aşağıdaki gösterildiği gibi araya (örneğin 7 no.lu satırın konumuna) satır ekleyebiliriz.
Private Sub CommandButton1_Click() Dim Ws As Worksheet Set Ws = ThisWorkbook.Worksheets(1) Ws.Rows(7).EntireRow.Insert End Sub

Eğer satır numarası için bir değişken kullanıyorsanız aşağıdaki yöntemi kullanabilirsiniz.
Private Sub CommandButton1_Click() Dim Ws As Worksheet, i As Long Set Ws = ThisWorkbook.Worksheets(1) i = 7 Ws.Rows(i).EntireRow.Insert End Sub
Bir aralığa birden fazla satır eklemek için aşağıdaki yöntemleri inceleyebilirsiniz.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet, IlkSatir As Integer, SonSatir As Integer
Set Ws = ThisWorkbook.Worksheets(1)
'IlkSatir = 7
'SonSatir = 10
Ws.Rows("7:10").EntireRow.Insert '4 satır ekler
'Ws.Rows(IlkSatir & ":" & SonSatir).EntireRow.Insert
'Ws.Rows(IlkSatir & ":" & 10).EntireRow.Insert
'Ws.Rows(IlkSatir & ":10").EntireRow.Insert
'Ws.Rows(7 & ":" & SonSatir).EntireRow.Insert
'Ws.Rows("7:" & SonSatir).EntireRow.Insert
End SubSütunların eklenmesine ilişkin aşağıdaki yöntemleri inceleyebilirsiniz.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer
Dim StrIlkSutun As String, StrSonSutun As String
Set Ws = ThisWorkbook.Worksheets(1)
Ws.Columns(1).EntireColumn.Insert
'i = 1
'Ws.Columns(i).EntireColumn.Insert
''Sütunların çoklu olarak eklenebilmesi için sütun numarası değil, sütun başlığı kullanılır!
'Ws.Columns("A:C").EntireColumn.Insert
'StrIlkSutun = "A"
'StrSonSutun = "B"
'Ws.Columns(StrIlkSutun & ":" & StrSonSutun).EntireColumn.Insert
'Ws.Columns(StrIlkSutun & ":B").EntireColumn.Insert
'Ws.Columns("A:" & StrSonSutun).EntireColumn.Insert
End Sub15. Satır ve Sütun Gizlemek/Göstermek
Satır ve sütunları gizlemek/göstermek için aşağıdaki kodları inceleyebilirsiniz.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer
Dim StrIlkSutun As String, StrSonSutun As String
Dim IlkSatir As Long, SonSatir As Long
Set Ws = ThisWorkbook.Worksheets(1)
'SATIRLARIN GİZLENMESİ/GÖSTERİLMESİ
Ws.Rows(4).EntireRow.Hidden = False '4 no.lu satırı gösterir
Ws.Rows(7).EntireRow.Hidden = True '7 no.lu satırı gizler
'IlkSatir = 7
'SonSatir = 10
'Ws.Rows("7:10").EntireRow.Hidden = True '4 satırı birden gizler
'Ws.Rows(IlkSatir & ":" & SonSatir).EntireRow.Hidden = False
'Ws.Rows(IlkSatir & ":" & 10).EntireRow.Hidden = False
'Ws.Rows(IlkSatir & ":10").EntireRow.Hidden = False
'Ws.Rows(7 & ":" & SonSatir).EntireRow.Hidden = False
'Ws.Rows("7:" & SonSatir).EntireRow.Hidden = False
'SÜTUNLARIN GİZLENMESİ/GÖSTERİLMESİ
Ws.Columns(1).EntireColumn.Hidden = False 'Sütun Gösterir
Ws.Columns(2).EntireColumn.Hidden = True 'Sütun Gizler
'i = 1
'Ws.Columns(i).EntireColumn.Hidden = True 'Gizler
'Ws.Columns("A").EntireColumn.Hidden = False 'Gösterir
'Ws.Columns("B").EntireColumn.Hidden = True 'Gizler
''Sütunların çoklu olarak gizlenmesi/gösterilmesi için sütun numarası değil, sütun başlığı kullanılır!
'Ws.Columns("A:C").EntireColumn.Hidden = True
'StrIlkSutun = "A"
'StrSonSutun = "B"
'Ws.Columns(StrIlkSutun & ":" & StrSonSutun).EntireColumn.Hidden = True
'Ws.Columns(StrIlkSutun & ":B").EntireColumn.Hidden = True
'Ws.Columns("A:" & StrSonSutun).EntireColumn.Hidden = True
End Sub16. Satır Yüksekliği ve Sütun Genişliği
Satır yüksekliğini ve sütun genişliğini ayarlamak için aşağıdaki kodları inceleyebilirsiniz.
Private Sub CommandButton1_Click()
Dim Ws As Worksheet, i As Integer
Dim StrIlkSutun As String, StrSonSutun As String
Dim IlkSatir As Long, SonSatir As Long
Set Ws = ThisWorkbook.Worksheets(1)
'SATIR YÜKSEKLİĞİ
Ws.Rows(1).RowHeight = 25 'yükseklik 25 birim
'Ws.Rows(1).EntireRow.RowHeight = 25 'yukarıdaki satır bu şekilde de yazılabilir.
'Ws.Range("A1").EntireRow.RowHeight = 25 'ilk satır ile aynı sonucu verir. EntireRow ifadesi olmak ZORUNDADIR.
'Satırdaki veriye göre yüksekliği OTOMATİK ayarlar
'Ws.Rows(1).EntireRow.AutoFit
'IlkSatir = 7
'SonSatir = 10
'Ws.Rows("7:10").RowHeight = 25
'Ws.Rows(IlkSatir & ":" & SonSatir).RowHeight = 25
'Ws.Rows(IlkSatir & ":" & 10).RowHeight = 25
'Ws.Rows(IlkSatir & ":10").RowHeight = 25
'Ws.Rows(7 & ":" & SonSatir).RowHeight = 25
'Ws.Rows("7:" & SonSatir).RowHeight = 25
''SÜTUN GENİŞLİĞİ
Ws.Columns(1).ColumnWidth = 40 'genişlik 40 birim
'Ws.Columns(1).EntireColumn.ColumnWidth = 40 'yukarıdaki satır bu şekilde de yazılabilir.
'Ws.Range("A1").EntireColumn.ColumnWidth = 40 'ilk satır ile aynı sonucu verir. EntireColumn ifadesi olmak ZORUNDADIR.
'Kolondaki veriye göre genişliği OTOMATİK ayarlar
'Ws.Columns(1).EntireColumn.AutoFit
'i = 1
'Ws.Columns(i).ColumnWidth = 40
'Ws.Columns("A").ColumnWidth = 40
''Sütunların genişliğinin çoklu olarak ayarlanması için sütun numarası değil, sütun başlığı kullanılır!
'Ws.Columns("A:C").ColumnWidth = 40
'StrIlkSutun = "A"
'StrSonSutun = "B"
'Ws.Columns(StrIlkSutun & ":" & StrSonSutun).ColumnWidth = 40
'Ws.Columns(StrIlkSutun & ":B").ColumnWidth = 40
'Ws.Columns("A:" & StrSonSutun).ColumnWidth = 40
End SubYukarıdaki prosedürde Rows veya Columns metodu yerine, Range metodunun kullanımına dikkat ediniz. Range metodunu yukarıdaki mantığa uygun olarak gizleme/gösterme, ekleme/silme vb. satır ve sütun yönetiminde de kullanabilirsiniz. Ayrıca satır ve sütun genişliklerinin otomatik olarak ayarlanmasına ilişkin bölüm de önceki (satır ve sütun gizleme/gösterme, ekleme/silme vb.) prosedürlerden farklıdır.
İshak Kutlu, VBA Notları
