PDA

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



mfr
2016/04/07, 22:27
با سلام خدمت اساتید محترم : میخوام با زدن کد پرسنلی تو سلول h32 شیت master اطلاعات مربوط به همون پرسنل از شیت data فراخوانی بشه
و توی تاریخ و مرخصی مربوطه نمایش داده بشن ... در ضمن حتما فرمت سلولا باید عدد با دورقم اعشار باشه ... از توابع تایم استفاده بشه هم بهتره
ممنونم:min11:

amir_ts
2016/04/07, 22:42
با سلام
با تابع vlookup انجام میشه .اطلاعات شیت data تو کدوم سل های شیت master فراخوان بشه؟

mfr
2016/04/07, 23:12
با سلام
با تابع vlookup انجام میشه .اطلاعات شیت data تو کدوم سل های شیت master فراخوان بشه؟
مثل فایل نمونه... فقط ساعت های مرخصی

amir_ts
2016/04/08, 11:02
با سلام
چون شماره پرسنلی شما تکرار شده و نوع اطلاعات فراخوان شده با نوع اطلاعاتی که شما تو شیت master میخواهید قرار بدید متفاوت هست از تابع vlookup نمیشه استفاده کرد.
با این فرمول تاریخ ها فراخوان میشه ولی ساعت ها (از ساعت تا ساعت) رو متوجه نشدم چطور میخواید تو یک سل با توجه به تاریخش قرار بدید!!!(فرمول آرایه ایست)


=IF(ISNUMBER(MATCH($H$31&C$1;data!$A$2:$A$7&RIGHT(data!$B$2:$B$7;2);0));1;"")

Amir Ghasemiyan
2016/04/08, 12:01
سلام دوست عزیز
من فکر کنم با فرمول نویسی بشه به جواب رسید اما قدری پیچیده و اذیت کننده میشه.برای همین من پیشنهاد میکنم از VBA استفاده کنید.
کدی که من استفاده کردم به این صورته:


Sub ExcelIran()
code = Sheet7.Range("H31").Value
Range("report").ClearContents
Database = Range("database")
For i = 1 To UBound(Database)
If Database(i, 1) = code Then
q = Split(Database(i, 2), "/")
Y = q(0)
M = q(1)
D = q(2)
If Database(i, 6) = Sheet1.Range("G1").Value Then
Sheet7.Cells(2 * M, D + 2) = 1
Else
Times = Database(i, 4) - Database(i, 3)
Sheet7.Cells(2 * M + 1, D + 2) = Times
End If
End If
Next i
End Sub


تغییرات خیلی جزئی هم در فایلتون دادم. برای همین اون رو هم ضمیمه میکنم

mfr
2016/04/08, 21:26
با سلام
چون شماره پرسنلی شما تکرار شده و نوع اطلاعات فراخوان شده با نوع اطلاعاتی که شما تو شیت master میخواهید قرار بدید متفاوت هست از تابع vlookup نمیشه استفاده کرد.
با این فرمول تاریخ ها فراخوان میشه ولی ساعت ها (از ساعت تا ساعت) رو متوجه نشدم چطور میخواید تو یک سل با توجه به تاریخش قرار بدید!!!(فرمول آرایه ایست)


=IF(ISNUMBER(MATCH($H$31&C$1;data!$A$2:$A$7&RIGHT(data!$B$2:$B$7;2);0));1;"")
ممنونم دوست عزیز... نصف مسئله حل شد فقط باید همزمان ماه و روز رو هم توی data بیاره فقط روز رو پیدا میکنه اما تو ماه مربوطه نمیاره .. مسئله همینجاست

mfr
2016/04/08, 21:32
سلام دوست عزیز
من فکر کنم با فرمول نویسی بشه به جواب رسید اما قدری پیچیده و اذیت کننده میشه.برای همین من پیشنهاد میکنم از VBA استفاده کنید.
کدی که من استفاده کردم به این صورته:


Sub ExcelIran()
code = Sheet7.Range("H31").Value
Range("report").ClearContents
Database = Range("database")
For i = 1 To UBound(Database)
If Database(i, 1) = code Then
q = Split(Database(i, 2), "/")
Y = q(0)
M = q(1)
D = q(2)
If Database(i, 6) = Sheet1.Range("G1").Value Then
Sheet7.Cells(2 * M, D + 2) = 1
Else
Times = Database(i, 4) - Database(i, 3)
Sheet7.Cells(2 * M + 1, D + 2) = Times
End If
End If
Next i
End Sub


تغییرات خیلی جزئی هم در فایلتون دادم. برای همین اون رو هم ضمیمه میکنم

سلام استاد ... متاسفانه فایل پیوست شما اشتباه پیوست شده .. ممنونم مجددا ضمیمه فرمایید.

Amir Ghasemiyan
2016/04/08, 22:15
سلام استاد ... متاسفانه فایل پیوست شما اشتباه پیوست شده .. ممنونم مجددا ضمیمه فرمایید.

فکر نمیکنم اشتباه باشه. چه مشکلی داره مگه؟ من دوباره دانلود کردم مشکلی نداشت

amir_ts
2016/04/08, 23:07
نصف مسئله حل شد فقط باید همزمان ماه و روز رو هم توی data بیاره فقط روز رو پیدا میکنه اما تو ماه مربوطه نمیاره .. مسئله همینجاست

با سلام
با یک ستون کمکی مشکل حل میشه و تو ماه مربوطه قرار میگیره.(توصیه جناب آقای قاسمیان رو مد نظر قرار بدید.)


=IF(ISNUMBER(MATCH($I$31&D$1&$B2;data!$A$2:$A$7&RIGHT(data!$B$2:$B$7;2)&MID(data!$B$2:$B$7;4;2);0));1;"")

mfr
2016/04/09, 00:23
فکر نمیکنم اشتباه باشه. چه مشکلی داره مگه؟ من دوباره دانلود کردم مشکلی نداشت
توی تابع نویسی اشتباه نشده ... توابع نوشته شده با اسم شیتها همخونی ندارن ..... sheet7 و غیره .. ممنونم استاد

mfr
2016/04/09, 00:29
با سلام
با یک ستون کمکی مشکل حل میشه و تو ماه مربوطه قرار میگیره.(توصیه جناب آقای قاسمیان رو مد نظر قرار بدید.)


=IF(ISNUMBER(MATCH($I$31&D$1&$B2;data!$A$2:$A$7&RIGHT(data!$B$2:$B$7;2)&MID(data!$B$2:$B$7;4;2);0));1;"")
ممنونم بزرگواری فرمودین ... فقط میمونه مدت مرخصی استفاده شده که تو قسمت ساعتی روزها باید بیاد ... فقط مدت استفاده شده مهمه مثلا 1.25 ساعت همین

Amir Ghasemiyan
2016/04/09, 00:45
توی تابع نویسی اشتباه نشده ... توابع نوشته شده با اسم شیتها همخونی ندارن ..... sheet7 و غیره .. ممنونم استاد

نه دوست عزیز اشتباهی صورت نگرفته. شما برنامه رو که اجرا کنید میبینید که به درستی کار میکنه
sheet7 که گفتین درواقع شماره شیتی هست که شما دارین نه اسم شیت. میشد از نام هم استفاده کرد. یا مثلا database یا report که در کدها استفاده شده در واقع محدوده ای هستند که از طریق name manager تعریف شده اند

mfr
2016/04/09, 00:52
نه دوست عزیز اشتباهی صورت نگرفته. شما برنامه رو که اجرا کنید میبینید که به درستی کار میکنه
sheet7 که گفتین درواقع شماره شیتی هست که شما دارین نه اسم شیت. میشد از نام هم استفاده کرد. یا مثلا database یا report که در کدها استفاده شده در واقع محدوده ای هستند که از طریق name manager تعریف شده اند
واقعا باید به شما تعظیم کرد ... من علمنی حرفا قد سیرنی عبدا

Amir Ghasemiyan
2016/04/09, 00:54
واقعا باید به شما تعظیم کرد ... من علمنی حرفا قد سیرنی عبدا

خواهش میکنم دوست عزیز این چه حرفیه
کسی که چیزی بلده وظیفشه به دیگران هم یاد بده و از علمش برای حل مشکلات دیگران استفاده کنه
لطفا اگه پاسخ سوالتون رو دریافت کردین تاپیک رو حل شده کنید

mfr
2016/04/09, 01:52
خواهش میکنم دوست عزیز این چه حرفیه
کسی که چیزی بلده وظیفشه به دیگران هم یاد بده و از علمش برای حل مشکلات دیگران استفاده کنه
لطفا اگه پاسخ سوالتون رو دریافت کردین تاپیک رو حل شده کنید
فقط بنا به دلایلی میخوام فرمت ساعتها عدد اعشار با دورقم اعشار باشه و توستون مدت مرخصی محاسبه بشه و با اجرای ماکرو به شیت master بره
توی تابع لازم نیست ساعت مرخصی محاسبه بشه فقط مدتش رو از ستون " مدت مرخصی" ( که توسط time_dif محاسبه شده ) به master منتقل کنه
ممنونم استاد

Amir Ghasemiyan
2016/04/09, 09:32
خدمت شما دوست عزیز


Sub ExcelIran()
code = Sheet7.Range("H31").Value
Range("report").ClearContents
Database = Range("database")
For i = 1 To UBound(Database)
If Database(i, 1) = code Then
q = Split(Database(i, 2), "/")
Y = q(0)
M = q(1)
D = q(2)
If Database(i, 6) = ChrW(1585) & ChrW(1608) & ChrW(1586) & ChrW(1575) & ChrW(1606) & ChrW(1607) Then
Sheet7.Cells(2 * M, D + 2) = 1
Else
Sheet7.Cells(2 * M + 1, D + 2) = Database(i, 5)
End If
End If
Next i
End Sub


فرمت سلول های بخش گزارش در تب master رو بذارین رو number. فقط ردیف های مربوط به مرخصی های ساعتی رو

mfr
2016/04/09, 12:49
دست شما درد نکنه .. ممنونم:min18: