2011-11-22 17 views
6

में तिथियों के बीच अंतर कैसे प्राप्त करें मैं सिस्टम दिनांक और कार्यपत्रक में संग्रहीत दिनांक के बीच अंतर जानने का प्रयास कर रहा हूं। उन दोनों के बीच अंतर> 30 दिनों का है, तो परिणाम सच है, किसी और परिणाम झूठेवीबीए

Dim result as boolean 
Dim sDate as string 
sDate = Date 
if Worksheets("dates").Cells(1,1) - sDate > 30 then 'how do I do this? 
    result = true 
else 
    result = false 
end if 

मैं कैसे प्रणाली की तारीख और तारीख कार्यपत्रक में संग्रहीत के बीच के दिनों में अंतर का पता लगाने के हैं? वर्कशीट की तारीख भी पिछली तारीख हो सकती है।

+0

स्प्रेडशीट में संग्रहीत दिनांक मूल्य कैसा है? यानी 1 अप्रैल 2010, 01/30/2010 आदि – brettdj

+0

मुझे लगता है कि पाठ के रूप में। मिमी/डीडी/yyyy – Ank

उत्तर

23

मुझे आश्चर्य है कि क्यों मैं शायद ही कभी तारीख कार्यों का उपयोग कर लोगों को देखते हैं।

आप भी इस का उपयोग कर सकते हैं:

if DateDiff("d", date1, date2) > 30 then 

इस मामले में, DATE1 CDate होगा और DATE2 sdate होगा (या तो साथ डाली (कार्यपत्रक ("दिनांक") कोशिकाओं (1,1)।) CDate या एक तारीख के रूप में dim'd के रूप में जेफ कहा

"डी" मतलब है कि हम दिन में अंतर हो रही है यहाँ अंतराल साल के लिए, महीने, आदि VBA में कर रहे हैं:।।

yyyy - Year 
q - Quarter 
m - Month 
y - Day of year 
d - Day 
w - Weekday 
ww - Week 
h - Hour 
n - Minute 
s - Second 
3

इस प्रयास करें:

if CDate(Worksheets("dates").Cells(1,1)) - sDate > 30 then 
+0

मुझे सीडीएट की तरह कुछ नहीं पता था !! lol .. मुझे इसे आज़माएं .. – Ank

+0

सीडीएट (वर्कशीट्स ("तिथियां")। सेल (1,1)) एक प्रकार का मेल नहीं खाता है! – Ank

+0

@ अंकुर - ओह, एसडीएटी को भी एक तिथि होने की जरूरत है। मुझे लगता है कि यह एक स्ट्रिंग है। दरअसल, यदि आप किसी तारीख को एसडीएटी बदलते हैं, तो आपको सीडीएटी कास्ट की आवश्यकता नहीं हो सकती है। –

1

sDate एक एसटीआरआई है एनजी, जो एक असली तारीख नहीं है!

सीडीएटी() फ़ंक्शन या डेटवैल्यू() फ़ंक्शन का उपयोग करके अपनी स्ट्रिंग को किसी तारीख में कनवर्ट करें।

हालांकि, इस तरह के रूपांतरण में एक चेतावनी है। ये रूपांतरण निम्नलिखित संरचनाओं संभाल लेंगे:

yyyy/mm/dd 
yyyy/m/d 
mm/dd/yyyy 
m/d/yyyy 

इन नहीं किया जाएगा सही ढंग से

dd/mm/yyyy 
d/m/yyyy 

परिवर्तित और किसी भी 2 अंकों साल प्रयोग से बचें।

मैं दिनांक रूपांतरण के लिए डेटसेरियल() फ़ंक्शन का उपयोग करने की सलाह दूंगा।

तो आपके कोड के संबंध में, यह मानते हुए कि योर शीट पर मान वास्तव में तिथियां हैं (निश्चित होने के लिए, बस कॉलम का चयन करें और संख्या प्रारूप को सामान्य में बदलें। यदि वे वास्तविक तिथियां हैं, तो प्रत्येक एक शुद्ध संख्या प्रदर्शित करेगा। याद रखें अपना दिनांक प्रारूप वापस पाने के लिए यूएनडीओ को हिट करने के लिए)

Dim result As Boolean 

If Worksheets("dates").Cells(1, 1).Value - Date > 30 Then 
    result = True 
Else 
    result = False 
End If