Özellik ikonu

UsedRange

İndirme izni yok

Genel Bakış

UsedRange (Worksheet.UsedRange), bir çalışma sayfasında veri, formül ya da biçimlendirme içeren tüm hücreleri kapsayan en küçük dikdörtgen aralığı Range nesnesi olarak döndüren salt okunur bir özelliktir. Sayfanın son satırını ve son sütununu bulmak, kullanılan alan üzerinde döngü kurmak ya da tüm veri bölgesini tek adımda biçimlendirmek için kullanılır. Aralık A1 hücresinden başlamak zorunda değildir ve içinde boş satır ya da sütunlar bulunabilir.

Söz dizimi​

Özellik yalnızca okunur; ona değer atanamaz. Her çağrıda sayfanın o andaki kullanılan alanını Range olarak verir:
VBA 4 satır
ifade.UsedRange

Dim ka As Range
Set ka = ActiveSheet.UsedRange
  • ifade: Zorunlu. Bir Worksheet nesnesini veren ifade, örneğin ActiveSheet ya da ThisWorkbook.Worksheets("Rapor").
  • Dönüş değeri: Kullanılan hücreleri kapsayan Range nesnesi. Sayfa tamamen boşsa tek hücreli A1 aralığı döner.
  • Salt okunur: UsedRange özelliğine atama yapılmaz; ancak dönen aralığın Value, Font, Columns.AutoFit gibi özellik ve yöntemleri kullanılabilir.

Kullanılan alan neleri kapsar​

Excel bir hücreyi şu durumlarda kullanılmış sayar:
  • Değer ya da formül: Hücrede sabit bir değer veya formül varsa.
  • Biçimlendirme: Hücreye dolgu rengi, kenarlık, yazı tipi ya da sayı biçimi uygulanmışsa; hücre boş görünse bile.
  • Satır ve sütun ayarları: Hücre düzeyinde biçimi olan satır ve sütunlar da alanı genişletebilir.
Aralığın sol üst köşesi, verinin başladığı ilk satır ve sütundur. Veri B3 hücresinden başlıyorsa UsedRange da B3 ile başlar; bu durumda UsedRange.Rows.Count değeri son satır numarasına eşit olmaz. Son satır numarasını bulmak için ilk satır bilgisini de hesaba katın:
VBA 2 satır
sonSatir = ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1
sonSutun = ws.UsedRange.Column + ws.UsedRange.Columns.Count - 1

Sık kullanılan kalıplar​

  • Başlığı atlamak: Başlık satırını dışarıda bırakmak için Offset ve Resize birlikte kullanılır.
  • Son hücre: Cells.SpecialCells(xlCellTypeLastCell) sayfanın son kullanılmış hücresini verir.
  • Toplu işlem: For Each ile tüm hücreleri ya da Rows üzerinden satırları dolaşabilirsiniz.
  • Toplu biçim: UsedRange.Columns.AutoFit ile tüm sütun genişlikleri veriye göre ayarlanır.
Başlığı atlayarak veri satırlarını almak için:
VBA
Set veri = ws.UsedRange.Offset(1).Resize(ws.UsedRange.Rows.Count - 1)

1. Adres, satır ve sütun sayısını okuma​

Sayfada A1:C6 aralığında ürün verisi, D sütununda etiketler vardır. Makro kullanılan alanın adresini, satır ve sütun sayısını ve son satır numarasını E sütununa yazar. Kodu standart bir modüle yapıştırın; sayfa adının "Satış Listesi" olması gerekir.
VBA 16 satır
Option Explicit

Sub KullanilanAlanBilgisi()
    Dim ws As Worksheet
    Dim ka As Range

    Set ws = ThisWorkbook.Worksheets("Satış Listesi")
    ' Kullanılan alan yazılmadan önce alınır
    Set ka = ws.UsedRange

    ws.Range("E2").Value = ka.Address
    ws.Range("E3").Value = ka.Rows.Count
    ws.Range("E4").Value = ka.Columns.Count
    ' İlk satır numarası + satır sayısı - 1 = son satır
    ws.Range("E5").Value = ka.Row + ka.Rows.Count - 1
End Sub
UsedRange
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünŞehirAdetBilgiSonuç
2KalemAnkara120Adres$A$1:$E$6
3Defterİzmir80Satır sayısı6
4SilgiBursa45Sütun sayısı5
5Dosyaİstanbul200Son satır numarası6
6ZımbaAdana30
Satış ListesiExcelDepo v1.0.0
Makro çalışınca kullanılan alanın adresi E2 hücresine ($A$1:$E$6), satır sayısı E3 hücresine (6), sütun sayısı E4 hücresine (5) ve son satır numarası E5 hücresine (6) yazılır. Sonuçlar, başlık satırı ve etiket sütunu dahil tüm kullanılmış hücrelerin sayıldığını gösterir.

2. Başlığı atlayıp veri satırlarında dolaşma​

Sayfada her ürünün stok ve minimum stok değeri vardır. Makro başlık satırı hariç tüm veri satırlarını dolaşır; stok, minimumdan azsa E sütununa uyarı yazar. Kodu standart bir modüle yapıştırın; sayfa adı "Stok Kontrol" olmalıdır.
VBA 23 satır
Option Explicit

Sub StokDurumuYaz()
    Dim ws As Worksheet
    Dim veri As Range
    Dim satir As Range

    Set ws = ThisWorkbook.Worksheets("Stok Kontrol")

    ' Yalnızca başlık varsa işlem yapma
    If ws.UsedRange.Rows.Count < 2 Then Exit Sub

    ' Başlık satırını atla: bir satır aşağı kaydır, bir satır kısalt
    Set veri = ws.UsedRange.Offset(1).Resize(ws.UsedRange.Rows.Count - 1)

    For Each satir In veri.Rows
        If satir.Cells(1, 3).Value < satir.Cells(1, 4).Value Then
            satir.Cells(1, 5).Value = "Sipariş ver"
        Else
            satir.Cells(1, 5).Value = "Yeterli"
        End If
    Next satir
End Sub
UsedRange
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünDepoStokMinimumDurum
2KalemAnkara12050Yeterli
3Defterİzmir3040Sipariş ver
4SilgiBursa1520Sipariş ver
5Dosyaİstanbul20080Yeterli
6ZımbaAdana810Sipariş ver
7KlasörKonya6060Yeterli
Stok KontrolExcelDepo v1.0.0
UsedRange.Offset(1).Resize(...) başlık satırını dışarıda bırakır, böylece döngü yalnızca ürün satırlarında çalışır. Defter için E3 hücresinde Sipariş ver, Zımba için E6 hücresinde Sipariş ver, Klasör için E7 hücresinde Yeterli yazar. Stok ile minimum eşit olduğunda koşul sağlanmadığı için o satır yeterli sayılır. Veri eklenip silindikçe aralık kendiliğinden güncel kalır; kodda sabit satır numarası yoktur.

3. Son hücreyi bulma ve toplamları alma​

Sayfada aylık gelir ve gider tutarları ile D sütununda etiketler yer alır. Makro kullanılan alan üzerinden gelir ve gider toplamını, sayfanın son hücresini ve sayısal hücre sayısını E sütununa yazar, ardından sütunları veriye göre genişletir. Kodu standart bir modüle yapıştırın; sayfa adı "Gelir Gider" olmalıdır.
VBA 28 satır
Option Explicit

Sub KullanilanAlaniOzetle()
    Dim ws As Worksheet
    Dim ka As Range
    Dim gelir As Double
    Dim gider As Double
    Dim sayisalAdet As Long
    Dim sonHucre As String

    Set ws = ThisWorkbook.Worksheets("Gelir Gider")
    Set ka = ws.UsedRange

    ' Hesaplar sonuçlar yazılmadan önce yapılır
    gelir = Application.WorksheetFunction.Sum(ka.Columns(2))
    gider = Application.WorksheetFunction.Sum(ka.Columns(3))
    sayisalAdet = Application.WorksheetFunction.Count(ka)
    sonHucre = ws.Cells.SpecialCells(xlCellTypeLastCell).Address(False, False)

    ws.Range("E2").Value = gelir
    ws.Range("E3").Value = gider
    ws.Range("E4").Value = sonHucre
    ws.Range("E5").Value = sayisalAdet
    ws.Range("E2:E3").NumberFormat = "#,##0"

    ' Tüm kullanılan alandaki sütunları veriye göre genişlet
    ka.Columns.AutoFit
End Sub
UsedRange
Formülünü incelemek için bir hücre seçin.
ABCDE
1AyGelirGiderÖzetDeğer
2Ocak45.00032.000Gelir toplamı326.000
3Şubat52.00035.000Gider toplamı225.000
4Mart61.00040.000Son hücreE7
5Nisan48.00037.000Sayısal hücre sayısı12
6Mayıs57.00039.000
7Haziran63.00042.000
Gelir GiderExcelDepo v1.0.0
UsedRange üzerinde Columns(2) ve Columns(3) kullanılarak gelir toplamı E2 hücresine (326.000), gider toplamı E3 hücresine (225.000) yazılır. E4 hücresi sayfanın son kullanılmış hücresinin adresini (E7), E5 hücresi ise kullanılan alandaki sayısal hücre sayısını (12) gösterir. Sayısal hücre sayımı etiket ve başlık gibi metinleri dışarıda bırakır.

Kullanırken dikkat edin​

  • Boş görünen hücreler alanı büyütebilir: Değeri silinmiş ancak biçimi (kenarlık, dolgu, sayı biçimi) duran hücreler kullanılmış sayılır. Bu yüzden UsedRange beklenenden büyük çıkabilir. Gereksiz satır ve sütunları yalnızca temizlemek yerine Sil (Delete) komutuyla tamamen silin, gerekirse dosyayı kaydedin; ardından alan çoğu durumda küçülür.
  • Rows.Count son satır değildir: Veri A1 hücresinden başlamıyorsa UsedRange.Rows.Count son satır numarasını vermez. Son satır için UsedRange.Row + UsedRange.Rows.Count - 1 hesabını kullanın.
  • Boş sayfada A1 döner: Hiç kullanılmamış bir sayfada UsedRange tek hücreli A1 aralığını verir. Sayfanın gerçekten boş olup olmadığını anlamak için Application.WorksheetFunction.CountA(ws.UsedRange) ile dolu hücre sayısını denetleyin.
  • Başlık satırı da aralığın içindedir: Veri satırlarını işlerken başlığı dışarıda bırakmak için Offset ve Resize kullanın; yalnızca başlıktan oluşan sayfada Resize hata vereceği için önce satır sayısını denetleyin.
  • Tek sütunun son satırı için: Bir sütundaki son dolu hücre gerekiyorsa UsedRange yerine ws.Cells(ws.Rows.Count, 1).End(xlUp).Row kullanmak daha güvenilirdir; çünkü diğer sütunlardaki biçimlendirme UsedRange sonucunu etkileyebilir.
  • Büyük aralıklarda performans: Çok büyük bir UsedRange üzerinde hücre hücre döngü kurmak yavaştır. Mümkünse değerleri bir diziye (Variant) alıp bellekte işleyin ya da Application.ScreenUpdating = False kullanın.
  • İlgili konular:
    • Range, Cells, Rows, Columns: Aralık ve hücre erişim nesneleri.
    • Offset ve Resize: Aralığı kaydırma ve boyutlandırma özellikleri.
    • SpecialCells ve xlCellTypeLastCell: Son kullanılmış hücreyi bulma.
    • End (xlUp) ve Find: Belirli bir sütundaki son dolu hücreyi bulma.
    • CurrentRegion: Bir hücreyi çevreleyen bitişik veri bölgesi.
    • Ctrl+End: Excel arayüzünde sayfanın son kullanılmış hücresine gitme kısayolu.
    • BAĞ_DEĞ_DOLU_SAY, SAY, TOPLA: Kullanılan alandaki dolu ve sayısal hücreleri saymak ya da toplamak için işlevler.
Ö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
9
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst