Genel Bakış
Cells (Cells property), bir çalışma sayfasındaki ya da bir hücre aralığındaki hücrelere satır ve sütun numarasıyla başvurmanızı sağlayan özelliktir. Sonuç olarak bir Range nesnesi döndürür; bu yüzden değer yazma, okuma, biçimlendirme gibi tüm hücre işlemlerini yapabilirsiniz. Satır ve sütun sayıları değişken olduğundan döngülerde adres metni oluşturmaktan çok daha pratiktir.
Hiçbir bağımsız değişken verilmezse nesnenin tüm hücrelerini temsil eden bir Range döner. Tek bağımsız değişken verilirse hücre, soldan sağa ve yukarıdan aşağıya doğru sıra numarasıyla seçilir; sayfada birinci hücre A1, ikinci hücre B1'dir.
Döndürülen nesne bir Range olduğundan Value, Formula, Font, Interior, NumberFormat gibi tüm özellik ve yöntemler kullanılabilir. Value özelliği varsayılan özellik olduğu için yazılmasa da çalışır, ancak okunaklı olması için açıkça yazmanız önerilir.
Cells bir Range nesnesine bağlanırsa numaralar o aralığın sol üst hücresine göre sayılır. Örneğin C2:C6 aralığının üçüncü hücresi, sayfadaki C4 hücresidir. Aralığın dışına taşan numaralar da verilebilir; sonuç aralığın dışındaki hücre olur.
Bu kalıplardaki Range içinde iki Cells kullanımı, başlangıç ve bitiş hücresini değişkenlerle belirlemenin standart yoludur. Son dolu satırı bulma kalıbı ise veri sayısı değiştiğinde döngü sınırını otomatik ayarlar.
Makro, her satırda ikinci ve üçüncü sütundaki değerleri çarpıp dördüncü sütuna yazar. Klavye satırının tutarı 5.400,00, Fare satırının tutarı 4.500,00, Monitör satırının tutarı 25.200,00 olur. Kulaklık için 9.750,00, Yazıcı için 15.200,00 değeri yazılır. Döngü değişkeni yalnızca satır numarasını değiştirdiği için aynı satır içinde üç farklı sütuna kolayca başvurulabilir.
Son satır, A sütununun en altından yukarı doğru gidilerek bulunur; böylece satır eklenip silinse bile kod değişmeden çalışır. İstanbul için 405, Ankara için 265, İzmir için 233 ve Bursa için 147 toplamı yazılır. Aralığı belirleyen Range içindeki iki Cells da aynı sayfaya (ws) bağlanmıştır; bu, hata almamanın temel koşuludur.
Sütun harfi metin olarak verildiğinde C, D ve E sütunlarının hangi bilgiyi taşıdığı koddan kolayca anlaşılır. Yeni maaşlar E2 hücresinde 30.800,00, E3 hücresinde 34.560,00, E4 hücresinde 33.600,00, E5 hücresinde 43.460,00 ve E6 hücresinde 38.150,00 olarak hesaplanır. Kodun son satırı, C2:C6 aralığına bağlı Cells ile aralığın üçüncü hücresini, yani C4 hücresini sarıya boyar.
Söz dizimi
Cells özelliği bir Worksheet ya da Range nesnesinden sonra yazılır. Nesne belirtilmezse etkin sayfa, kod bir sayfa modülündeyse o sayfa kullanılır.
VBA
4 satır
nesne.Cells
nesne.Cells(SatirNo)
nesne.Cells(SatirNo, SutunNo)
nesne.Cells(SatirNo, "SutunHarfi")
- nesne: Cells özelliğinin bağlı olduğu Worksheet ya da Range nesnesi; isteğe bağlıdır, yazılmazsa etkin sayfa kullanılır.
- SatirNo: Satır numarası (RowIndex); isteğe bağlıdır. Çalışma sayfasında 1 ile 1.048.576 arasındadır.
- SutunNo: Sütun numarası (ColumnIndex); isteğe bağlıdır. Sayı olarak 1 (A) ile 16.384 (XFD) arasında olabilir ya da "C" gibi sütun harfi metin olarak yazılabilir.
Hiçbir bağımsız değişken verilmezse nesnenin tüm hücrelerini temsil eden bir Range döner. Tek bağımsız değişken verilirse hücre, soldan sağa ve yukarıdan aşağıya doğru sıra numarasıyla seçilir; sayfada birinci hücre A1, ikinci hücre B1'dir.
Nasıl çalışır
Cells her zaman önce satırı, sonra sütunu alır. Bu, Range ile yazılan A1 biçimindeki adreslerin tersidir: sütun harfi önce, satır numarası sonra gelir. İkinci satırdaki üçüncü sütun, yani C2 hücresi için satır 2, sütun 3 verilir.Döndürülen nesne bir Range olduğundan Value, Formula, Font, Interior, NumberFormat gibi tüm özellik ve yöntemler kullanılabilir. Value özelliği varsayılan özellik olduğu için yazılmasa da çalışır, ancak okunaklı olması için açıkça yazmanız önerilir.
Cells bir Range nesnesine bağlanırsa numaralar o aralığın sol üst hücresine göre sayılır. Örneğin C2:C6 aralığının üçüncü hücresi, sayfadaki C4 hücresidir. Aralığın dışına taşan numaralar da verilebilir; sonuç aralığın dışındaki hücre olur.
Sık kullanılan kalıplar
Aşağıdaki kalıplar günlük VBA çalışmalarının büyük bölümünü karşılar:
VBA
11 satır
' A1 hücresine değer yazar
Cells(1, 1).Value = "Başlık"
' Sütun harfiyle C2 hücresine başvurur
Cells(2, "C").Value = 100
' İki Cells ile A1:C5 aralığını tanımlar
Range(Cells(1, 1), Cells(5, 3)).ClearContents
' A sütunundaki son dolu satırı bulur
son = Cells(Rows.Count, 1).End(xlUp).Row
Bu kalıplardaki Range içinde iki Cells kullanımı, başlangıç ve bitiş hücresini değişkenlerle belirlemenin standart yoludur. Son dolu satırı bulma kalıbı ise veri sayısı değiştiğinde döngü sınırını otomatik ayarlar.
1. Döngüyle satır satır hesaplama
Ürün listesinde her satırın tutarını Adet ile Birim Fiyat'ı çarparak D sütununa yazmak istiyorsunuz. Örnek sayfa etkinken, Alt+F11 ile açılan Visual Basic Düzenleyicisi'nde bir standart modül ekleyip aşağıdaki kodu yapıştırın.
VBA
16 satır
Option Explicit
Sub TutarHesapla()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
' Satır numarasını döngü değişkeni belirler, sütun numarası sabittir
For i = 2 To 6
' 2. sütun Adet, 3. sütun Birim Fiyat, 4. sütun Tutar
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
Next i
ws.Range(ws.Cells(2, 4), ws.Cells(6, 4)).NumberFormat = "#,##0.00"
End Sub
Cells
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar |
| 2 | Klavye | 12 | 450,00 | 5.400,00 |
| 3 | Fare | 25 | 180,00 | 4.500,00 |
| 4 | Monitör | 6 | 4.200,00 | 25.200,00 |
| 5 | Kulaklık | 15 | 650,00 | 9.750,00 |
| 6 | Yazıcı | 4 | 3.800,00 | 15.200,00 |
SatışlarExcelDepo v1.0.0
2. Range içinde iki Cells ve son satır
Şehirlerin üç aylık satış adetleri B:D sütunlarında yer alıyor ve E sütununa satır toplamı yazılacak. Veri sayısı değişebileceğinden son satırı kodla buluyoruz. Örnek sayfa etkinken standart modüle aşağıdaki kodu yapıştırın.
VBA
20 satır
Option Explicit
Sub SatirToplamlari()
Dim ws As Worksheet
Dim i As Long
Dim son As Long
Set ws = ActiveSheet
' A sütunundaki son dolu satırı bulur
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
' İki Cells ile o satırdaki B:D aralığını tanımlar
ws.Cells(i, 5).Value = Application.WorksheetFunction.Sum(ws.Range(ws.Cells(i, 2), ws.Cells(i, 4)))
Next i
' Toplam sütununu kalın yapar
ws.Range(ws.Cells(2, 5), ws.Cells(son, 5)).Font.Bold = True
End Sub
Cells
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Şehir | Ocak | Şubat | Mart | Toplam |
| 2 | İstanbul | 120 | 135 | 150 | 405 |
| 3 | Ankara | 80 | 90 | 95 | 265 |
| 4 | İzmir | 70 | 75 | 88 | 233 |
| 5 | Bursa | 45 | 50 | 52 | 147 |
Bölge ÖzetiExcelDepo v1.0.0
3. Sütun harfi ve göreli başvuru
Personelin maaşına zam oranını uygulayıp yeni maaşı E sütununa yazacaksınız. Sütunları numara yerine harfle belirtmek kodu okunaklı kılar. Ayrıca bir Range'e bağlı Cells ile göreli başvuru gösterilir. Örnek sayfa etkinken standart modüle aşağıdaki kodu yapıştırın.
VBA
18 satır
Option Explicit
Sub YeniMaasYaz()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
For i = 2 To 6
' Sütun harfiyle başvuru: C = Maaş, D = Zam Oranı, E = Yeni Maaş
ws.Cells(i, "E").Value = Round(ws.Cells(i, "C").Value * (1 + ws.Cells(i, "D").Value), 2)
Next i
ws.Range("E2:E6").NumberFormat = "#,##0.00"
' Göreli başvuru: C2:C6 aralığının 3. hücresi, yani C4 sarıya boyanır
ws.Range("C2:C6").Cells(3).Interior.Color = RGB(255, 255, 0)
End Sub
Cells
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Personel | Departman | Maaş | Zam Oranı | Yeni Maaş |
| 2 | Ayşe Yılmaz | Muhasebe | 28.000,00 | 10% | 30.800,00 |
| 3 | Mehmet Kaya | Satış | 32.000,00 | 8% | 34.560,00 |
| 4 | Elif Demir | İnsan Kaynakları | 30.000,00 | 12% | 33.600,00 |
| 5 | Can Özkan | Bilgi İşlem | 41.000,00 | 6% | 43.460,00 |
| 6 | Zeynep Arslan | Satış | 35.000,00 | 9% | 38.150,00 |
Maaş ListesiExcelDepo v1.0.0
Kullanırken dikkat edin
- Satır önce, sütun sonra gelir: Cells içinde sıra her zaman satır, ardından sütundur. Sütun ile satırın yer değiştirmesi en sık yapılan hatadır ve kod hata vermeden yanlış hücreye yazar. Hata ayıklarken Cells için verdiğiniz sayıları A1 adresine çevirerek kontrol edin.
- Range içinde Cells kullanırken sayfayı belirtin: Bir Range içindeki Cells başvurularının hepsi aynı sayfaya bağlı olmalıdır. Range'in başına sayfa yazıp içindeki Cells'e yazmazsanız Cells etkin sayfaya bağlanır ve çalışma zamanı hatası alırsınız. Çözüm için her Cells'i aynı Worksheet nesnesine bağlayın ya da With bloğu kullanın.
- Geçersiz numaralar hata verir: Satır ya da sütun numarası 0, negatif ya da sayfa sınırlarının (1.048.576 satır, 16.384 sütun) dışında olursa çalışma zamanı hatası oluşur. Döngü değişkeninin hiçbir zaman 0'a düşmeyeceğinden emin olun; özellikle yukarı doğru Offset ya da geri sayım yaparken dikkat edin.
- Bağımsız değişkensiz Cells tüm sayfayı kapsar: Cells tek başına yazıldığında bir milyondan fazla satırı kapsayan tüm hücreler anlamına gelir. Cells üzerinde Clear ya da ClearContents çalıştırmak sayfadaki bütün verileri siler. Bu kullanımı yalnızca bilerek ve gerektiğinde yapın.
- Hız ipucu: Büyük veri üzerinde hücre hücre okuma ve yazma yavaştır. Çok sayıda hücre işleyecekseniz önce aralığı bir diziye alıp işlemi bellekte yapın, sonra sonucu tek seferde sayfaya yazın. Ayrıca Application.ScreenUpdating özelliğini işlem boyunca kapatabilirsiniz.
- İlgili konular:
- Range: A1 adresi ya da aralık adıyla hücre ve aralıklara başvuran nesne
- Rows ve Columns: satır ve sütun bütününe başvuran özellikler
- Offset ve Resize: bir hücreye göre kaydırma ve aralığı yeniden boyutlandırma
- End: Ctrl+Ok tuşu davranışıyla son dolu hücreyi bulan özellik
- UsedRange: sayfada kullanılan alanı veren özellik
- Worksheet nesnesi ve Worksheets koleksiyonu: sayfaya kodla başvuru
- SATIR ve SÜTUN: hücrenin satır ve sütun numarasını veren işlevler
- İNDİS: verilen satır ve sütun numarasındaki değeri döndüren işlev