کار با تاریخهای شمسی و میلادی در اکسل
کار با تاریخها در اکسل همیشه برای کاربران دردسر بزرگی بوده چون خود اکسل از تاریخ شمسی پشتیبانی نمیکنه. البته این قضبه به چند روش قابل حله که به ترتیب توضیح میدم:
۱- یکی از روشها اینه که از ویندوز ۱۰ به همراه آفیس ۲۰۱۶ استفاده بفرمایید که خود ویندوز ۱۰ تاریخ شمسی رو پشتیبانی میکنه و بالطبع این پشتیبانی شامل آفیس و از جمله اکسل هم میشه. اما این کار یک ایراد داره و اون هم اینه که برای تنظیم تاریخ ویندوز ۱۰ روی شمسی باید سایر تنظیمات زبانی ویندوز رو هم روی فارسی قرار بدید که در این صورت فرمولهای شما در نوار فرمول اکسل به هم میریزه. بعبارت دیگه تقویم فارسی فقط وقتی در دسترسه که زبان محلی ویندوز شما روی فارسی باشه و در اون صورت فرمولهای شما در فرمول بار بدرستی نمایش داده نمیشن. البته تاثیری در کارکرد فرمولها نداره و فقط خوانایی اونها رو پایین میاره
۲- راه حل دوم استفاده از توابع افزوده است. بهترین این نمونه توابع فکر میکنم کار شرکت فرساران باشه که میتونید از سایتشون دانلود کنید و روی سیستمتون نصب کرده و از تاریخهای شمسی (در هر نگارشی از اکسل) استفاده کنید. مشکل این روش هم اینه که فایلی که روی سیستم خودتون ایجاد میکنید فقط تا وقتی کار میکنه که روی سیستم خودتون اجرا بشه و در صورتی که روی سیستم دیگه ای بره که اکسل داره ولی افزونه تبدیل تاریخ رو نداره نمیتونید ازش استفاده کنید.
یک راه حل دیگر بسیار عالی برای کار روی تاریخهای شمسی از متن استفاده از مجموعه توابع افزوده اکسل تالانت است. در خصوص استخراج اعداد و تاریخها از داخل سلولهای متنی بیش از 10 تابع در این مجموعه وجود دارد.
[the_ad id=”28842″]
۳- راه بعدی استفاده از کدهای VBA در فایل اکسلتون هست. با افزودن این کدها به فایل اکسل خودتون میتونید تبدیل تاریخها رو علاوه بر سیستم خودتون در سیستمهای دیگه هم داشته باشید. برای اینکه کدهای شما که در فایلتون موجوده در سیستمهای دیگه اجرا بشه نیازی به نصب فایل خاصی نیست ولی باید اجازه اجرای کدهای ویژوال بیسیک رو در سیستم داشته باشیم و چون کدهای ویژوال بیسیک بالقوه میتونند حاوی کدهای مخرب باشند لذا بصورت پیشفرض سیستمها اجازه اجرای این کدها رو نمیدن و باید از طریق کاربر administrator این اجازه رو به برنامه داد که در شرکتهای با امنیت بالا کمی دردسر سازه.
برای دانلود کدهایی که باید به پروژه بچسبونید میتونید از این لینک و برای آموزش مربوطه از این لینک استفاده کنید.
'Çíä ãÊÛííÑ ãÞÏÇÑ ßáíß ÔÏå ÏÑ ÝÑã ÊÞæíã Ñæ ÈÕæÑÊ ÓÑÇÓÑí ÏÑ ÎæÏÔ ÐÎíÑå ãíßäå Public strDate As String '////////////////////////////////////// 'www.exceliha.ir ' ۱- ÊÚÑíÝ ßäíÏ Number(Long) ÇÓÊ ÑÇ ÈÕæÑÊ Date ÝíáÏåÇíí ßå äæÚ ÂäåÇ ' ۲- Çíä ÝíáÏåÇ ÑÇ ÈÕæÑÊ ۰۰۰۰/۰۰/۰۰ ÊäÙíã ßäíÏ InputMask ÎÇÕíÊ ' ÈÏáíá ۸ ÑÞãí ÏÑ äÙÑ ÑÝÊä ÝíáÏ ÊÇÑíÎ ¡ Çíä ÊæÇÈÚ ÊÇ ÓÇá ۱۹۹۹ ßÇÑÇíí ÏÇÑÏ ' ... ' ÊÇÑíÎ ÌÇÑí ÓíÓÊã ÑÇ Èå åÌÑí ÔãÓí ÊÈÏíá ãí ßäÏ Shamsi() ÊÇÈÚ ' ÈßÇÑ ÈÈÑíÏ Now() ÑÇ ãí ÊæÇäíÏ ÏÑ ÒÇÑÔÇÊ ÈÌÇí ÊÇÈÚ Dat() ÊÇÈÚ ' :ÈÑÇí ÌáæíÑí ÇÒ æÑæÏ ÊÇÑíÎ ÛáØ Èå ÏÑæä íß ÝíáÏ ÈÊÑÊíÈ ÒíÑ Úãá ãíßäíÏ ' :ÈÔßá ÒíÑ ÈßÇÑ ÈÈÑíÏ ValidationRule ÑÇ ÏÑ ÎÇÕíÊ ValidDate() ÊÇÈÚ ' ... ' ************************************************** *********** Public Function Rooz(F_Date As Long) As Byte 'Çíä ÊÇÈÚ ÚÏÏ ãÑÈæØ Èå ÑæÒ íß ÊÇÑíÎ ÑÇ ÈÑãÑÏÇäÏ Rooz = F_Date Mod 100 End Function '******************************************* Function Mah(F_Date As Long) As Byte 'Çíä ÊÇÈÚ ÚÏÏ ãÑÈæØ Èå ãÇå íß ÊÇÑíÎ ÑÇ ÈÑãÑÏÇäÏ Mah = Int((F_Date Mod 10000) / 100) End Function '******************************************* Public Function Sal(F_Date As Long) As Integer 'Çíä ÊÇÈÚ ÚÏÏ ãÑÈæØ Èå ÓÇá íß ÊÇÑíÎ ÑÇ ÈÑãÑÏÇäÏ Sal = Int(F_Date / 10000) End Function '******************************************* Public Function Kabiseh(ByVal OnlySal As Variant) As Byte 'æÑæÏí ÊÇÈÚ ÚÏÏ ÏæÑÞãí ÇÓÊ 'Çíä ÊÇÈÚ ßÈíÓå ÈæÏä ÓÇá ÑÇ ÈÑãíÑÏÇäÏ 'ÇÑ ÓÇá ßÈíÓå ÈÇÔÏ ÚÏÏ íß æ ÏÑÛíÑ ÇíäÕæÑÊ ÕÝÑ ÑÇ ÈÑ ãíÑÏÇäÏ Kabiseh = 0 If OnlySal >= 1375 Then If (OnlySal - 1375) Mod 4 = 0 Then Kabiseh = 1 Exit Function End If ElseIf OnlySal <= 1370 Then If (1370 - OnlySal) Mod 4 = 0 Then Kabiseh = 1 Exit Function End If End If End Function '******************************************* Function ValidDate(F_Date As Long) As Boolean Dim M, s, R As Byte ' Çíä ÊÇÈÚ ÇÚÊÈÇÑ íß ÚÏÏ æÑæÏí ÑÇ ÇÒ äÙÑ ÊÇÑíÎ åÌÑí ÔãÓí ÈÑÑÓí ãí ßäÏ ' ÑÇ ÈÑãí ÑÏÇäÏ False æÇÑ äÇãÚÊÈÑ ÈÇÔÏ True ÇÑ ÊÇÑíÎ ãÚÊÈÑ ÈÇÔÏ ValidDate = True s = Sal(F_Date) M = Mah(F_Date) R = Rooz(F_Date) '******** If F_Date < 10000101 Then ValidDate = False Exit Function End If If M > 12 Or M = 0 Or R = 0 Then ValidDate = False Exit Function End If If R > MahDays(s, M) Then ValidDate = False Exit Function End If End Function '******************************************* Public Function AddDay(ByVal F_Date As Long, ByVal Add As Integer) As Long Dim K, M, R, Days As Byte Dim s As Integer R = Rooz(F_Date) M = Mah(F_Date) s = Sal(F_Date) K = Kabiseh(s) 'ÊÈÏíá ÑæÒ Èå ÚÏÏ ۱ ÌåÊ ÇÏÇãå ãÍÇÓÈÇÊ æ íÇ ÇÊãÇã ãÍÇÓÈå Days = MahDays(s, M) If Add > Days - R Then Add = Add - (Days - R + 1) R = 1 If M < 12 Then M = M + 1 Else M = 1 s = s + 1 End If Else R = R + Add Add = 0 End If While Add > 0 K = Kabiseh(s) 'ßÈíÓå: ۱ æ ÛíÑ ßÈíÓå: ۰ Days = MahDays(s, M) 'ÊÚÏÇÏ ÑæÒåÇí ãÇå ÝÚáí Select Case Add Case Is < Days 'ÇÑ ÊÚÏÇÏ ÑæÒåÇí ÇÝÒæÏäí ßãÊÑ ÇÒ íß ãÇå ÈÇÔÏ R = R + Add Add = 0 Case Days To IIf(K = 0, 365, 366) - 1 'ÇÑ ÊÚÏÇÏ ÑæÒåÇí ÇÝÒæÏäí ÈíÔÊÑ ÇÒ íß ãÇå æ ßãÊÑ ÇÒ íß ÓÇá ÈÇÔÏ Add = Add - Days If M < 12 Then M = M + 1 Else s = s + 1 M = 1 End If Case Else 'ÇÑ ÊÚÏÇÏ ÑæÒåÇí ÇÝÒæÏäí ÈíÔÊÑ ÇÒ íß ÓÇá ÈÇÔÏ s = s + 1 Add = Add - IIf(K = 0, 365, 366) End Select Wend 'AddDay = (s * 10000) + (M * 100) + (R) AddDay = CLng(s & Format(M, "00") & Format(R, "00")) End Function '*********************************************** Public Static Function Shamsi() As Long 'ÊÇÑíÎ ÌÇÑí ÓíÓÊã ÑÇ Èå ÊÇÑíÎ åÌÑí ÔãÓí ÊÈÏíá ãí ßäÏ Dim Shamsi_Mabna As Long Dim Miladi_mabna As Date Dim Dif As Long 'ÏÑ ÇíäÌÇ ۷۸/۱۰/۱۱ ÈÇ ۲۰۰۰/۰۱/۰۱ ãÚÇÏá ÞÑÇÑÏÇÏå ÔÏå Shamsi_Mabna = 13781011 Miladi_mabna = #1/1/2000# Dif = DateDiff("d", Miladi_mabna, Date) If Dif < 0 Then MsgBox "ÊÇÑíÎ ÌÇÑí ÓíÓÊã ÔãÇ äÇÏÑÓÊ ÇÓÊ , ÂäÑÇ ÇÕáÇÍ ßäíÏ." Else Shamsi = AddDay(Shamsi_Mabna, Dif) End If End Function '*********************************************** Public Function DayWeek(F_Date As Long) As String Dim a As String Dim N As Byte N = DayWeekNo(F_Date) Select Case N Case 0 a = "ÔäÈå" Case 1 a = "íßÔäÈå" Case 2 a = "ÏæÔäÈå" Case 3 a = "ÓåÔäÈå" Case 4 a = "åÇÑÔäÈå" Case 5 a = "äÌÔäÈå" Case 6 a = "ÌãÚå" End Select DayWeek = a End Function '*********************************************** Public Function Dat() Dim d As Long d = Shamsi Dat = DayWeek(d) & Sal(d) & "/" & Mah(d) & "/" & Rooz(d) End Function '*********************************************** Public Function Diff(ByVal FromDate As Long, ByVal To_Date As Long) As Long 'Çíä ÊÇÈÚ ÊÚÏÇÏ ÑæÒåÇí Èíä Ïæ ÊÇÑíÎ ÑÇ ÇÑÇÆå ãí ßäÏ Dim Tmp As Long Dim S1, M1, r1, S2, M2, r2 As Integer Dim Sumation As Single Dim Flag As Boolean Flag = False If FromDate = 0 Or IsNull(FromDate) = True Or To_Date = 0 Or IsNull(To_Date) = True Then Diff = 0 Exit Function End If If FromDate > To_Date Then 'ÇÑ ÊÇÑíÎ ÔÑæÚ ÇÒ ÊÇÑíÎ ÇíÇä ÈÒÑÊÑ ÈÇÔÏ ÂäåÇ ãæÞÊÇ ÌÇÈÌÇ ãí ÔæäÏ Flag = True Tmp = FromDate FromDate = To_Date To_Date = Tmp End If r1 = Rooz(FromDate) M1 = Mah(FromDate) S1 = Sal(FromDate) r2 = Rooz(To_Date) M2 = Mah(To_Date) S2 = Sal(To_Date) Sumation = 0 Do While S1 < S2 - 1 Or (S1 = S2 - 1 And (M1 < M2 Or (M1 = M2 And r1 <= r2))) 'ÇÑ íß ÓÇá íÇ ÈíÔÊÑ ÇÎÊáÇÝ ÈæÏ If Kabiseh((S1)) = 1 Then If M1 = 12 And r1 = 30 Then Sumation = Sumation + 365 r1 = 29 Else Sumation = Sumation + 366 End If Else Sumation = Sumation + 365 End If S1 = S1 + 1 Loop Do While S1 < S2 Or M1 < M2 - 1 Or (M1 = M2 - 1 And r1 < r2) 'ÇÑ íß ãÇå íÇ ÈíÔÊÑ ÇÎÊáÇÝ ÈæÏ Select Case M1 Case 1 To 6 If M1 = 6 And r1 = 31 Then Sumation = Sumation + 30 r1 = 30 Else Sumation = Sumation + 31 End If M1 = M1 + 1 Case 7 To 11 If M1 = 11 And r1 = 30 And Kabiseh(S1) = 0 Then Sumation = Sumation + 29 r1 = 29 Else Sumation = Sumation + 30 End If M1 = M1 + 1 Case 12 If Kabiseh(S1) = 1 Then Sumation = Sumation + 30 Else Sumation = Sumation + 29 End If S1 = S1 + 1 M1 = 1 End Select Loop If M1 = M2 Then Sumation = Sumation + (r2 - r1) Else Select Case M1 Case 1 To 6 Sumation = Sumation + (31 - r1) + r2 Case 7 To 11 Sumation = Sumation + (30 - r1) + r2 Case 12 If Kabiseh(S1) = 1 Then Sumation = Sumation + (30 - r1) + r2 Else Sumation = Sumation + (29 - r1) + r2 End If End Select End If If Flag = True Then Sumation = -Sumation End If Diff = Sumation End Function Public Function DayWeekNo(F_Date As Long) As String 'Çíä ÊÇÈÚ íß ÊÇÑíÎ ÑÇ ÏÑíÇÝÊ ßÑÏå æ ãÔÎÕ ãí ßäÏ å ÑæÒí ÇÒ åÝÊå ÇÓÊ 'ÇÑ ÔäÈå ÈÇÔÏ ÚÏÏ ۰ 'ÇÑ ۱ÔäÈå ÈÇÔÏ ÚÏÏ ۱ '...... 'ÇÑ ÌãÚå ÈÇÔÏ ÚÏÏ ۶ Dim day As String Dim Shmsi_Mabna As Long Dim Dif As Long 'ãÈäÇ ۸۰/۱۰/۱۱ Shmsi_Mabna = 13801011 Dif = Diff(Shmsi_Mabna, F_Date) If Shmsi_Mabna > F_Date Then Dif = -Dif End If 'ÈÇ ÊæÌå Èå Çíäßå ۸۰/۱۰/۱۱ ۳ÔäÈå ÇÓÊ ãÍÇÓÈå ãíÔæÏ day ãÊÛíÑ day = (Dif + 3) Mod 7 If day < 0 Then DayWeekNo = day + 7 Else DayWeekNo = day End If End Function Function MahName(ByVal Mah_no As Byte) As String Select Case Mah_no Case 1 MahName = "ÝÑæÑÏíä" Case 2 MahName = "ÇÑÏíÈåÔÊ" Case 3 MahName = "ÎÑÏÇÏ" Case 4 MahName = "ÊíÑ" Case 5 MahName = "ãÑÏÇÏ" Case 6 MahName = "ÔåÑíæÑ" Case 7 MahName = "ãåÑ" Case 8 MahName = "ÂÈÇä" Case 9 MahName = "ÂÐÑ" Case 10 MahName = "Ïí" Case 11 MahName = "Èåãä" Case 12 MahName = "ÇÓÝäÏ" End Select End Function Function SalMah(ByVal F_Date As Long) As Long 'ÔÔ ÑÞã Çæá ÊÇÑíÎ ßå ãÚÑÝ ÓÇá æ ãÇå ÇÓÊ ÑÇ ÈÑãí ÑÏÇäÏ SalMah = Val(Left$(F_Date, 6)) End Function Function MahDays(ByVal Sal As Integer, ByVal Mah As Byte) As Byte 'Çíä ÊÇÈÚ ÊÚÏÇÏ ÑæÒåÇí íß ãÇå ÑÇ ÈÑãí ÑÏÇäÏ Select Case Mah Case 1 To 6 MahDays = 31 Case 7 To 11 MahDays = 30 Case 12 If Kabiseh(Sal) = 1 Then MahDays = 30 Else MahDays = 29 End If End Select End Function Function Make_Date(ByVal F_Date As Long) As String 'íß ÊÇÑíÎ ÑÇ ÈÕæÑÊ íß ÑÔÊå ۱۰ ÑÞãí ÈÇ ÐßÑ åÇÑ ÑÞã ÈÑÇí ÓÇá ÇÑÇÆå ãí ßäÏ Dim d As String d = Trim(Str(F_Date)) If IsNull(F_Date) = True Or F_Date = 0 Then Make_Date = "" Else Make_Date = Mid(d, 1, 4) & "/" & Mid(d, 5, 2) & "/" & Mid(d, 7, 2) End If End Function Function NextMah(ByVal Sal_Mah As Long) As Long If (Sal_Mah Mod 100) = 12 Then NextMah = (Int(Sal_Mah / 100) + 1) * 100 + 1 Else NextMah = Sal_Mah + 1 End If End Function Function PreviousMah(ByVal Sal_Mah As Long) As Long If (Sal_Mah Mod 100) = 1 Then PreviousMah = (Int(Sal_Mah / 100) - 1) * 100 + 12 Else PreviousMah = Sal_Mah - 1 End If End Function Function SubtractDay(ByVal F_Date As Long, ByVal Subtract As Long) As Long 'Èå ÊÚÏÇÏ ÑæÒ ãÚíäí ÇÒ íß ÊÇÑíÎ ßã ßÑÏå æ ÊÇÑíÎ ÍÇÕáå ÑÇ ÇÑÇÆå ãíßäÏ Dim K, M, s, R, Days As Byte R = Rooz(F_Date) M = Mah(F_Date) s = Sal(F_Date) K = Kabiseh(s) 'ÊÈÏíá ÑæÒ Èå ÚÏÏ ۱ ÌåÊ ÇÏÇãå ãÍÇÓÈÇÊ æ íÇ ÇÊãÇã ãÍÇÓÈå If Subtract >= R - 1 Then Subtract = Subtract - (R - 1) R = 1 Else R = R - Subtract Subtract = 0 End If While Subtract > 0 K = Kabiseh(s - 1) 'ßÈíÓå: ۱ æ ÛíÑ ßÈíÓå: ۰ Days = MahDays(IIf(M >= 2, s, s - 1), IIf(M >= 2, M - 1, 12)) 'ÊÚÏÇÏ ÑæÒåÇí ãÇå ÞÈáí Select Case Subtract Case Is < Days 'ÇÑ ÊÚÏÇÏ ÑæÒåÇí ßÇåÔ ßãÊÑ ÇÒ íß ãÇå ÈÇÔÏ R = Days - Subtract + 1 Subtract = 0 If M >= 2 Then M = M - 1 Else s = s - 1 M = 12 End If Case Days To IIf(K = 0, 365, 366) - 1 'ÇÑ ÊÚÏÇÏ ÑæÒåÇí ßÇåÔ ÈíÔÊÑ ÇÒ íß ãÇå æ ßãÊÑ ÇÒ íß ÓÇá ÈÇÔÏ Subtract = Subtract - Days If M >= 2 Then M = M - 1 Else s = s - 1 M = 12 End If Case Else 'ÇÑ ÊÚÏÇÏ ÑæÒåÇí ßÇåÔ ÈíÔÊÑ ÇÒ íß ÓÇá ÈÇÔÏ s = s - 1 Subtract = Subtract - IIf(K = 0, 365, 366) End Select Wend SubtractDay = (s * 10000) + (M * 100) + (R) End Function 'ÔãÇÑå Çæáíä ÑæÒ ãÇå Public Function Firstday(Sal As Integer, Mah As Byte) As Long Dim strfd As Long strfd = Sal & Format(Mah, "00") & Format(1, "00") Firstday = DayWeekNo(strfd) End Function
۴- یک راه دیگه استفاده از تاریخهای شمسی در اکسل اینه که از تاریخهای میلادی استفاده کنیم و در صورت نیاز اونها رو به تاریخ شمسی تبدیل کنیم. و برای این منظور میتونید از فرمولهای تبدیل تاریخ میلادی به شمسی و بالعکس استفاده کنید:
فرمول تبدیل تاریخ میلادی به شمسی:
=CONCATENATE(INT((A1-7385)/365.25+1299),"/",IF(MOD(IF(INT(MOD((A1-7385)*100,36525)/100)<186,INT(INT(MOD((A1-7385)*100,36525)/100)/31),IF(MOD(INT((A1-7385)/365.25),4)=0,INT((INT(MOD((A1-7385)*100,36525)/100)-186)/30)+6,IF(INT(MOD((A1-7385)*100,36525)/100)<336,INT((INT(MOD((I5-7385)*100,36525)/100)-186)/30)+6,INT((INT(MOD((A1-7385)*100,36525)/100)-336)/29)+11))),12)+1<10,CONCATENATE(0,MOD(IF(INT(MOD((A1-7385)*100,36525)/100)<186,INT(INT(MOD((A1-7385)*100,36525)/100)/31),IF(MOD(INT((A1-7385)/365.25),4)=0,INT((INT(MOD((A1-7385)*100,36525)/100)-186)/30)+6,IF(INT(MOD((A1-7385)*100,36525)/100)<336,INT((INT(MOD((I5-7385)*100,36525)/100)-186)/30)+6,INT((INT(MOD((A1-7385)*100,36525)/100)-336)/29)+11))),12)+1),MOD(IF(INT(MOD((A1-7385)*100,36525)/100)<186,INT(INT(MOD((A1-7385)*100,36525)/100)/31),IF(MOD(INT((A1-7385)/365.25),4)=0,INT((INT(MOD((A1-7385)*100,36525)/100)-186)/30)+6,IF(INT(MOD((A1-7385)*100,36525)/100)<336,INT((INT(MOD((A1-7385)*100,36525)/100)-186)/30)+6,INT((INT(MOD((A1-7385)*100,36525)/100)-336)/29)+11))),12)+1),"/",IF(IF(INT(MOD((A1-7385)*100,36525)/100)<186,MOD(INT(MOD((A1-7385)*100,36525)/100),31)+1,IF(MOD(INT((A1-7385)/365.25),4)=0,MOD(INT(MOD((A1-7385)*100,36525)/100)-186,30)+1,IF(INT(MOD((A1-7385)*100,36525)/100)<336,MOD(INT(MOD((A1-7385)*100,36525)/100)-186,30)+1,MOD(INT(MOD((A1-7385)*100,36525)/100)-336,29)+1)))<10,CONCATENATE(0,IF(INT(MOD((A1-7385)*100,36525)/100)<186,MOD(INT(MOD((A1-7385)*100,36525)/100),31)+1,IF(MOD(INT((A1-7385)/365.25),4)=0,MOD(INT(MOD((A1-7385)*100,36525)/100)-186,30)+1,IF(INT(MOD((A1-7385)*100,36525)/100)<336,MOD(INT(MOD((A1-7385)*100,36525)/100)-186,30)+1,MOD(INT(MOD((A1-7385)*100,36525)/100)-336,29)+1)))),IF(INT(MOD((A1-7385)*100,36525)/100)<186,MOD(INT(MOD((A1-7385)*100,36525)/100),31)+1,IF(MOD(INT((A1-7385)/365.25),4)=0,MOD(INT(MOD((A1-7385)*100,36525)/100)-186,30)+1,IF(INT(MOD((A1-7385)*100,36525)/100)<336,MOD(INT(MOD((A1-7385)*100,36525)/100)-186,30)+1,MOD(INT(MOD((A1-7385)*100,36525)/100)-336,29)+1)))))
فرمول تبدیل تاریخ شمسی به میلادی:
=IF(MOD(VALUE(LEFT(A1,4)),4)=0,(VALUE(LEFT(A1,4))-1)*365+(IF((VALUE(MID(A1,6,2))-1)<7,(VALUE(MID(A1,6,2))-1)*31,IF((VALUE(MID(A1,6,2))-1)>6,(VALUE(MID(A1,6,2))-1)*30+6)))+VALUE(RIGHT(A1,2))+INT((VALUE(LEFT(A1,4))-1)/4)+1,(VALUE(LEFT(A1,4))-1)*365+(IF((VALUE(MID(A1,6,2))-1)<7,(VALUE(MID(A1,6,2))-1)*31,IF((VALUE(MID(A1,6,2))-1)>6,(VALUE(MID(A1,6,2))-1)*30+6)))+VALUE(RIGHT(A1,2))+INT((VALUE(LEFT(A1,4))-1)/4))-466710
ایراد این روش هم اینه که از فرمولهای پیچیده و حجیم استفاده شده و اگر تعداد تاریخهای لازم التبدیل در سیستم شما زیاد باشه ممکنه منابع زیادی رو از سیستم شما اشغال کنه و محاسبات رو بکندی انجام بده.
زطز
درباره حسین صابری
عضو هیئت علمی دانشگاه آزاد - ارشد حسابداری (دانشجوی دکتری حسابداری) - کارشناس رسمی قوه قضاییه (حسابداری و حسابرسی) - برنامه نویس و مدرس کامپیوتر
نوشته های بیشتر از حسین صابریمطالب زیر را حتما مطالعه کنید
فایل حقوق دستمزد 98 و اکسل محاسبه مالیات حقوق 98
معرفی توابع جدید در اکسل ۲۰۱۹
همانطور که می دانید مجموعه آفیس هر سه سال یک بار نسخه جدید خود را عرضه می کند و در ورژن های جدید امکانات جدیدی را قرار می دهند که کار با نرم افزارها را برای کاربران راحت تر کند
در اکسل ۲۰۱۹ چندین ابزار کاربردی اضافه شده است که در این قسمت مب خواهیم به معرفی چند تابع جالب و بسیار کاربردی آن بپردازیم. توابعی که در این بخش یاد خواهیم گرفت در نسخه OFFICE 365 وجود داشتند اما چون این نسخه به صورت غیررایگان عرضه شده بود بسیاری از کاربران امکان پرداخت هزینه آن را نداشته و از این توابع محروم بودند
توابعی که به معرفی آنها می پردازیم شامل موارد زیر می باشند:
CONCAT
TEXTJOIN
MINIFS
MAXIFS
IFS
SWITCH
محاسبه مالیات حقوق تحت اکسل
ورود سریع تر اطلاعات
ورود سریعتر داده ها در اکسل به کمک قابلیت Auto Correctشاید برای شما پیش آمده باشد که در یک زمان ورود اطلاعات یک فهرست، به صورت مداوم مجبور به تکرار یک کلمه یا جمله هستید. بهترین راه برای این کار استفاده از ویژگی Auto Correct است. به عنوان نمونه ما در ورود اطلاعات یک جدول کلمه @talant_ir را دائما تکرار می کنیم، و تصمیم داریم با ورود عبارت @t به صورت خودکار کلمه @talant_ir تکرار شود. برای اینکار از مسیر ذیل استفاده می کنیم.
محاسبه بهای تمام شده به روش FIFO
بسیاری از حسابداران محاسبات مربوط به بهای تمام شده را به صورت دستی و به صورت کاردکس بالا انجام می دهند که این کار زمانبر و پر از اشتباه خواهد بوددر این آموزش می خواهیم محاسبات را با استفاده از نرم افزار اکسل انجام دهیم و دقت و سرعت محاسبات را بالا ببریم.
دیدگاهتان را بنویسید