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.
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.
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.
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.
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.
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.
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.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ürün | Şehir | Adet | Bilgi | Sonuç |
| 2 | Kalem | Ankara | 120 | Adres | $A$1:$E$6 |
| 3 | Defter | İzmir | 80 | Satır sayısı | 6 |
| 4 | Silgi | Bursa | 45 | Sütun sayısı | 5 |
| 5 | Dosya | İstanbul | 200 | Son satır numarası | 6 |
| 6 | Zımba | Adana | 30 |
Satış ListesiExcelDepo v1.0.0
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.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ürün | Depo | Stok | Minimum | Durum |
| 2 | Kalem | Ankara | 120 | 50 | Yeterli |
| 3 | Defter | İzmir | 30 | 40 | Sipariş ver |
| 4 | Silgi | Bursa | 15 | 20 | Sipariş ver |
| 5 | Dosya | İstanbul | 200 | 80 | Yeterli |
| 6 | Zımba | Adana | 8 | 10 | Sipariş ver |
| 7 | Klasör | Konya | 60 | 60 | Yeterli |
Stok KontrolExcelDepo v1.0.0
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.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ay | Gelir | Gider | Özet | Değer |
| 2 | Ocak | 45.000 | 32.000 | Gelir toplamı | 326.000 |
| 3 | Şubat | 52.000 | 35.000 | Gider toplamı | 225.000 |
| 4 | Mart | 61.000 | 40.000 | Son hücre | E7 |
| 5 | Nisan | 48.000 | 37.000 | Sayısal hücre sayısı | 12 |
| 6 | Mayıs | 57.000 | 39.000 | ||
| 7 | Haziran | 63.000 | 42.000 |
Gelir GiderExcelDepo v1.0.0
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.