Range Nesnesi-1

R

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 Sub

Sonucun 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 Sub

Yukarı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 Sub

Yukarı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 Sub

2.  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 Sub

Yukarı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 Sub

Sonucu 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 Sub

Sü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 Sub

Dikkat 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 Sub

Sü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 Sub

15.  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 Sub

16.  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 Sub

Yukarı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ı

Yorum Yap

İshak Kutlu

Veri & Otomasyon Uzmanı

Kurumsal iş akışlarını düzenleyen veri odaklı otomasyon sistemleri ve makine öğrenmesi tabanlı çözümler geliştirir. Gerçek operasyonel süreçler için ölçeklenebilir ve izlenebilir yapılar tasarlar.

YouTube   YouTube   YouTube   YouTube