Excel VBA Aralıkları ve Hücreleri

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

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave