2016-04-06 17 views
1

Önceki yılın doğru eşdeğer tarihini hesaplayan bir çalışma sayfası formülüm var. Örneğin, işyerindeki rakamları bildirirken, 05/04/2016 tarihine kadar 05/04/2015 ile kıyaslamıyoruz çünkü 2015'teki 5'inci Pazar günüydü ve bu sene Salı idi. Bu nedenle 07/04/2015 ile karşılaştırıyoruz.Excel VBA - Eşdeğer Önceki Yıl Tarih

Artık yıllardan bu yana her zaman +2 gün ileride olmaz (ya da -2 geriye, hangisine bakmak isterseniz).

Bu nedenle, önceki yılın aynı haftanın Hafta Başlangıcı tarihini hesaplayan bu çalışma sayfası formülünü oluşturdum ve bu yıl 1'inci haftayı eklerim.

=(MAX(DATE(B2,1,1),DATE(B2,1,1)-WEEKDAY(DATE(B2,1,1),2)+(WEEKNUM(E3,2)-1)*7+1))+(WEEKDAY(E3,2)-1) 

B2 = 2015 

E3 = 05/04/2016 

ben gibi kendisine herhangi bir değişkeni geçmek ve önceki yıla eşdeğer tarihini çalışmak, böylece bir VBA Fonksiyon içine bu çalışma sayfası formülü dönüştürmek istediğiniz?

Ancak, bu işlevlerin bazıları VBA'da kullanılabilir görünmüyor, Weekday olduğunu biliyorum ve DateSerial için DATE takas etmem gerekiyor. Ancak MAX görünmüyor VBA'da kullanılabilir bir işlev midir? Ayrıca WEEKNUM hakkında bilmiyorum?

herkes bunu takdir gerçekten istediğiniz bir işleve bu formülü dönüştürmek yardımcı olabilir, bu ana kadar ne var:

Function calcMTDDayDate(MTDDate As Date) As Date 

End Function 

Eh .... En azından bir başlangıç ​​yaptı ...

+0

bak. Çalışma sayfası işlevlerinin doğrudan kullanımına izin verir. –

cevap

1

Bir yılı, aylar veya aylar yerine 52 hafta olarak tanımlarsanız, bu, hesaplamayı çok daha kolay hale getirir ve DateAdd işlevini kullanabilirsiniz.

örn: Worksheet.Evaluate() Fonksiyonu içine

Function calcMTDDayDate(MTDDate As Date) As Date 
    calcMTDDayDate = DateAdd("ww", -52, MTDDate) 
End Function 
+0

oldukça kaygan, çok teşekkürler – megatron77