PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : [حل شده] اضافه کردن عدد ماه به تاریخ در اکسل



farzadomid
2016/01/11, 17:20
با سلام
ضمن عرض خسته نباشید به دوستان
میخواستم ببینم برای اضافه کردن یک عدد به تاریخ در اکسل چه باید کرد
مثلا می خواهیم بدانیم 39 ماه به تا ریخ12/05/94 اضافه کنیم چه تاریخی می شود
اگر عدد ماه مضربی از دوازده باشد مشکلی نیست با فرمولهای موجود میشود اگه نه چه باید کرد ؟
با تشکر

generalsamad
2016/01/11, 17:47
با سلام
نمیدونم چنین تابعی وجود داشته باشه که ماه رو بشه جمع زد
ولی در صورتی که توابع شمسی روی سیستم داشته باشید میتونید به یک تاریخ خاص روز اضافه کنید که در آرگومان دوم وارد میشود



=j_addday(a1;900;1)


این فرمول به تاریخی که در سلول a1 وارد شده 900 روز اضافه میکنه و تاریخ جدید رو بدست می آورد.

برای سوالتون با ترکیب توابع میشه به جواب رسید ولی تابع زمانی که به تنهائی که این کار رو انجام بده من تا الان ندیدم

amir_ts
2016/01/11, 21:06
با سلام
این فایل رو خودم تهیه کردم ببینید.قسمت آبی رنگ رو می تونید مخفی کنید.

=if(and(int($e$16/12)<>0;mod($e$16;12)<>0;mid($e$13;6;2)+mod($e$16;12)>12);mid($e$13;1;4)+int(e16/12)+1;if(and((mod($e$16;12)<>0);($e$16<12);mid($e$13;6;2)+mod($e$16;12)>12);mid($e$13;1;4)+1;mid($e$13;1;4)+int($e$16/12)))

abootorab
2016/01/12, 00:43
با سلام
ضمن عرض خسته نباشید به دوستان
میخواستم ببینم برای اضافه کردن یک عدد به تاریخ در اکسل چه باید کرد
مثلا می خواهیم بدانیم 39 ماه به تا ریخ12/05/94 اضافه کنیم چه تاریخی می شود
اگر عدد ماه مضربی از دوازده باشد مشکلی نیست با فرمولهای موجود میشود اگه نه چه باید کرد ؟
با تشکر

با درود و تشکر از دوستان عزیز جناب generalsamad و جناب amir_ts
بنده جهت رفع این مشکل قبلا تابعی شبیه توابع شمسی موجود، به نام J_ADDMONTH تهیه کردم، برای استفاده از این تابع یک ماژول ایجاد کنید و کد زیر را درون آن کپی کنید و سپس در محیط اکسل از آن استفاده نمایید.

شکل کلی تابع:

J_ADDMONTH(Jdate; Number; [Mode])
این تابع دارای 3 آرگومان می باشد:

Jdate: تاریخ اولیه (اجباری)
Number: تعداد ماه هایی که می خواهیم به تاریخ اولیه افزوده شود. (اجباری)
[Mode]: نوع نوشتاری تاریخ جدید. به این صورت که اگر مقدار Mode را وارد نکنیم و یا مقدار آن را صفر قرار دهیم سال تاریخ بدست آمده بصورت 2رقمی نوشته میشود و اگر مقدار 1 وارد کنیم سال تاریخ بدست آمده بصورت 4رقمی نوشته میشود. (اختیاری)

نکته:
در این تابع روز تاریخ بدست آمده بر اساس ماه جدید بصورت خودکار تنظیم میگردد همچنین سالهای کبیسه نیز جهت تنظیم ماه دوازدهم سال کنترل میکند.
به عنوان مثال تاریخ اولیه را 1394/05/31 وارد کنید، حال اگر 4 ماه به آن اضافه کنیم تاریخ جدید میشود 1394/09/30 ، در تاریخ جدید روز بر اساس ماه جدید نمی تواند 31 باشد و بصورت خودکار این تغییر اعمال میشود. یا اگر به تاریخ اولیه 7 ماه اضافه کنیم تاریخ جدید میشود 1394/12/29 و اگر به همین تاریخ اولیه 19 ماه اضافه کنیم تاریخ جدید میشود 1395/12/30 (چون سال 1395 سال کبیسه می باشد)

مجوزها:
در ورود تاریخ اولیه می بایست تاریخ را از راست به چپ و بصورت روز و ماه و سال وارد کنید (روز/ماه/سال) و فقط مجاز به استفاده از علامت / برای جدا کننده اجزای تاریخ هستید. در نحوه ورود اجزای تاریخ محدودیتی وجود ندارد و میتوانید روز و ماه را بصورت x یا xx و سال را بصورت x یا xx یا xxxx وارد کنید. در صورتیکه سال تاریخ را بصورت x یا xx وارد کنید و بخواهید سال تاریخ بدست آمده 4رقمی باشد (Mode=1) مبنای تاریخ سال 1300 در نظر گرفته میشود.

کد تابع:


Function J_ADDMONTH(Jdate As String, Number As Integer, Optional Mode As Integer) As String
Dim Slash1, Slash2 As Integer
Dim jRoz, jMah, jSal As String
Dim RozMah As Integer
Dim Kbs As Boolean

On Error Resume Next
Slash1 = InStr(1, Jdate, "/")
Slash2 = InStr(Slash1 + 1, Jdate, "/")
If Slash1 = 0 Or Slash2 = 0 Then
J_ADDMONTH = 1 / 0
Exit Function
End If

jRoz = Mid(Jdate, Slash2 + 1)
jMah = Mid(Jdate, Slash1 + 1, Slash2 - Slash1 - 1)
jSal = Mid(Jdate, 1, Slash1 - 1)
If Len(jSal) <= 2 Then jSal = jSal + 1300

If Number >= 0 Then
For i = 1 To Number
jMah = jMah + 1
If jMah > 12 Then
jSal = jSal + 1
jMah = 1
End If
Next i
ElseIf Number < 0 Then
For i = 1 To -(Number)
jMah = jMah - 1
If jMah < 1 Then
jSal = jSal - 1
jMah = 12
End If
Next i
End If

Select Case Val(jSal) Mod 33
Case 1, 5, 9, 13, 17, 22, 26, 30
Kbs = True
Case Else
Kbs = False
End Select

Select Case jMah
Case 7, 8, 9, 10, 11
If jRoz = "31" Then jRoz = "30"
Case 12
If Kbs = True Then
If jRoz = "31" Then jRoz = "30"
Else
If jRoz = "31" Or jRoz = "30" Then jRoz = "29"
End If
End Select

If Len(jRoz) < 2 Then jRoz = "0" & jRoz
If Len(jMah) < 2 Then jMah = "0" & jMah
If Len(jSal) < 2 Then jMah = "0" & jSal

If Mode = 1 Then
J_ADDMONTH = jSal & "/" & jMah & "/" & jRoz
ElseIf Mode = 0 Then
J_ADDMONTH = Right(jSal, 2) & "/" & jMah & "/" & jRoz
End If
End Function



امیدوارم خوب توضیح داده باشم و برای دوستان مفید واقع گردد.

farzadomid
2016/01/12, 10:28
با تشکر
از دوستان

amir_ts
2016/01/12, 10:38
با سلام
دوست عزیز اگه مشکلی نیست، تیک حل شده رو بزنید.