Bu yazımızda iki tarih arasındaki hafta içi günleri çıkarmak için bir makro oluşturacağız.
Bu örnekte makroyu çalıştırmadan önce başlangıç ve bitiş tarihini belirtmemiz gerekiyor. Makro, J8 hücresinden başlangıç tarihi değerini ve J9 hücresinden bitiş tarihi değerini seçer. Başlangıç ve bitiş tarihi belirlendikten sonra “Gönder” butonuna basılarak veya Alt + F8 kısayol tuşlarına basılarak makro çalıştırılabilir.
Makro çalıştırıldığında, yeni bir sayfada iki tarih arasındaki hafta içi günleri döndürür. Yeni eklenen çalışma sayfası, A sütununda hafta içi günleri ve ardından B sütununda ilgili tarihi içerir. B sütunundaki çıktı tarihi gg.aa.yy biçiminde olacaktır.
Her Hafta, birbirini izleyen iki hafta arasında ayrım yapmak için boş bir satır izleyecektir.
Mantıksal açıklama
Makroda, hafta içi ve hafta sonlarını ayırt etmek için Hafta içi işlevini kullandık. Biçim işlevi, tarihi istenen biçimde görüntülemek için kullanılır.
hafta içi işlevi
Hafta içi işlevi, haftanın gününü temsil eden bir tamsayı değeri döndürür.
Sözdizimi
Hafta içi( Date_Value, [First_Day_Of_Week] )
Tarih_Değeri haftanın gününü bulmak istediğiniz tarih değerini belirtir.
Haftanın ilk günü haftanın hangi gününün haftanın ilk günü olarak kabul edileceğini belirtir. Girdi olarak bir tamsayı değeri veya FirstDayOfWeek numaralandırmasından seçilen değeri alır. Herhangi bir değer belirtilmezse, varsayılan değer olarak FirstDayOfWeek.Sunday kullanılır.
numaralandırma değeri |
Tamsayı değeri |
Uyarılar |
Haftanın İlk Günü.Sistem |
0 |
Sistem ayarlarında belirtilen haftanın ilk günü |
Haftanın İlk Günü.Pazar |
1 |
Pazar (varsayılan) |
Haftanın İlk Günü.Pazartesi |
2 |
Pazartesi |
Haftanın İlk Günü.Salı |
3 |
Salı |
Haftanın İlk Günü.Çarşamba |
4 |
Çarşamba |
Haftanın İlk Günü.Perşembe |
5 |
Perşembe |
Haftanın İlk Günü.Cuma |
6 |
Cuma |
Haftanın İlk Günü.Cumartesi |
7 |
Cumartesi |
Makronun kodundan da görüldüğü gibi, Pazartesiyi haftanın ilk günü olarak belirtmek için Weekday(i, 2) kullandık.
Biçim işlevi
Format işlevi, girdi olarak bir tarih ifadesini alır ve onu biçimlendirilmiş bir dize olarak döndürür.
Biçim işlevinin sözdizimi
Biçim(Tarih_Değeri,biçim)
Tarih_Değeri tarih veri türünün değerini belirtir.
Biçim ne tür bir tarih biçiminin gerekli olduğunu belirtmek için dize değerini kullanır.
Aşağıdaki tablo, gerekli tarih/saat biçimlerini oluşturmak için kullanılabilecek bazı popüler karakterleri tanımlar:
Karakter |
Açıklama |
NS |
günü başında sıfır olmadan bir sayı olarak görüntüler (1 - 31) |
dd |
günü, başında sıfır olan bir sayı olarak görüntüler (01 - 31) |
ddd |
günü bir kısaltma olarak görüntüler (Paz - Cts) |
dddd |
günü tam ad olarak görüntüler (Pazar - Cumartesi) |
w |
haftanın gününü sayı olarak görüntüler (Pazar için 1'den Cumartesi için 7'ye kadar) |
ww |
yılın haftasını sayı olarak görüntüler (1 - 54) |
m |
ayı, başında sıfır olmadan (1 - 12) bir sayı olarak görüntüler |
mm |
ayı, başında sıfır olan bir sayı olarak görüntüler (01 - 12) |
mmm |
ayı kısaltma olarak görüntüler (Ocak - aralık) |
mmmm |
ayı tam ay adı olarak görüntüler (Ocak - Aralık) |
Q |
yılın çeyreğini sayı (1 - 4) olarak görüntüler |
y |
yılın gününü sayı olarak görüntüler (1 - 366) |
yy |
yılı 2 basamaklı bir sayı olarak görüntüler (00 - 99) |
yyyy |
yılı 4 basamaklı bir sayı olarak görüntüler (100 - 9999) |
H |
saati, başında sıfır olmadan bir sayı olarak görüntüler (0 - 23) |
hh |
saati, başında sıfır olan bir sayı olarak görüntüler (00 - 23) |
n |
dakikayı başında sıfır olmadan bir sayı olarak görüntüler (0 - 59) |
nn |
dakikayı, başında sıfır olan bir sayı olarak görüntüler (00 - 59) |
s |
saniyeyi başında sıfır olmadan bir sayı olarak görüntüler (0 - 59) |
ss |
saniyeyi, başında sıfır olan bir sayı olarak görüntüler (00 - 59) |
Her hafta sonunda boş satır bırakmak için hafta içi fonksiyonunu kullanarak Pazarları kontrol ettik ve bir sonraki satır boş kalacak şekilde “StartingRow” değişkeninin değerini 1 artırdık.
Makronun kodunda görüldüğü gibi Format fonksiyonunu iki defa farklı şekillerde kullandık. İlk olarak, haftanın gününü almak için Format(i, "ddd") kullandık ve ikinci olarak, tarihi gg.aa.yyyy formatında almak için Format(i, "dd.mm.yy") kullandık.
Kod açıklaması
Çalışma Sayfası Olarak Yeni Çalışma Sayfası Karart
NewWorksheet = Çalışma Sayfaları olarak ayarlayın.Add
Yukarıdaki kod, Çalışma Sayfası nesne adını “NewWorksheet” olarak bildirmek için kullanılır. Worksheets.Add yöntemi, Worksheets koleksiyonuna yeni çalışma sayfasını eklemek için kullanılır. Set ifadesi, bildirilen nesneyi yeni eklenen sayfayla başlatmak için kullanılır.
i için = Başlangıç Tarihinden Bitiş Tarihine
FOR döngüsü, başlangıç tarihinden bitiş tarihine kadar döngü yapmak için kullanılır.
Hafta içi(i, 2) < 6 ise
IF deyimi, koşulu kontrol etmek ve koşula göre kodu yürütmek için kullanılır. Yukarıdaki koşul, Hafta içi işlevi tarafından değer dönüşünü kontrol edecektir. 6'dan küçükse, EĞER koşulu doğru döner ve EĞER deyiminin içindeki kod yürütülür. Aksi takdirde atlanacaktır.
Başlangıç Satırı = 1
Başlangıç Satırı = Başlangıç Satırı + 1
StartRow değişkeni, çalışma sayfasındaki satırlar arasında gezinmek için kullanılır. Başlangıçta, değişken ilk satıra başlatılır. EĞER ifadesinin her başarılı yürütülmesiyle, değişken değeri sayfada bir sonraki satıra taşınarak 1 artırılır.
Hücreler(Başlangıç Satırı, 1)
Cells özelliği, çalışma sayfasındaki belirli bir hücreye başvuruda bulunmak için kullanılır. Cells(row_number,column_number) parametre olarak belirli bir satır numarası ve sütun numarası girilerek çalışma sayfasındaki herhangi bir hücreye başvuruda bulunmak için kullanılabilir. Cells(StartingRow, 1) kodunda, 1 ilk sütunu belirtir ve “StartingRow” değişkeni satır numarasını tanımlar.
Makroda kodlarla birlikte yorumlara da yer verdiğim için kodlar kolayca anlaşılabilir.
Lütfen kod için aşağıdan takip edin
Seçenek Explicit Sub ExtractWeekdays() 'Dim StartDate As Date, EndDate As Date olarak iki Tarih veri türü değişkeni bildiriliyor 'Çalışma sayfası değişkeni Dim NewWorksheet As Worksheet Dim StartRow, i As Long 'Çalışma sayfasından başlangıç tarihi ve bitiş tarihi değerleri alınıyor StartDate = Sheets( "Makro").Range("J8").Value EndDate = Sheets("Makro").Range("J9").Value 'Çıktı için başlangıç satır numarasının başlatılması StartRow = 1 'Yeni çalışma sayfası ekleme Yeni Çalışma Sayfası Seti = Çalışma Sayfaları. Add For i = StartDate To EndDate 'Hafta içi mi yoksa hafta içi mi olduğunu kontrol etmek için Hafta içi yöntemini kullanarak ve Hafta içi(i, 2) < 6 Sonra 'Yeni eklenen çalışma sayfasına değer ekleme' Tarih değerini biçimlendirmek için Format yöntemi kullanılır NewWorksheet.Cells( StartRow, 2) = Format(i, "dd.mm.yy") NewWorksheet.Cells(StartingRow, 1) = Format(i, "ddd") 'Bir sonraki satıra geçmek için StartRow değişken değeri güncelleniyor StartRow = StartRow + 1 End Eğer 'Hafta sonu için boş satır ekleme Eğer Hafta içi(i, 2) = 7 ise, Başlangıç Satırı = Başlangıç Satırı + 1 Bitiş Eğer N ise ext i Set NewWorksheet = Nothing End Sub
Bu blogu beğendiyseniz, Facebook'ta arkadaşlarınızla paylaşın. Ayrıca bizi Twitter ve Facebook'ta da takip edebilirsiniz.
Sizden haber almayı çok isteriz, işimizi nasıl geliştirebileceğimizi ve sizin için nasıl daha iyi hale getirebileceğimizi bize bildirin. E-posta sitesinde bize yazın