VBA'da Aralıklar ve Hücreler
Excel elektronik tabloları, verileri Hücrelerde depolar. Hücreler, Satırlar ve Sütunlar halinde düzenlenir. Her hücre, satırının ve sütununun kesişme noktası ile tanımlanabilir (Örn. B3 veya R3C2).
Bir Excel Aralığı, bir veya daha fazla hücreye atıfta bulunur (ör. A3:B4)
Hücre Adresi
A1 Notasyonu
A1 notasyonunda, bir hücreye sütun harfi (A'dan XFD'ye) ve ardından satır numarası (1'den 1.048.576'ya kadar) ile başvurulur.
VBA'da, kullanarak herhangi bir hücreye başvurabilirsiniz. Menzil Nesnesi.
123456789 | ' Şu anda etkin olan sayfada B4 hücresine bakınMsgBox Aralığı ("B4")'Veri' adlı sayfada B4 hücresine bakınMsgBox Çalışma Sayfaları("Veri").Range("B4")' Başka bir AÇIK çalışma kitabında 'Veri' adlı sayfada B4 hücresine bakın' adlı 'Verilerim'MsgBox Çalışma Kitapları("Verilerim").Çalışma Sayfaları("Veri").Range("B4") |
R1C1 Notasyonu
R1C1 Notasyonunda bir hücreye R, ardından Satır Numarası, ardından 'C' harfi ve ardından Sütun Numarası gelir. örneğin, R1C1 notasyonundaki B4, R4C2 ile anılacaktır. VBA'da şunları kullanırsınız: Hücreler Nesne R1C1 gösterimini kullanmak için:
12 | ' R[6]C[4] hücresine bakın, yani D6Hücreler(6, 4) = "D6" |
Hücre Aralığı
A1 Notasyonu
Birden fazla hücreye atıfta bulunmak için, başlangıç hücre adresi ile son hücre adresi arasında bir “:” kullanın. Aşağıdakiler, A1'den D10'a kadar olan tüm hücrelere atıfta bulunacaktır:
1 | Aralık("A1:D10") |
R1C1 Notasyonu
Birden fazla hücreye atıfta bulunmak için, başlangıç hücre adresi ile son hücre adresi arasında bir “,” kullanın. Aşağıdakiler, A1'den D10'a kadar olan tüm hücrelere atıfta bulunacaktır:
1 | Aralık(Hücreler(1, 1), Hücreler(10, 4)) |
Hücrelere Yazma
Bir hücreye veya bitişik hücre grubuna değer yazmak için, aralığa bakın, bir = işareti koyun ve ardından saklanacak değeri yazın:
12345678910 | ' F5'i F6 Adresli hücrede saklayınAralık("F6") = "F6"' E6'yı Adres R[6]C[5] olan hücrede, yani E6'da saklayınHücreler(6, 5) = "E6"A1:D10'u A1:D10 aralığında saklayınAralık("A1:D10") = "A1:D10"' veyaAralık(Hücreler(1, 1), Hücreler(10, 4)) = "A1:D10" |
Hücrelerden Okuma
Hücrelerden değerleri okumak için, değerleri saklamak için değişkene bakın, bir = işareti koyun ve ardından okunacak aralığa bakın:
1234567891011 | karartma val1karartma val2' F6 hücresinden okuval1 = Aralık("F6")' E6 hücresinden okuval2 = Hücreler(6, 5)MsgBox val1mesaj kutusu val2 |
Not: Bir hücre aralığındaki değerleri depolamak için basit bir değişken yerine bir Array kullanmanız gerekir.
Bitişik Olmayan Hücreler
Bitişik olmayan hücrelere atıfta bulunmak için hücre adresleri arasında virgül kullanın:
123456 | 10'u A1, A3 ve A5 hücrelerinde saklayınAralık("A1,A3,A5") = 1010'u A1:A3 ve D1:D3) hücrelerinde saklayınAralık("A1:A3, D1:D3") = 10 |
Hücrelerin Kesişimi
Bitişik olmayan hücrelere atıfta bulunmak için hücre adresleri arasında bir boşluk kullanın:
123 | 'Col D'yi D1:D10'da saklayın' A1:D10 ve D1:F10 arasında Ortak olanAralık("A1:D10 D1:G10") = "Soğut D" |
Hücreden veya Aralıktan Uzaklaştırma
Ofset işlevini kullanarak, referansı belirli bir Aralıktan (hücre veya hücre grubu) belirtilen satır_sayısı ve_sütun_sayısı ile taşıyabilirsiniz.
Ofset Sözdizimi
Range.Offset(satır_sayısı, sütun_sayısı)
Bir hücreden ofset
12345678910111213141516 | ' A1 hücresinden OFFSET' Hücrenin kendisine bakın' 0 satır ve 0 sütun taşıAralık("A1").Offset(0, 0) = "A1"' 1 satır ve 0 sütun taşıAralık("A1").Offset(1, 0) = "A2"' 0 satır ve 1 sütun taşıAralık("A1").Offset(0, 1) = "B1"' 1 satır ve 1 sütun taşıAralık("A1").Offset(1, 1) = "B2"' 10 satır ve 5 sütun taşıAralık("A1").Offset(10, 5) = "F11" |
Aralıktan Ofset
123 | Referansı A1:D4 Aralığına 4 satır ve 4 sütunla taşı' Yeni Referans E5:H8Aralık("A1:D4").Offset(4,4) = "E5:H8" |
Bir Aralığa Referans Ayarlama
Bir aralık değişkenine bir aralık atamak için: Range türünde bir değişken tanımlayın ve ardından bunu bir aralığa ayarlamak için Set komutunu kullanın. RANGE bir nesne olduğu için SET komutunu kullanmanız gerektiğini lütfen unutmayın:
12345678 | ' Bir Aralık değişkeni bildirAralık olarak myRange'i karart' Değişkeni A1:D4 aralığına ayarlayınmyRange = Aralık ("A1:D4") olarak ayarla' $A$1:$D$4 yazdırırMsgBox myRange.Address |
Bir Aralığı Yeniden Boyutlandır
Range nesnesinin yeniden boyutlandırma yöntemi, referans aralığının boyutunu değiştirir:
1234567 | Aralık olarak myRange'ı karart' Yeniden Boyutlandırılacak AralıkmyRange = Aralık ("A1:F4") olarak ayarlayın' $A$1:$E$10 yazdırırDebug.Print myRange.Resize(10, 5).Adres |
Yeniden Boyutlandırılan aralığın sol üst hücresi, orijinal aralığın sol üst hücresiyle aynı
Sözdizimini Yeniden Boyutlandır
Range.Resize(satır_sayısı, sütun_sayısı)
OFFSET ve Yeniden Boyutlandırma
Ofset, aralığın boyutlarını değiştirmez, ancak belirtilen satır ve sütun sayısı kadar hareket ettirir. Yeniden boyutlandırma, orijinal aralığın konumunu değiştirmez, ancak boyutları belirtilen satır ve sütun sayısına göre değiştirir.
Sayfadaki Tüm Hücreler
Cells nesnesi, sayfadaki tüm hücrelere başvurur (1048576 satır ve 16384 sütun).
12 | ' Çalışma Sayfalarındaki Tüm Hücreleri TemizleHücreler.Temizle |
KullanılanAralık
UseRange özelliği, sol üstte kullanılan hücreden etkin sayfanın sağ altta kullanılan hücresine kadar olan dikdörtgen aralığını verir.
1234567 | Dim ws As Çalışma Sayfasıws = ActiveSheet'i ayarla' $B$2:$L$14 L2 herhangi bir değere sahip ilk hücre ise' ve L14, üzerinde herhangi bir değere sahip son hücredir.' etkin sayfaDebug.Print ws.UsedRange.Address |
Geçerli Bölge
CurrentRegion özelliği, size sol üstteki hücreden sağ altta kullanılan ve başvurulan hücreyi/aralığı içeren hücreye bitişik dikdörtgen aralığı verir.
1234567891011 | Aralık olarak myRange'ı karartmyRange = Aralık ("D4:F6") olarak ayarlayın' Baskılar $B$2:$L$14' D4:F16'dan B2 AND L14'e dolu bir yol varsaDebug.Print myRange.CurrentRegion.Address' Tek bir başlangıç hücresine de başvurabilirsiniz.Set myRange = Range("D4") ' $B$2:$L$14 yazdırır |
Aralık Özellikleri
Bir hücrenin Adresini, satır/sütun sayısını ve bir aralıktaki satır/sütun sayısını aşağıdaki gibi alabilirsiniz:
123456789101112131415161718192021 | Aralık olarak myRange'ı karartmyRange = Aralık ("A1:F10") olarak ayarlayın' $A$1:$F$10 yazdırırDebug.MyRange.Address'i yazdırmyRange = Aralık ("F10") olarak ayarlayın' Satır 10 için 10 yazdırırDebug.Print myRange.Row' Sütun F için 6 yazdırırDebug.Print myRange.ColumnmyRange = Aralık ("E1:F5") olarak ayarlayın' Aralıktaki Satır sayısı için 5 yazdırırDebug.Print myRange.Rows.Count' Aralıktaki Sütun sayısı için 2 yazdırırDebug.Print myRange.Columns.Count |
Sayfadaki Son Hücre
Kullanabilirsiniz Satırlar.Sayı ve Sütunlar.Sayı ile özellikleri hücreler sayfadaki son hücreyi almak için nesne:
1234567891011 | ' Son satır numarasını yazdır' 1048576 yazdırırDebug.Print "Sayfadaki satırlar: " & Rows.Count' Son sütun numarasını yazdır' 16384 yazdırırDebug.Print "Sayfadaki Sütunlar: " & Columns.Count' Son hücrenin adresini yazdır' $XFD$1048576 yazdırırDebug.Print "Sayfadaki Son Hücrenin Adresi: " & Cells(Rows.Count, Columns.Count) |
Bir Sütunda Son Kullanılan Satır Numarası
END özelliği sizi aralıktaki son hücreye götürür ve End(xlUp) sizi o hücreden ilk kullanılan hücreye götürür.
123 | LastRow As Long olarak karartlastRow = Cells(Rows.Count, "A").End(xlUp).Row |
Bir Satırda Son Kullanılan Sütun Numarası
123 | Dim lastCol As LonglastCol = Cells(1, Columns.Count).End(xlToLeft).Column |
END özelliği sizi aralıktaki son hücreye götürür ve End(xlToLeft) sizi o hücreden ilk kullanılan hücreye bırakır.
Geçerli hücrenin ilk alt veya sağ kullanılan hücrelerine gitmek için xlDown ve xlToRight özelliklerini de kullanabilirsiniz.
Hücre Özellikleri
Ortak Özellikler
İşte yaygın olarak kullanılan Hücre Özelliklerini görüntülemek için kod
12345678910111213141516171819202122 | Aralık olarak hücreyi karartHücreyi ayarla = Aralık ("A1")hücre.EtkinleştirHata ayıklama.Hücreyi yazdır.Adres' $A$1 yazdırHata ayıklama.Hücreyi yazdır.Değer' 456 yazdırır' AdresHata ayıklama.Hücreyi yazdır.Formül' Baskılar =TOPLA(C2:C3)' Yorum YapDebug.Print cell.Comment.Text'tarzHata ayıklama.Hücreyi yazdır.Stil' Hücre BiçimiHata ayıklama.Hücreyi yazdır.DisplayFormat.NumberFormat |
Hücre Yazı Tipi
Cell.Font nesnesi, Hücre Yazı Tipinin özelliklerini içerir:
1234567891011121314151617181920 | Aralık olarak hücreyi karartHücreyi ayarla = Aralık ("A1")' Normal, İtalik, Kalın ve Kalın İtalikcell.Font.FontStyle = "Kalın İtalik"' İle aynıcell.Font.Bold = Doğrucell.Font.İtalik = DoğruYazı tipini Courier olarak ayarlacell.Font.FontStyle = "Kurye"' Yazı Tipi Rengini Ayarlacell.Font.Color = vbBlue' veyacell.Font.Color = RGB(255, 0, 0)' Yazı Tipi Boyutunu Ayarlacell.Font.Size = 20 |
Kopyala ve yapıştır
Tümünü Yapıştır
Aralıklar/Hücreler bir konumdan diğerine kopyalanabilir ve yapıştırılabilir. Aşağıdaki kod, kaynak aralığın tüm özelliklerini hedef aralığa kopyalar (CTRL-C ve CTRL-V'ye eşdeğerdir)
1234567 | 'Basit KopyaAralık("A1:D20").KopyalaÇalışma Sayfaları("Sayfa2").Aralık("B10").Yapıştır'veya' Geçerli Sayfadan 'Sayfa2' adlı sayfaya kopyalayınRange("A1:D20").Kopyalama hedefi:=Çalışma Sayfaları("Sayfa2").Range("B10") |
Özel yapıştır
Kaynak aralığının seçilen özellikleri, PASTESPECIAL seçeneği kullanılarak hedefe kopyalanabilir:
123 | ' Aralığı yalnızca Değerler olarak yapıştırınAralık("A1:D20").KopyalaWorksheets("Sayfa2").Range("B10").PasteSpecial Paste:=xlPasteValues |
Yapıştır seçeneği için olası seçenekler şunlardır:
12345678910111213 | ' Özel Tipleri YapıştırxlYapıştırTümüxlPasteAllExceptSınırlarxlPasteAllMergingKoşullu BiçimlerxlPasteAllUsingSourceThemexlPasteColumnWidthsxlYapıştırYorumlarxlYapıştırBiçimlerixlYapıştırFormüllerxlYapıştırFormüllerVeSayıBiçimlerixlPasteValidationxlPasteValuesxlPasteValuesAndNumberFormats |
Otomatik Sığdır İçindekiler
Satırların ve sütunların boyutu, aşağıdaki kod kullanılarak içeriğe uyacak şekilde değiştirilebilir:
12345 | ' İçeriğe sığdırmak için 1'den 5'e kadar olan satırların boyutunu değiştirinSatırlar("1:5").Otomatik Sığdırİçeriğe sığdırmak için Sütun A'nın boyutunu B'ye değiştirinSütunlar("A:B").Otomatik Sığdır |
Daha Fazla Aralık Örneği
GUI üzerinden gerekli eylemi gerçekleştirirken Makro Kaydedici kullanmanız önerilir. Mevcut çeşitli seçenekleri ve bunların nasıl kullanılacağını anlamanıza yardımcı olacaktır.
Her biri için
kullanarak bir aralıkta dolaşmak daha kolaydır Her biri için aşağıda gösterildiği gibi inşa edin:
123 | Aralıktaki Her Hücre İçin("A1:B100")' Hücreyle bir şeyler yapSonraki hücre |
Döngünün her yinelemesinde, aralıktaki bir hücre c değişkenine atanır ve For döngüsündeki ifadeler o hücre için yürütülür. Tüm hücreler işlendiğinde döngüden çıkar.
Çeşit
Sıralama, Range nesnesinin bir yöntemidir. Range.Sort'a göre sıralama seçeneklerini belirleyerek bir aralığı sıralayabilirsiniz. Aşağıdaki kod, A:C sütunlarını C2 hücresindeki anahtara göre sıralayacaktır. Sıralama Düzeni xlArtan veya xlAzalan olabilir. Başlık:= xlYes, eğer ilk satır başlık satırı ise kullanılmalıdır.
12 | Columns("A:C").Sort key1:=Range("C2"), _order1:=xlArtan, Başlık:=xlEvet |
Bulmak
Find ayrıca bir Range Object yöntemidir. Arama kriterleriyle eşleşen içeriğe sahip ilk hücreyi bulur ve hücreyi Range nesnesi olarak döndürür. geri döner Hiçbir şey değil maç yoksa.
Kullanmak Sonraki Bul sonraki (önceki) oluşumu bulmak için yöntem (veya FindPrevious).
Aşağıdaki kod, aralıktaki "John" ile başlayan tüm hücreler için yazı tipini "Arial Black" olarak değiştirecektir:
12345 | Aralıktaki Her c İçin("A1:A100")Eğer c "John*" gibiyse O zamanc.Font.Name = "Arial Siyah"Bitirsonraki c |
Aşağıdaki kod, belirtilen aralıkta "Test Edilecek" ifadesinin tüm tekrarlarını "Geçti" olarak değiştirecektir:
12345678910 | Aralık ile ("a1:a500")Set c = .Find("Test Edilecek", LookIn:=xlValues)c Değilse Hiçbir Şey Değilseilkadres = c.AdresYapmakc.Value = "Geçti"c = .FindNext(c) olarak ayarlaC Değilken Döngü Hiçbir Şey Değildir ve c.Adres ilkadresBitirİle bitmek |
FindNext'i kullanmak için bir aralık belirtmeniz gerektiğini unutmamak önemlidir. Ayrıca bir durdurma koşulu sağlamalısınız, aksi takdirde döngü sonsuza kadar çalışacaktır. Normalde bulunan ilk hücrenin adresi bir değişkende saklanır ve o hücreye tekrar ulaştığınızda döngü durur. Döngüyü durduracak hiçbir şey bulunmadığında da durumu kontrol etmelisiniz.
Aralık Adresi
Adresi A1 Stilinde almak için Range.Address kullanın
123 | MsgBox Aralığı ("A1:D10").Adres' veyaDebug.Print Range("A1:D10").Adres |
Adresleri R1C1 stilinde almak için xlReferenceStyle (varsayılan xlA1) kullanın
123 | MsgBox Aralığı("A1:D10").Adres(ReferenceStyle:=xlR1C1)' veyaDebug.Print Range("A1:D10").Address(ReferenceStyle:=xlR1C1) |
Bu, değişkenlerde saklanan aralıklarla ilgilendiğinizde ve yalnızca belirli adresler için işlem yapmak istediğinizde kullanışlıdır.
Dizi Aralığı
Bir aralığı bir diziye aktarmak ve ardından değerleri işlemek daha hızlı ve kolaydır. Dizideki aralığı doldurmak için gereken boyutu hesaplamaktan kaçınmak için diziyi Variant olarak bildirmelisiniz. Dizinin boyutları, aralıktaki değerlerin sayısıyla eşleşecek şekilde ayarlanır.
123456789 | Dim DirArray Varyant Olarak' Aralıktaki değerleri Dizi'ye saklayınDirArray = Aralık("a1:a5").ValueDeğerleri işlemek için döngüDirArray'deki Her c İçinHata ayıklama.Yazdır cSonraki |
Aralığa Dizi
İşlemden sonra Diziyi bir Aralığa geri yazabilirsiniz. Yukarıdaki örnekteki Diziyi bir Aralığa yazmak için, boyutu Dizideki öğe sayısıyla eşleşen bir Aralık belirtmelisiniz.
Diziyi D1:D5 aralığına yazmak için aşağıdaki kodu kullanın:
123 | Range("D1:D5").Value = DiziArrayRange("D1:H1").Value = Application.Transpose(DirArray) |
Bir satıra yazarsanız, Diziyi Transpoze etmeniz gerektiğini lütfen unutmayın.
Toplam aralığı
12 | SumOfRange = Application.WorksheetFunction.Sum(Range("A1:A10"))Debug.Print SumOfRange |
Application.WorkSheetFunction belirterek VBA kodunuzda Excel'de bulunan birçok işlevi kullanabilirsiniz. Yukarıdaki örnekte olduğu gibi İşlev Adından önce.
Sayı Aralığı
1234567 | ' Aralıktaki Sayılarla Hücre Sayısını SayCountOfCells = Application.WorksheetFunction.Count(Range("A1:A10"))Debug.Print CountOfCellsAralıktaki Boş Olmayan Hücrelerin SayısıCountOfNonBlankCells = Application.WorksheetFunction.CountA(Range("A1:A10"))Debug.Print CountOfNonBlankCells |
Yazan: Vinamra Chandra