السلام عليكم ورحمة الله وبركاته
إخواني وأحبابي في الله
تذكروني إذا ما غبت عنكم يوماً ، ولا تنسونا من صالح دعائكم ، فهذا هو ما يتبقى لنا بعد الممات
بقدم لكم موضوع النهاردة .. مش عارف إذا كان فيه حد قدمه ولا لا بس صراحة معداش عليا
الموضوع عن دالة معرفة ليست لي وهي لي (أحب الفوازير زي ما إنتو عارفين) ..
تفسير اللغز : اللغز ليس لي فقد وجدته في أحد المواقع الأجنبية ، واللغز لي حيث أن الموجود في الموقع الأجنبي كان لجلب التواريخ لأيام الجمع فقط ، فقمت بتطوير الدالة بحيث تكون مرنة وتشمل كل أيام الأسبوع
ها هي الدالة المعرفة أضعها بين أيديكم
CODE
Function PullDates(dStartDate As Date, dEndDate As Date, iIndex As Integer, dDay As Integer)
Dim dvbDay As Variant
Dim iMaxDays As Integer
Dim dFirstday As Date
Application.Volatile
If dDay < 1 Or dDay > 7 Then PullDates = CVErr(xlErrNum): Exit Function
If dStartDate > dEndDate Then PullDates = CVErr(xlErrNum): Exit Function
dvbDay = Choose(dDay, vbSaturday, vbSunday, vbMonday, vbTuesday, vbWednesday, vbThursday, vbFriday)
dFirstday = dvbDay - Weekday(dStartDate) + dStartDate
If dFirstday < dStartDate Then dFirstday = dFirstday + 7
iMaxDays = Int((dEndDate - dFirstday) / 7) + 1
PullDates = ""
If iIndex = 0 Then
PullDates = iMaxDays
ElseIf iIndex <= iMaxDays Then
PullDates = dFirstday + (iIndex - 1) * 7
End If
End Function
استخدام الدالة :
*********
بفرض أن لديك تاريخين في الخلايا A1 و B1 حيث هذين التاريخين هما تاريخ البداية وتاريخ النهاية (الأخ اللي شاف كلمة النهاية مش دي آخر كلمة في الموضوع .. لسه فيه شوية اصبر يا كابتن)
دلوقتي المطلوب إننا نستخرج التواريخ ليوم معين من أيام الأسبوع وليكن يوم الجمعة (أحب الأيام لقلبي)
هنفترض تاريخ البداية 1/1/2018 وتاريخ النهاية 1/3/2018 من أول يناير لأول مارس (كفاية كدا عشان تقدروا تتأكدوا من مخرجات الدالة المعرفة)
هنيجي في العمود الرابع مثلاً ونضع المعادلة بالشكل التالي وهشرح لكم المعادلة وايه اللي ممكن يتغير فيها
CODE
=PullDates($A$1,$B$1,ROW(A1),7)<br />
طبعاً بما إن الدالة بقت معرفة مش مجهولة وموجودة في موديول في الملف اللي عندك فتقدر تستخدمها يا جميل زيها زي أي دالة موجودة بالإكسيل فبتكتب علامة يساوي ووراها اسم الدالة PullDates ..
أول بارامتر هو تاريخ البداية وهو A1 وهنثبت الخلية دي بحيث لما نسحب المعادلة لتحت تفضل ثابتة
والبارامتر التاني هو تاريخ النهاية وهو B1 ونفس الكلام يا هشام نثبت الخلية
نيجي للبارامتر التالت اللي هو أصلاً خاص برقم محدد (يعني مثلاً لو عايز أول جمعة بين التاريخين هكتب 1 ، ولو عايز تاني جمعة هكتب 2 ، ولو عايز تالت جمعة هكتب 3 ، وممكن حد يكمل مكاني عشان تعبت ..)
طبعاً هنا أنا مش عايز أول جمعة ولا تاني جمعة ولا غيره ، أنا عايز كله (طبق الكشري كله مش معلقة واحدة منه) >> طيب نعمل ايه ؟ هنا بنستخدم دالة لطيفة في الإكسيل اسمها Row ودي بتجيب رقم الصف ، ففي أول معادلة هنكتب A1 ومش هنثبتها لأننا محتاجين إنها تتغير .. لما تكون A1 يبقا هترجع الرقم 1 اللي هو رقم الصف
لما نسحب المعادلة لتحت A1 هتكون A2 فالرقم هيكون 2 ، وهكذا ....
آخر بارامتر وهو رقم اليوم اللي أنا عايز أتعامل معاه
فهنا حضرتك هتكتب من 1 إلى 7
حيث الرقم 1 يشير ليوم السبت ، والرقم 2 يشير ليوم الأحد .............
النقط دي اختصار للوقت والجهد يا إسلام ............ والرقم 7 يشير ليوم الجمعة
بس خلاص .. وصلنا للنهاية
ودا شكل المخرجات للتواريخ ليوم الجمعة بين التاريخين (ممكن طبعاً تفتح التقويم وتراجع نتائج الدالة دا شيء هيسعدني)
رابط الملف من هنا
كان معكم أخوكم في الله ياسر خليل أبو البراء من منتدى الأحبة (منتدى أكاديمية الصقر للتدريب والتطوير)
والسلام عليكم ورحمة الله وبركاته