Bu makale, Excel VBA'da Dinamik Aralık oluşturmayı gösterecektir.
Excel VBA'da belirli bir hücre aralığını değişken olarak bildirmek, yalnızca bu belirli hücrelerle çalışmamızı sınırlar. Excel'de Dinamik Aralıklar bildirerek, kodumuz ve gerçekleştirebileceği işlevsellik konusunda çok daha fazla esneklik kazanırız.
Aralıkları ve Hücreleri Referans Alma
Excel'de Range veya Cell nesnesine başvurduğumuzda, normalde ihtiyacımız olan satır ve sütunlarda sabit kodlama yaparak bunlara başvururuz.
Aralık Özelliği
Aşağıdaki örnek kod satırlarında Range Özelliğini kullanarak bu aralık üzerinde hücrelerin rengini değiştirme, hücreleri kalınlaştırma gibi işlemleri gerçekleştirebiliriz.
12 | Range("A1:A5").Font.Color = vbRedRange("A1:A5").Font.Bold = True |
Hücreler Özellik
Benzer şekilde, hücreler özelliğindeki satır ve sütuna doğrudan başvurarak bir hücre aralığına başvurmak için Hücreler Özelliğini kullanabiliriz. Satır her zaman bir sayı olmalıdır, ancak sütun bir sayı olabilir veya tırnak içine alınmış bir harf olabilir.
Örneğin, A1 hücre adresine şu şekilde başvurulabilir:
1 | Hücreler(1,1) |
Veya
1 | Hücreler(1, "A") |
Bir hücre aralığına başvuruda bulunmak üzere Hücreler Özelliğini kullanmak için aralığın başlangıcını ve aralığın sonunu belirtmemiz gerekir.
Örneğin, A1: A6 referans aralığı için aşağıdaki sözdizimini kullanabiliriz:
1 | Aralık(Hücreler(1,1)), Hücreler(1,6) |
Ardından, aşağıdaki örnek kod satırlarına göre aralıkta eylemler gerçekleştirmek için Cells özelliğini kullanabiliriz:
12 | Aralık(Hücreler(2, 2)), Hücreler(6, 2)).Font.Color = vbRedAralık(Hücreler(2, 2), Hücreler(6, 2)).Font.Bold = True |
Değişkenlerle Dinamik Aralıklar
Excel'de verilerimizin boyutu değiştikçe (yani kodladığımız aralıklardan daha fazla satır ve sütun kullanıyoruz), kodumuzda atıfta bulunduğumuz aralıkların da değişmesi faydalı olacaktır. Yukarıdaki Range nesnesini kullanarak, kullandığımız Excel çalışma sayfasının alanının maksimum satır ve sütun numaralarını depolamak için değişkenler oluşturabilir ve bu değişkenleri, kod çalışırken Range nesnesini dinamik olarak ayarlamak için kullanabiliriz.
Örneğin
1234 | lRow'u tamsayı olarak karartTamsayı olarak Dim lCollRow = Aralık("A1048576").End(xlUp).SatırlCol = Aralık("XFD1").End(xlToLeft).Column |
Sütundaki Son Satır
Bir çalışma sayfasında 1048576 satır olduğundan, lRow değişkeni sayfanın altına gidecek ve ardından çalışma sayfasında kullanılan son satıra gitmek için End tuşu ile Yukarı Ok tuşunun özel kombinasyonunu kullanacaktır - bu bize aralığımızda ihtiyacımız olan satır sayısı.
Satırdaki Son Sütun
Benzer şekilde, lCol, bir çalışma sayfasındaki son sütun olan XFD Sütunu'na hareket edecek ve ardından çalışma sayfasında kullanılan son sütuna gitmek için End tuşu ile Sol Ok tuşunun özel tuş kombinasyonunu kullanacaktır - bu bize Aralığımızda ihtiyacımız olan sütun sayısı.
Bu nedenle, çalışma sayfasında kullanılan tüm aralığı elde etmek için aşağıdaki kodu çalıştırabiliriz:
1234567891011 | Alt GetRange()lRow As IntegerTamsayı Olarak Dim lColAralık Olarak KarartmalRow = Aralık("A1048576").End(xlUp).Satır'aralıktaki son sütunu bulmaya yardımcı olması için lRow'u kullanınlCol = Aralık("XFD" & lRow).End(xlToLeft).ColumnSet rng = Aralık(Hücreler(1, 1), Hücreler(lSatır, lCol))'msgbox bize aralığı göstermek içinMsgBox "Aralık" & rng.AdresAlt Bitiş |
Özel Hücreler - LastCell
Bir Çalışma Sayfasında kullanılan son satırı ve sütunu almak için Range Object'in SpecialCells yöntemini de kullanabiliriz.
123456789101112 | Alt KullanımÖzelHücreler()lRow As IntegerTamsayı Olarak Dim lColAralık Olarak KarartmaDim rng Aralık Olarak BaşlarngBegin = Aralık ("A1") olarak ayarlalRow = rngBegin.SpecialCells(xlCellTypeLastCell).RowlCol = rngBegin.SpecialCells(xlCellTypeLastCell).ColumnSet rng = Aralık(Hücreler(1, 1), Hücreler(lSatır, lCol))'msgbox bize aralığı göstermek içinMsgBox "Aralık" & rng.AdresAlt Bitiş |
KullanılanAralık
Kullanılan Aralık Yöntemi, geçerli çalışma sayfasında değerleri olan tüm hücreleri içerir.
123456 | Alt KullanılanAralıkÖrnek()Aralık Olarak KarartmaSet rng = ActiveSheet.UsedRange'msgbox bize aralığı göstermek içinMsgBox "Aralık" & rng.AdresAlt Bitiş |
Geçerli Bölge
Geçerli bölge, bir başlangıç aralığı olarak bildirdiğimiz (yani aşağıdaki örnekte rngBegin değişkeni) bir hücreyi çevreleyen hücrelere bakması ve ardından 'bağlı' veya ilişkili tüm hücrelere bakması bakımından UseRange'dan farklıdır. o beyan edilen hücreye. Bir satırda veya sütunda boş bir hücre oluşursa, CurrentRegion başka hücre aramayı durduracaktır.
12345678 | Sub CurrentRegion()Aralık Olarak KarartmaDim rng Aralık Olarak BaşlarngBegin = Aralık ("A1") olarak ayarlarng = rngBegin.CurrentRegion olarak ayarlayın'msgbox bize aralığı göstermek içinMsgBox "Aralık" & rng.AdresAlt Bitiş |
Bu yöntemi kullanırsak, ihtiyacınız olan aralıktaki tüm hücrelerin aralarında boş satır veya sütun olmadan birbirine bağlı olduğundan emin olmamız gerekir.
Adlandırılmış Aralık
Kodumuzda Adlandırılmış Aralıklara da başvurabiliriz. Adlandırılmış Aralıklar, veriler güncellendiğinde veya eklendiğinde, Aralık Adı yeni verileri içerecek şekilde değişebildiği sürece dinamik olabilir.
Bu örnek, "Ocak" aralık adı için yazı tipini kalın olarak değiştirecektir.
12345 | Alt AralıkAdıÖrnek()Aralık olarak karartmaSet rng = Aralık ("Ocak")rng.Font.Bold = = DoğruAlt Bitiş |
Aşağıdaki resimde göreceğiniz gibi, aralık adına bir satır eklenirse, aralık adı o satırı içerecek şekilde otomatik olarak güncellenir.
Daha sonra örnek kodu tekrar çalıştırırsak, kodun etkilediği aralık C5:C9 olurken, ilk durumda C5:C8 olurdu.
Tablolar
Kodumuzda tablolara referans verebiliriz (VBA'da tablo oluşturma ve işleme hakkında daha fazla bilgi için tıklayın). Excel'deki bir tablo verileri güncellendiğinde veya değiştirildiğinde, tabloya başvuran kod, güncellenmiş tablo verilerine atıfta bulunacaktır. Bu, özellikle harici bir veri kaynağına bağlı Pivot tablolarına başvururken kullanışlıdır.
Kodumuzda bu tabloyu kullanarak, tablonun sütunlarına her sütundaki başlıklara göre başvurabilir ve ismine göre sütun üzerinde işlemler gerçekleştirebiliriz. Tablodaki satırlar verilere göre arttıkça veya azaldıkça, tablo aralığı buna göre ayarlanacak ve kodumuz tablodaki tüm sütun için çalışmaya devam edecektir.
Örneğin:
123 | Alt DeleteTableColumn()ActiveWorkbook.Worksheets("Sayfa1").ListObjects("Tablo1").ListColumns("Tedarikçi").DeleteAlt Bitiş |