Özellik ikonu

Range

İndirme izni yok

Genel Bakış

Range (Range object), bir çalışma sayfasındaki tek bir hücreyi, bir hücre bloğunu, satır ya da sütunları, hatta birbirinden ayrı birden çok alanı temsil eden nesnedir. VBA ile sayfaya değer yazmak, formül girmek, biçim vermek, kopyalamak, sıralamak ve veri okumak gibi hemen her işlem bu nesne üzerinden yapılır. Excel nesne modelinde en çok kullanılan nesne olduğu için VBA öğrenirken ilk iyi tanımanız gereken yapıdır.

Söz dizimi​

Range aslında bir nesne türünün adıdır; ona çoğunlukla Worksheet nesnesinin Range özelliği ile ulaşırsınız. Özellik, bir Range nesnesi döndürür.

VBA
Worksheets("Sayfa1").Range(Cell1, Cell2)

  • Cell1: Zorunludur. Aralığı belirten adres metni ("A1", "B2:D10", "A1:A5,C1:C5"), tanımlı ad ya da bir Range nesnesidir.
  • Cell2: İsteğe bağlıdır; varsayılanı yoktur ve verilmezse yalnız Cell1 kullanılır. Verilirse Cell1 ile Cell2 arasındaki dikdörtgen alan seçilir. İki argüman da hücre başvurusu olmalıdır; örneğin Range(Cells(1, 1), Cells(5, 3)) A1:C5 aralığını verir.

Başına sayfa nesnesi yazmazsanız, kod standart modüldeyse etkin sayfa, sayfa modülündeyse o sayfa kullanılır. Hata riskini azaltmak için sayfayı her zaman açıkça belirtmeniz önerilir.

Range nesnesine ulaşmanın yolları​

Aynı hücreye farklı yollarla ulaşabilirsiniz; hangisini seçeceğiniz senaryoya bağlıdır:

VBA 8 satır
ws.Range("B2")           ' adresle
ws.Range("Satislar")      ' tanımlı adla
ws.Cells(2, 2)          ' satır ve sütun numarasıyla
ws.Range("A2:C" & son)  ' değişken son satırla
ws.Range("A1").CurrentRegion  ' bitişik dolu blok
ws.UsedRange            ' kullanılan alan
ActiveCell              ' etkin hücre
Selection               ' seçili alan

  • Cells: Döngülerde satır ve sütun numarasını değişken olarak vermek için en uygun yoldur.
  • Range: Sabit adreslerde okunaklıdır; metin birleştirerek ("A2:C" & son) dinamik aralık da kurabilirsiniz.
  • CurrentRegion ve UsedRange: Veri bloğunun sınırlarını kendiniz hesaplamadan almanızı sağlar.

Önemli özellikler​

  • Value: Hücrenin değerini okur ya da yazar. Çok hücreli aralıkta iki boyutlu dizi döner.
  • Value2: Value gibidir; ancak tarih ve para birimi türlerine dönüştürme yapmadığı için biraz daha hızlıdır.
  • Formula: Formülü İngilizce işlev adları ve virgül ayırıcıyla okur ya da yazar. Türkçe işlev adlarıyla yazmak için FormulaLocal kullanılır.
  • Text: Hücrede görünen metni verir (salt okunur).
  • Address: Aralığın adresini metin olarak döndürür.
  • Row ve Column: İlk hücrenin satır ve sütun numarasını verir.
  • Rows ve Columns: Aralıktaki satır ya da sütun koleksiyonuna ulaştırır; Count ile sayıları alınır.
  • Offset: Aralığı belirtilen satır ve sütun kadar kaydırır; örneğin Offset(0, 1) bir sağdaki hücredir.
  • Resize: Aralığın boyutunu yeniden belirler.
  • End: Ctrl + ok tuşu etkisini verir; End(xlUp) sütunda yukarı doğru son dolu hücreye gider.
  • NumberFormat: Sayı biçimini belirler.
  • Font, Interior, Borders: Yazı tipi, dolgu rengi ve kenarlık ayarları için alt nesnelerdir.
  • EntireRow ve EntireColumn: Aralığın bulunduğu satırların ya da sütunların tamamını verir.

Önemli yöntemler ve olaylar​

  • Select ve Activate: Aralığı seçer ya da etkinleştirir; çoğu işlem için gerekmez.
  • Copy ve PasteSpecial: Kopyalar ve özel yapıştırır; Copy Destination:=... biçimiyle panoya uğramadan kopyalama da yapılır.
  • ClearContents, Clear, Delete: Sırasıyla yalnız içeriği, içerik ile biçimi temizler ya da hücreleri siler.
  • Sort: Aralığı bir ya da birkaç anahtara göre sıralar.
  • Find: Aralıkta değer arar ve bulduğu ilk hücreyi Range olarak döndürür; bulamazsa Nothing döner.
  • AutoFilter: Otomatik filtre uygular.
  • AutoFit: Satır yüksekliğini ya da sütun genişliğini içeriğe uydurur.
  • Merge ve UnMerge: Hücreleri birleştirir ya da ayırır.
  • SpecialCells: Boş hücreler, formüllü hücreler gibi özel türdeki hücreleri seçer.

Range nesnesinin kendi olayı yoktur. Hücrelerle ilgili olaylar sayfa modülündeki Worksheet_Change ve Worksheet_SelectionChange olaylarıdır ve değişen alanı Target As Range parametresiyle size verir.

1. Formül ve biçimi bir aralığa tek seferde yazma​

Sayfada ürün, adet ve birim fiyat bilgileri var; Tutar sütunu boş. Geliştirici sekmesi > Visual Basic (Developer > Visual Basic) ile düzenleyiciyi açın, Ekle > Modül (Insert > Module) ile yeni bir standart modül ekleyip aşağıdaki kodu yapıştırın. Makro, D2:D6 aralığına formülü tek komutla yazar, sayı biçimini verir ve başlık satırını kalın yapar.
VBA 15 satır
Option Explicit

Sub TutarHesapla()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ' Tek komutla tüm aralığa formül yazılır; satır başvuruları otomatik uyarlanır
    ws.Range("D2:D6").Formula = "=B2*C2"

    ' Tutar sütununa sayı biçimi verilir
    ws.Range("D2:D6").NumberFormat = "#,##0.00"

    ' Başlık satırı kalın yapılır
    ws.Range("A1:D1").Font.Bold = True
End Sub
Range
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünAdetBirim FiyatTutar
2Kalem1204,50540,00
3Defter4518,75843,75
4Dosya6012,90774,00
5Zımba1585,001.275,00
6Kağıt (A4 Paket)30165,504.965,00
Satış ListesiExcelDepo v1.0.0
Makro çalıştıktan sonra D2:D6 aralığındaki her hücre kendi satırının adet ve birim fiyatını çarpar; örneğin ilk satırın tutarı 540,00, ikinci satırınki 843,75, sonuncusu 4.965,00 olur. Formül ilk hücreye göre yazıldığı için Excel diğer satırlardaki başvuruları kendisi uyarlar.

2. Son satırı bulma, döngü ve Offset​

Sayfada personel adı, şehir ve maaş bilgileri var; Durum sütunu boş. Kodu standart modüle yapıştırın. Makro A sütunundaki son dolu satırı End(xlUp) ile bulur, maaş hücrelerini For Each ile dolaşır ve Offset ile bir sağdaki hücreye durum bilgisini yazar.
VBA 23 satır
Option Explicit

Sub MaasDurumuYaz()
    Dim ws As Worksheet
    Dim son As Long
    Dim hucre As Range

    Set ws = ActiveSheet

    ' A sütununda aşağıdan yukarı çıkarak son dolu satırı bul
    son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ' Maaş sütunundaki her hücreyi dolaş
    For Each hucre In ws.Range("C2:C" & son)
        If hucre.Value >= 30000 Then
            ' Offset(0, 1): bir sağdaki hücre
            hucre.Offset(0, 1).Value = "Yüksek"
            hucre.Offset(0, 1).Font.Bold = True
        Else
            hucre.Offset(0, 1).Value = "Normal"
        End If
    Next hucre
End Sub
Range
Formülünü incelemek için bir hücre seçin.
ABCD
1PersonelŞehirMaaşDurum
2Ayşe Yılmazİstanbul42.000,00Yüksek
3Mehmet DemirAnkara28.500,00Normal
4Fatma Kayaİzmir35.000,00Yüksek
5Ali ÇelikBursa26.000,00Normal
6Zeynep ArslanAntalya31.500,00Yüksek
7Hasan ŞahinKonya24.500,00Normal
8Elif AydınAdana38.000,00Yüksek
PersonelExcelDepo v1.0.0
Makro, son satırı kendisi bulduğu için listeye satır eklense bile aynı kodla çalışır. İlk personelin durumu Yüksek, ikinci personelin durumu Normal olarak yazılır; 30000 ve üzeri maaşlar için Durum hücresi kalın yapılır. Offset(0, 1) her maaş hücresinin hemen sağındaki hücreye ulaşır.

3. Sıralama ve toplam satırı ekleme​

Sayfada ay, gider kalemi ve tutar bilgileri sırasız durumda. Kodu standart modüle yapıştırın. Makro veri aralığını Tutar sütununa göre büyükten küçüğe sıralar, ardından veri bloğunun hemen altındaki satıra Toplam etiketini ve TOPLA formülünü yazar.
VBA 18 satır
Option Explicit

Sub SiralaVeTopla()
    Dim ws As Worksheet
    Dim son As Long

    Set ws = ActiveSheet
    son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ' Başlık hariç veri aralığını Tutar sütununa göre büyükten küçüğe sırala
    ws.Range("A2:C" & son).Sort Key1:=ws.Range("C2"), Order1:=xlDescending, Header:=xlNo

    ' Veri bloğunun altına toplam satırı ekle
    ws.Cells(son + 1, 2).Value = "Toplam"
    ws.Cells(son + 1, 3).Formula = "=SUM(C2:C" & son & ")"
    ws.Cells(son + 1, 3).NumberFormat = "#,##0.00"
    ws.Range(ws.Cells(son + 1, 2), ws.Cells(son + 1, 3)).Font.Bold = True
End Sub
Range
Formülünü incelemek için bir hücre seçin.
ABC
1AyGider KalemiTutar
2OcakKira15.000,00
3ŞubatMarket6.200,00
4NisanSigorta2.300,00
5MartUlaşım1.800,00
6OcakElektrik1.250,50
7NisanTelefon620,00
8Şubatİnternet450,00
9MartSu380,75
10Toplam28.001,25
Aylık GiderExcelDepo v1.0.0
Sıralamadan sonra en yüksek tutarlı gider en üstte, en düşük tutarlı gider listenin sonunda yer alır. Veri bloğunun altındaki satıra Toplam etiketi ve tutarların toplamı yazılır; toplam hücresinin değeri 28.001,25 olur. Sort yönteminde Header:=xlNo kullanılmasının nedeni, aralığa başlık satırını dahil etmemiş olmamızdır.

Kullanırken dikkat edin​

  • Sayfayı açıkça belirtin: Başında sayfa nesnesi olmayan Range ya da Cells başvurusu etkin sayfaya gider. Makro farklı sayfa etkinken çalışırsa yanlış sayfada işlem yapabilirsiniz. Bunu önlemek için Set ws = ThisWorkbook.Worksheets("Sayfa1") gibi bir değişken kullanın ve tüm başvuruları ws.Range biçiminde yazın.
  • Başka sayfadaki Cells ile Range birleşimi: Range(Cells(1, 1), Cells(5, 3)) yazarken içteki Cells başvurularının da aynı sayfaya bağlı olması gerekir. Dıştaki Range bir sayfaya bağlı, içteki Cells etkin sayfaya bağlıysa "Uygulama veya nesne tanımlı hata" alırsınız.
  • Select kullanmaktan kaçının: Makro kaydedicinin ürettiği Select ve Selection kalıpları çoğu zaman gereksizdir. Doğrudan ws.Range("A1").Value = 5 gibi yazmak hem daha hızlı hem de daha güvenilirdir.
  • Formula ve FormulaLocal farkı: Formula özelliği formülü İngilizce işlev adları (SUM, IF) ve virgül ayırıcıyla bekler; Türkçe Excel'de bile böyledir. Türkçe adları (TOPLA, EĞER) ve noktalı virgülü kullanmak istiyorsanız FormulaLocal kullanın; ancak bu kod başka dilli Excel'de çalışmaz.
  • Value ve Text farkı: Value hücrenin gerçek değerini, Text ise ekranda görünen biçimli metni verir. Sütun dar olduğunda Text değeri ##### dönebilir. Çok hücreli bir aralıkta Value iki boyutlu dizi döndürür; tek bir değişkene atamaya çalışırsanız hata alırsınız.
  • Son satırı bulurken: Son dolu satır için sütunun en altından yukarı çıkan Cells(Rows.Count, 1).End(xlUp).Row kalıbı güvenlidir. End(xlDown) ise ilk boş hücrede durur ve veride boşluk varsa yanlış satırı verir. Kullandığınız sütunda hiç boşluk olmaması gerekir; son sütun için aynı mantıkla End(xlToLeft) kullanılır.
  • Büyük aralıklarda hız: Yüzlerce hücreye tek tek yazmak yerine aralığa bir kerede yazın (formül ya da dizi ataması). Gerekirse işlem öncesi Application.ScreenUpdating = False yapıp sonunda True değerine döndürün.
  • İlgili konular:
    • Cells: Satır ve sütun numarasıyla hücreye ulaşma özelliği
    • Offset ve Resize: Aralığı kaydırma ve yeniden boyutlandırma
    • CurrentRegion ve UsedRange: Bitişik veri bloğu ve kullanılan alan
    • Worksheet: Range özelliğinin bağlı olduğu sayfa nesnesi
    • Selection ve ActiveCell: Seçili alan ve etkin hücre
    • Worksheet_Change: Hücre değişince çalışan, Target parametresi Range olan olay
    • For Each...Next: Aralıktaki hücreleri dolaşan döngü
    • Application.Union ve Application.Intersect: Aralıkları birleştirme ve kesişimini alma
    • Formüller > Tanımlı Adlar > Ad Yöneticisi (Formulas > Defined Names > Name Manager): Range("Ad") ile kullanılan adların tanımlandığı yer
    • TOPLA, DOLAYLI, KAYDIR, İNDİS: Aralıklarla çalışan ilgili çalışma sayfası işlevleri
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
14
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst