السلام عليكم ورحمة الله
أخي الكريم، الإجابة على طلب مثل هذا (شرح المعادلات) تجعلنا نتقاعس ونتكاسل وخاصة إذا كانت المعادلات طويلة وذات وسائط كثيرة... ومرة أخرى سأحاول شرح المعادلات (وكود الطباعة) قدر المستطاع... المعادلة في الخلية C8 (مثلا) هي:
=IF(ISERROR(OFFSET(ورقة1!$A$1;MATCH($B8;ورقة1!$A:$A;0)-1;$I$2));"";IF(OFFSET(ورقة1!$A$1;MATCH($B8;ورقة1!$A:$A;0)-1;$I$2)=0;"";OFFSET(ورقة1!$A$1;MATCH($B8;ورقة1!$A:$A;0)-1;$I$2)))
وهي دالة شرطية لاستدعاء بيانات خلايا من الورقة1 معينة بتقاطع عمود (رتبة العميل في الخلية I2) مع صف (رقم سطر الكود) وشرح أجزاء المعادلة يكون كما يلي:
* الجزء الأول :
IF(ISERROR(OFFSET(ورقة1!$A$1;MATCH($B8;ورقة1!$A:$A;0)-1;$I$2));"";
الذي يعني أنه في حالة إرجاع عملية البحث قيمة الخطأ (وهذا في حالة عدم وجود الكود من الخلية B8 في العمود A من الورقة 1) فإن المعادلة ترجع فراغا ""... يمكن استبدال هذا الجزء بالجزء:
IF(ISERROR(MATCH($B8;ورقة1!$A:$A;0));"";
* الجزء الثاني من المعادلة:
IF(OFFSET(ورقة1!$A$1;MATCH($B8;ورقة1!$A:$A;0)-1;$I$2)=0;"";OFFSET(ورقة1!$A$1;MATCH($B8;ورقة1!$A:$A;0)-1;$I$2))
وهذا الجزء يشتغل في حالة ما إذا كان شرط الجزء الأول غير متوفر أي في حالة وجود الكود من الخلية B8 في العمود A من الورقة 1، فيقوم بالبحث عن مضمون الخلية من الورقة1 (التي تعينها الدالة OFFSET انطلاقا من الخلية A1 من الورقة 1) التي هي تقاطع السطر (رقم سطر الكود في العمود A من الورقة 1) الذي يعينه الجزء
MATCH($B8;ورقة1!$A:$A;0)
والعمود (رقم عمود ترتيب العميل) الذي تعطيه الخلية I2 ويكون اختبار لهذه القيمة إذا كانت فارغة فترجع المعادلة فراغا وإذا كانت غير فارغة فترجع المعادلة مضمون الخلية المعينة...
أرجو أني قربي شرح المعادلة الموجودة في C8 والتي تم سحبها للأسفل ثم تم نسخها في العمود F أمام الخلايا من العمود E التي تحوي أكوادا...
بالنسبة لكود الطباعة فهو كود بسيط جدا وشرحه كما يلي:
الكود:
Sub Printing()
Dim I As Integer
For I = 1 To [I1]
If I <= [I1] Then
[I2] = I
Activewindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
End If
Next
End Sub
بفرض I متغيرا طبيعيا يقوم بتغيير I من القيمة 1 (أول عميل) إلى مضمون الخلية I1 (التي كتبت فيها معادلة باستعمال الدالة COUNTA تحصي عدد العملاء)... إذا كانت قيمة I أصغر من أن تساوي مضمون الخلية I1 فيضع هذه القيمة في الخلية I2 التي تعتمد عليها الخلية C5 (اسم العميل) بتغيير اسم العميل حسب ترتيبها وتعطيه المعادلة الموجودة في هذه الخلية بالدالة INDEX والتي هي :
=INDEX(ورقة1!$1:$1;0;$I$2+1)
وبالتالي تتغير كل البيانات المرحلة في الجدول حسب هذا العميل أي حسب العدد في الخلية I2 ، ثم يقوم الكود بطباعة الورقة (بيانات العميل) على الطابعة ويمر بعدها إلى العميل الموالي ويقوم الكود بالعمليات نفسها وهكذا إلى آخر عميل ويتوقف عمل الكود بعد الانتهاء من أمر طباعة بيانات آخر عميل....
أرجو أني وفقت في شرح المعادلات وعمل كود الطباعة...
وأسألك وكل إخوتي وأخواتي بالمنتدى أن تدعو الله لي ولأهلي بالشفاء من كل داء وأن تلحو بالدعاء في كل حين...
أخوكم بن علية