Excel formülü: Tarihler arasında haftanın günlerini sayma -

İçindekiler

Genel formül

=SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT(start&":"&end)))=dow))

Özet

Haftanın günlerini (Pazartesi, Cuma, Pazar, vb.) İki tarih arasında saymak için birkaç işlevi kullanan bir dizi formülü kullanabilirsiniz: TOPLA ÇARPMA, HAFTA GÜNÜ, SATIR ve DOLAYLI. Gösterilen örnekte, E6 hücresindeki formül

=SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT(B6&":"&C6)))=D6))

Formülün genel sürümünde, başlangıç = başlangıç ​​tarihi, bitiş = bitiş tarihi ve dow = haftanın günü.

Açıklama

Temelde, bu formül, haftanın belirli bir gününde (dow) gelip gelmediklerini görmek için birkaç tarihi test etmek için WEEKDAY işlevini ve toplamı hesaplamak için SUMPRODUCT işlevini kullanır.

Bir tarih verildiğinde WEEKDAY, haftanın belirli bir gününe karşılık gelen 1 ile 7 arasında bir sayı döndürür. Varsayılan ayarlarla, 1 = Pazar ve 7 = Cumartesi. Yani, 2 = Pazartesi, 6 = Cuma vb.

Bu formülün püf noktası, Excel'deki tarihlerin yalnızca 1 Ocak 1900'de başlayan seri numaraları olduğunun anlaşılmasıdır. Örneğin, 1 Ocak 2016 seri numarası 42370 ve 8 Ocak 42377'dir. Excel'deki tarihler yalnızca bir tarih sayı biçimi uygulanır.

Öyleyse soru şu olur - Haftanın ilgili günlerini bulmak için WEEKDAY işlevine besleyebileceğiniz bir tarih dizisini nasıl oluşturabilirsiniz?

Cevap, SATIR'ı aşağıdaki gibi DOLAYLI işlevlerle kullanmaktır:

ROW(INDIRECT(date1&":"&date2))

DOLAYLI, "42370: 42377" birleştirilmiş tarihlerin satır numaraları olarak yorumlanmasına izin verir. Ardından SATIR işlevi şöyle bir dizi döndürür:

(42370;42371;42372;42373;42374;42375;42376;42377)

WEEKDAY işlevi bu sayıları tarih olarak değerlendirir ve şu diziyi döndürür:

(6;7;1;2;3;4;5;6)

bu, haftanın verilen gününe göre test edilir (bu durumda D6'dan itibaren 6). Testin sonuçları çift tire ile 1'lere ve 0'lara dönüştürüldüğünde, bu dizi SUMPRODUCT tarafından işlenir:

(1;0;0;0;0;0;0;1)

Hangi 2 döndürür.

SEQUENCE ile

Yeni SIRA işlevi ile bu formül bir şekilde şu şekilde basitleştirilebilir:

=SUMPRODUCT(--(WEEKDAY(SEQUENCE(end-start+1,1,start,1))=dow))

Bu sürümde, DOLAYLI veya SATIR'a gerek kalmadan doğrudan tarih dizisini oluşturmak için SIRALI'yı kullanıyoruz.

Ilginç makaleler...