Bir Excel çalışma sayfasında hücreler birleştirmek, satırları veya sütunları boyutlandırmak.
Çalışma sayfasındaki bir bölgeyi temsil eden Range nesnesinin ColumnWidth özelliğiyle bölgedeki sütun genişliğini belirleyebilirsiniz.
Atadığınız değer bölgeden geçen tüm sütunları etkileyecektir.
Bu özellik değerine punto cinsinden bir sayısal değer atarsınız. Sütun genişliğini gündelik uzunluk birimleri cinsinden belirlemek isterseniz, Excel programını temsil eden Application nesnesi aracılığıyla
InchesToPoints,
CentimetersToPoints,
MillimetersToPoints gibi puntoya dönüştürme fonksiyonlarını kullanabilirsiniz.
Bölgedeki tüm sütunların genişliği aynıysa, ColumnWidth özelliğinden bölgedeki ortak sütun genişliğini öğrenebilirsiniz, ama genişlikler aynı değilse özellik değeri geçersiz olacaktır.
Range nesnesinin RowHeight özelliğiyle nesnenin temsil ettiği bölgenin ilk satırının yüksekliğini (her satırının değil!) punto cinsinden bir değer olarak belirlersiniz.
Bölgenin başka bir satırının yüksekliğini ayarlamak için Range nesnesinin Rows özelliğinden satırlar koleksiyonuna, oradan da sıra numarasıyla istediğiniz satıra erişebilirsiniz. Sonuçta her bir satır kendi başına bir bölgedir ve o bölgenin ilk satırı da kendisidir.
RowHeight özelliğinden bölgenin ilk satır yüksekliğini öğrenebilirsiniz.
Bu ilk satırda birden fazla satırı kapsayan birleştirilmiş bir hücre varsa özellik değeri boş olacaktır.
Range nesnesinin AutoFit fonksiyonuyla otomatik satır/sütun boyutlandırması yapabilirsiniz. Boyutlar o bölgede kalan hücrelerdeki en uzun içeriği görünür kılacak şekilde ayarlanacaktır, ama bu özelliği bölge nesnesinin satırlar koleksiyonunu temsil eden Rows veya sütunlar koleksiyonunu temsil eden Columns özelliği üzerinde kullanmalısınız.
Range nesnesinin Merge fonksiyonuyla nesnenin temsil ettiği bölgedeki hücreleri birleştirebilirsiniz.
Bu fonksiyonun isteğe bağlı Across argümanına True değeri atarsanız, bölgenin her bir satırını ayrı birer hücre olarak birleştirisiniz. Varsayılan değer False ise bölgenin tamamının tek bir hücre olarak birleştirilmesini sağlar.
Bölgeyi temsil eden Range türü nesnenin MergedCells özelliğinin değeri True ise bölgede birleştirilmiş hücreler var demektir.
UnMerge fonksiyonuyla bölgedeki birleştirilmiş hücreleri geri ayırırsınız.
Bu da bir Excel sayfasında birleştirdiğiniz hücrelerin aslında geri planda ayrı kaldıkları ve ait oldukları satır veya sütundaki sıra numaralarını korudukları anlamına geliyor. Halbuki bir Word belgesindeki tabloda birleştirdiğiniz hücreler artık tek bir hücre olur ve kaybolan hücrelerin satır/sütun içindeki sıra numaraları da kaybolur.
Üzerinde satır, sütun ve hücre düzenlemeleri yapacağınız çalışma sayfasına ait VBA projesinde bir altyordam yaratın.
Üzerinde düzenleme yapacağınız bir satırı temsil edecek bir nesne tanımlayın:
Dim satir As Range
Bu nesne aracılığıyla sayfanın istediğiniz bir satırına erişin:
Set satir = Me.Rows(1)
Bu neseyi kullanarak Range fonksiyonuyla tanımladığınız bir bölgeye erişin.
O bölgedeki hücreleri Merge fonksiyonuyla birleştirebilirsiniz.
Argüman olarak birleştireceğiniz hücrelerin referanslarını verirsiniz, ama sayfanın kaçıncı satırını seçmiş olursanız olun, hücre satır numarası olarak 1 vermeniz zorunludur.
Örneğin, şu komutla seçtiğiniz satırın 2. hücresinden 9.ya kadarki hücreleri birleştirmiş olursunuz:
satir.Range(satir.Cells(1, 2), satir.Cells(1, 9)).Merge
Referansını aldığınız satır içinde hücreleri birleştireceğiniz bir alt bölge tanımlarken sütun harfleri ve satır numaraları da kullanabilirsiniz, ama yine satır numarası 1 olmak zorundadır:
Set satir = Me.Rows(3)
Range("B1:C1").Merge
Bu komutla seçtiğiniz satırın B ve C sütunlarındaki iki hücresini birleştirmiş olursunuz.
Bölge tanımını böyle kafa karıştırıcı bir şekilde yapmanızı önermiyoruz. Sütun harfi ve satır numaralarıyla bölge adresi tanımlayacaksanız, bunu da sayfayı temsil eden Worksheet nesnesi aracılığıyla yapmanız daha doğru olur:
Me.Range("B4:D4").Merge
Birden fazla satırı kapsayan bir bölgede her satırdaki hücreleri ayrı birleştirmek için, Merge fonksiyonuna argüman olarak True değeri atayın:
Me.Range("B6:C7").Merge (True)
Hücre birleştirme işlemlerini bir döngüyle tekrarlayacaksanız, her adımda birleştireceğiniz bölgeyi satır ve sütun numaralarıyla elde ettiğiniz hücre referanslarıyla oluşturun:
For h = 2 To 8 Step 2
Me.Range(Me.Cells(8, h), Me.Cells(9, h + 1)).Merge
Next h
Bölgenin tüm kenarlıkları için düz kenarlık çizgisi terchi yaparsanız, bölge içeriğindeki birleştirilmiş hücreleri görünür kılacaktır:
Me.Range("A1:I9").Borders.LineStyle = xlContinuous
Seçtiğiniz bir sütunun genişliğini gerekiyorsa bir dönüştürme fonksiyonu kullanarak belirleyebilirsiniz:
Me.Columns("A").ColumnWidth = Application.CentimetersToPoints(0.5)
Tanımladığınız bir bölgenin sütunlar koleksiyonunu temsil eden Columns üzerinde AutoFit fonksiyonunu çağırarak sütunların içeriklere göre otomatik boyutlandırılmasını sağlayabilirsiniz:
Me.Range("B2:I9").Columns.AutoFit
Bu fonksiyon çağrısını sınırladığınız bölge için değil de
Me.Columns("B:I").AutoFit
şeklinde, B’den I’ya kadarki sütunların tamamı üzerinde de yapabilirdiniz, ama o zaman otomatik boyutlandırmada o sütunların boş olmayan tüm hücrelerindeki içeriklerden en uzununa göre genişlik ayarı yapılırdı.
Aşağıda son halini sunduğumuz altyordam sayfa 38’de Word için sunduğumuz altyordamdaki gibi belli satırlarda hücre birleştirmeleri yaparak bir haftalık çalışma çizelgesi oluşturuyor.
Kaynak Dosya: “SayfadaSatirSutunHucreDuzenlemeleri.xlsm”
Unutmayın; kitap veya ekran satırına sığmayan komut satırları alta sarkmış olabilir. Siz onları tek satır olarak yazacaksınız!
Sub SayfadaSatirSutunHucreDuzenlemeleri()
'En sol sütunda haftanın günlerinin adları gözükecek,
'ama bunu satırlarda hücreleri birleştirmeden önce yapmalıyız.
'Farklı sütunların hücreleri birleştirildikten sonra
'sütunlara sıra numaralarıyla erişilemez.
Dim sutun As Range
Set sutun = Me.Columns(1)
Dim i As Integer
For i = 3 To 9
sutun.Cells(i, 1).Value2 = WeekdayName(i - 2)
Next
'İlk satır için yazı tipi kalın harfli ve 14 punto olacak.
Dim satir As Range
Set satir = Me.Rows(1)
satir.Font.Size = 14
satir.Font.Bold = True
'Bu satırın 2.'den 9. hücresine kadarki hücreleri birleştiriyoruz.
satir.Range(satir.Cells(1, 2), satir.Cells(1, 9)).Merge
'Birleştirdiğimiz hücre artık bu satırın 2. hücresi
satir.Cells(1, 2).Value2 = "Saatler"
satir.Cells(1, 2).HorizontalAlignment = xlCenter
Set satir = Me.Rows(2)
satir.HorizontalAlignment = xlCenter
satir.Font.Size = 12
satir.Font.Bold = True
satir.Cells(1, 1).Value2 = "Gün"
Dim h As Integer
Dim t As Date
t = #8:00:00 AM# ' Mesai başlangıç saati
For h = 2 To 9
satir.Cells(1, h).Value2 = Format(t, "HH:mm")
t = DateAdd("h", 1, t)
If h = 5 Then t = DateAdd("h", 1, t) 'Öğle arasını (12:00-13:00) atlamak için
Next h
'Haftanın günlerinde geçerli olacak vardiya aralıklarına göre hücreler birleştirilecek
Set satir = Me.Rows(3) 'Pazartesi için 2şer saatlik vardiya dilimleri olsun.
satir.Range("B1:C1").Merge
satir.Range("D1:E1").Merge
satir.Range("F1:G1").Merge
satir.Range("H1:I1").Merge
'Salı için vardiyalar 3-1-3-1 olsun.
'Bu kez sayfa bölgelerini kolay yoldan, sütun harfleriyle tanımlıyoruz.
Me.Range("B4:D4").Merge
Me.Range("F4:H4").Merge
'Çarşamba için vardiyalar 4-4 olsun.
Me.Range("B5:E5").Merge
Me.Range("F5:I5").Merge
'Perşembe ve Cuma bölgelerini birlikte seçip ikişer saatlik dilimlere ayıralım.
Me.Range("B6:C7").Merge (True)
Me.Range("D6:E7").Merge (True)
Me.Range("F6:G7").Merge (True)
Me.Range("H6:I7").Merge (True)
'Cumartesi-Pazar vardiyalarını 2şer saatlik dilimler oluşturacak şekilde birleştirelim;
'Bunun gerçek hayatta bir anlamı var mıdır diye düşünmeyeceğiz.
'Dikkat edin; bu işlemi Cuma satırının ikişer satıra ayrılmasından önce yapmalıyız,
'yoksa satır sıra numaraları işe yaramayabilir.
For h = 2 To 8 Step 2
Me.Range(Me.Cells(8, h), Me.Cells(9, h + 1)).Merge
Next h
'Şimdiki birinci satır ile şimdiki ikinci satırın en sol hücrelerini birleştiriyoruz.
'Az önce 2. satırın 1. hücresine yazdırdığımız "Gün" etiketi bu birleşmiş hücrede gözükecek.
Me.Range(Me.Cells(1, 1), Me.Cells(2, 1)).Merge
'Hücre içeriğindeki metin alta hizalanmış gözüksün.
Me.Cells(1, 1).VerticalAlignment = xlBottom
'Hücre düzenlemelerinin son halini göstermek için
'tablo dış ve iç kenarlıklarını görünür kılalım:
Me.Range("A1:I9").Borders.LineStyle = xlContinuous
Me.Range("A1:I9").BorderAround Weight:=xlMedium
'İlk sütun genişliğini belli bir değere ayarlayalım
Me.Columns("A").ColumnWidth = Application.CentimetersToPoints(0.5)
'Saat dilimlerinin olduğu sütunları da içerikleri sığacak kadar olsun,
'(ama şimdilik yalnızca başlıklarındaki saat değeri sığacaktır)
Me.Range("B2:I9").Columns.AutoFit
End Sub
Word tablosunda hücre birleştirmesi yapan örnek altyordamda bir tablo hücresini bölmeyi de göstermiştik, ama bir Excel çalışma sayfasındaki bir hücreyi bölmeniz söz konusu değildir.
Bu düzenlemelerle oluşturulan çizelge aşağıdaki gibi görünecektir: