Microsoft Excel'de VBA kullanarak iki tarih arasındaki iş günü sayısını hesaplayın

Anonim

Bu yazımızda, Cumartesi ve Pazar günleri dahil veya hariç, belirtilen tarihler arasındaki çalışma günlerini hafta tatili olarak saymak için Kullanıcı Tanımlı Fonksiyon (UDF) oluşturacağız.

Bu örnek için ham veriler bir başlangıç ​​tarihi ve bir bitiş tarihinden oluşur. Bu tarihler arasındaki çalışma günlerini saymak istiyoruz.

Tatil tarihlerini “Tatiller” sayfasında A sütununda belirtmiştik.

Excel'de, aralıklar arasındaki çalışma günlerinin sayısını saymak için TAMİŞGÜNÜ işlevi vardır.

TAMİŞGÜNÜ işlevinin sözdizimi

TAMİŞGÜNLERİ(BaşlangıçTarihi, BitişTarihi,[Tatiller])

Bu işlev, iş günü sayısını sayarken Tatiller listesinde belirtilen tarihi hariç tutacaktır.

Bu işlev, Cumartesi ve Pazar günlerini varsayılan olarak Haftalık izinler olarak kabul eder, bu nedenle yalnızca bir Hafta tatilimiz olması durumunda çalışma günlerini sayamayız.

Aralıklar arasındaki çalışma günlerini saymak için “CountWorkingDays” özel fonksiyonunu oluşturduk. Bu özel işlev, TAMİŞGÜNLERİ işlevinin sorununu ele alır. Bu fonksiyonda, Cumartesi veya Pazar günleri sadece bir Hafta tatil olsa bile çalışma günlerini sayabiliriz.

Özel işlevin sözdizimi

CountWorkingDays (StartDate, EndDate, InclCumartesileri, InclSundays)

InclSaturdays ve InclSundays isteğe bağlı parametrelerdir. Varsayılan olarak, her ikisinin de TRUE değerleri vardır. Cumartesi ve Pazar günlerini iş günü olarak değiştirmek için ilgili parametrenin değerini YANLIŞ olarak değiştirin.

Microsoft, Excel 2010 ile birlikte TAMİŞGÜNÜ.ULUSL işlevini tanıttı. Bu işlev, TAMİŞGÜNLERİ işlevinin sorununu ele alır. Bu fonksiyonda Hafta izin günlerini belirtebiliriz. Hafta tatili olarak bir veya iki gün belirleyebiliriz.

NETWORKDAYS.INTL işlevinin sözdizimi

TAMİŞGÜNÜ.ULUSL(BaşlangıçTarihi, BitişTarihi, [Hafta Sonu], [Tatiller])

Hafta sonu parametresinde Hafta izin günleri belirtebiliriz.

Bu örnekte, çalışma günlerini saymak için yukarıdaki üç işlevin hepsini kullanacağız.

Mantıksal açıklama

“CountWorkingDays” fonksiyonunda öncelikle parametrede verilen tarihin belirtilen tatil listesinde olup olmadığını kontrol ediyoruz. Tatil listesinde tarih varsa, o gün iş günü sayısından sayılmaz. Tatil listesinde tarih yoksa, verilen tarihin Cumartesi mi Pazar mı olduğunu kontrol edin. Sağlanan giriş parametresine göre cumartesi veya pazar günlerini tatil olarak dahil edip etmeyeceğinizi kontrol edin.

Kod açıklaması

Set RngFind = Çalışma Sayfaları("Tatiller").Columns(1).Find(i)

Yukarıdaki kod, tatil listesinde belirtilen tarihin bulunduğu yeri bulmak için kullanılır.

Eğer RngFind Hiçbir Şey Değilse

Son İçin Git

Bitir

Yukarıdaki kod, tatil listesinde belirtilen tarihin olup olmadığını kontrol etmek için kullanılır. Koşul DOĞRU dönerse, o gün iş günü sayısında sayılmaz.

Lütfen kod için aşağıdan takip edin

 Option Explicit Function CountWorkingDays(StartDate As Long, EndDate As Long, Opsiyonel InclCumartesi As Boolean = True, _ Opsiyonel InclSundays As Boolean = True) 'Değişkenleri Bildirme Dim RngFind As Range Dim i As Long For i = StartDate - EndDate On Hatası Devam ' Tatiller sayfasında belirtilen tarihin bulunduğu yeri bulma Set RngFind = Worksheets("Holidays").Columns(1).Find(i) On Error GoTo 0 'Belirtilen tarihte tatil olup olmadığını kontrol etme If Not RngFind Is Nothing O zaman Son Bitişe Git Belirli bir tarihte Cumartesi olup olmadığı kontrol ediliyorsa Cumartesi günleri dahil ise Hafta içi(i, 2) = 6 ise Son Son Bitişe Git Belirli bir tarihte Pazar olup olmadığı kontrol ediliyorsa Pazar dahil ise Hafta içi ise(i, 2) = 7 O zaman Son Sonuca Git Eğer Sonsa CountWorkingDays = CountWorkingDays + 1 ForLast: Sonraki Son İşlev 

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