VBA Dinamik Aralık

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ş
wave wave wave wave wave