Belge içeriğindeki bir tabloda hücreler birleştirmek veya bölmek.
Tables özelliğine sıra numarası vererek seçtiğiniz bir belge tablosuna erişebilirsiniz.
Eriştiğiniz tablo Table türü bir nesnedir.
Table nesnesinin Cell fonksiyonuyla seçtiğiniz bir tablo hücresine erişebilirsiniz. Argüman olarak
Row ile hücre satır numarasını,
Column ile de hücre sütun numarasını verirsiniz.
Bir tablo satırını temsil eden Row nesnesinin Cells özelliğiyle satırın hücreler koleksiyonuna erişebilirsiniz.
Bir tablo sütununu temsil eden Column nesnesinin Cells özelliğiyle de sütunun hücreler koleksiyonuna erişebilirsiniz.
Table nesnesinin Cell fonksiyonuyla, veya bir satırın/sütunun Cells koleksiyon özelliğinden eriştiğiniz bir hücre aslında Cell türünden bir nesnedir.
Cell nesnesinin Merge fonksiyonuyla bu hücreyi başka hücrelerle birleştirebilirsiniz.
Tek argüman MergeTo ile birleştirilecek hücre bloğunun kapsayacağı sağ alt hücreyi temsil eden Cell nesnesini iletirsiniz.
Cell nesnesinin Split fonksiyonuyla da eriştiğiniz hücreyi alt hücrelere bölersiniz.
NumRows argümanı ile hücreyi kaç satıra böleceğinizi,
NumColumns argümanıyla da hücreyi kaç sütuna böleceğinizi belirtirsiniz.
Hücre birleştirme veya bölme işlemlerinden sonra tablo düzeninin ne şekil alacağınız gözden kaçırmamanız çok önemlidir; sonraki komutlarda kullanacağınız sıra numaralarını ona göre değiştirmeniz gerekecektir. Örneğin, bir satrın dört hücresini ikişer ikişer birleştirirseniz, birleşik hücrelerin sıra numaraları 1 ve 2 olacaktır.
Farklı satır veya sütunlara ait hücreleri birleştirdikten veya böldükten sonra artık herhangi bir satıra veya sütuna sıra numarasıyla erişmeyi denemeseniz, daha iyi olur.
Boş veya içeriği olan bir Word belgesi açın.
Belge içeriğine boş bir tablo ekleyin.
Bu belgeye ait “ThisDocument” VBA projesinde bir altyordam yaratın.
Table türü bir nesne tanımlayın:
Dim tablo As Table
Gerektiğinde bir satıra veya bir sütuna erişmenizi sağlayacak nesneler tanımlayın:
Dim satir As Row
Dim sutun As Column
Merge fonksiyonuyla hücre birleştirecek komutlar yazın. Örneğin, 1. satırın 2. hücresinden 9. hücresine kadarki hücrelerin hepsini birleştirmek için şöyle bir komut yazabilirsiniz:
Set satir = tablo.Rows(1)
satir.Cells(2).Merge MergeTo:=satir.Cells(9)
Komşu satırlara ait hücreleri birleştirecekseniz, Merge fonksiyonunu bloğun sol üst köşesinde kalacak hücreyi temsil eden Cell nesnesinin aracılığıyla çağırın. MergeTo argümanı için de sağ alt köşede kalacak hücreyi temsil eden Cell nesnesini iletin.
Böyle bir işlemi bir döngüyle tekrarlayabilirsiniz, ama hücre sıra numaralarını arttırırken dikkatli olun; her birleştirmeden sonra sütun sayısı azalacaktır.
For h = 2 To 5
tablo.Cell(8, h).Merge MergeTo:=tablo.Cell(9, h + 1)
Next h
Birleştireceğiniz hücrelere bir satır veya bir sütun referansıyla erişmeyi denemeyin: onun yerine, yukarıdaki gibi, tabloyu temsil eden Table nesnesi aracılığıyla çağıracağınız Cell fonksiyonunu kullanın.
Split fonksiyonuyla hücre bölecek komutlar yazın, ama işlemleri bir döngüyle tekrarlıyorsanız, hücre sıra numaralarını oluşacak son düzene göre arttırmayı unutmayın.
NumColumns argümanıyla hücreyi kaç sütuna böleceğinizi,
'Her bölünen hücre yerine iki hücre gözükeceği için 2şer atlıyoruz.
For h = 2 To 16 Step 2
satir.Cells(h).Split NumColumns:=2
Next h
NumRows argümanıyla da hücreyi kaç satıra böleceğinizi belirtin:
'Yeni bir satır yaratacağımız için bu işlemi satıra sıra numarasıyla erişerek yapamıyoruz.
For h = 2 To 9
tablo.Cell(7, h).Split NumRows:=2
Next h
Aşağıda son halini verdiğimiz altyordam haftanın 7 günü için çalışma saat dilimlerini gösteren bir tablo ekliyor ve farklı günler için farklı çalışöma düzenleri olduğunu gösterecek şekilde hücreler bölüyor veya birleştiriyor.
Kaynak Dosya: “TablodaHucreDuzenlemeleri.docm”
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 TablodaHucreDuzenlemeleri()
Dim tabloKonum As Range
Set tabloKonum = Me.Range(Me.Content.End - 1, Me.Content.End - 1)
Dim tablo As Table
Set tablo = Me.Tables.Add(tabloKonum, 9, 9)
'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 Column
Set sutun = tablo.Columns(1)
Dim i As Integer
For i = 3 To 9
sutun.Cells(i).Range.Text = WeekdayName(i - 2)
Next
'İlk satır için yazı tipi kalın harfli ve 14 punto olacak.
Dim satir As Row
Set satir = tablo.Rows(1)
satir.Range.Font.Size = 14
satir.Range.Font.Bold = True
'Saat dilimlerinin yazılacağı hücrelerin üzerinde
'birleştirilmiş bir başlık satırı oluşturuyoruz.
satir.Cells(2).Merge MergeTo:=satir.Cells(9)
'Birleştirdiğimiz hücre artık bu satırın 2. hücresi
satir.Cells(2).Range.Text = "Saatler"
satir.Cells(2).Range.Paragraphs(1).Alignment = wdAlignParagraphCenter
Set satir = tablo.Rows(2)
satir.Range.Font.Size = 12
satir.Range.Font.Bold = True
satir.Cells(1).Range.InsertBefore ("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(h).Range.Text = 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 = tablo.Rows(3) ' Pazartesi için 2şer saatlik vardiya dilimleri olsun.
satir.Cells(2).Merge MergeTo:=satir.Cells(3)
satir.Cells(3).Merge MergeTo:=satir.Cells(4)
satir.Cells(4).Merge MergeTo:=satir.Cells(5)
satir.Cells(5).Merge MergeTo:=satir.Cells(6)
Set satir = tablo.Rows(4) ' Salı için vardiyalar 3-1-3-1 olsun.
satir.Cells(2).Merge MergeTo:=satir.Cells(4)
satir.Cells(4).Merge MergeTo:=satir.Cells(6)
Set satir = tablo.Rows(5) ' Çarşamba için vardiyalar 4-4 olsun.
satir.Cells(2).Merge MergeTo:=satir.Cells(5)
satir.Cells(3).Merge MergeTo:=satir.Cells(6)
Set satir = tablo.Rows(6) ' Perşembe için 30ar dakikalık vardiyalar olsun.
'Her bölünen hücre yerine iki hücre gözükeceği için 2şer atlıyoruz.
For h = 2 To 16 Step 2
satir.Cells(h).Split NumColumns:=2
Next h
'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 5
tablo.Cell(8, h).Merge MergeTo:=tablo.Cell(9, h + 1)
Next h
'Cuma için paralel vardiyalar olsun.
'Yeni bir satır yaratacağımız için bu işlemi
'satıra sıra numarasıyla erişerek yapamıyoruz.
For h = 2 To 9
tablo.Cell(7, h).Split NumRows:=2
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.
tablo.Cell(1, 1).Merge MergeTo:=tablo.Cell(2, 1)
'Hücre içeriğindeki metin alta hizalanmış gözüksün.
tablo.Cell(1, 1).VerticalAlignment = wdCellAlignVerticalBottom
'Hücre düzenlemelerinin son halini göstermek için
'tablo dış ve iç kenarlıklarını görünür kılalım:
tablo.Borders.OutsideLineStyle = wdLineStyleSingle
tablo.Borders.InsideLineStyle = wdLineStyleSingle
End Sub
Bu altyordam bir kez çalıştırıldıktan sonra oluşan tablo aşağıdaki gibi olacaktır:
Bu altyordamı ikinci kez çalıştırmayı denemeyin!
Yeni bir deneme yapacaksanız, önce tabloyu silin!
Ya da altyordamın başına önceden yaratılmış bir tablo varsa onu silecek komutlar ekleyin.