السلام عليكم ورحمة الله وبركاته
أهلاً وسهلاً بكم أيها الشعب العريق مجدداَ
ومع حلقة جديدة من حلقات الصقر المحلق الفريدة من نوعها
وكما تعودتم معنا جئناكم اليوم بعرض خاص عرض جديد لسه فى الكرتونة
بدأ العرض بطلب من أحد المتابعين للصرح العريض الطويل بأكاديمية الصقر للتدريب
(كنت كتبت كومنت بانى هبرمج دالة بديلة لما الاقى وقت)
وقولت سابقا ان فيه هديه على دالة معرفة سابقة ، ايوه احنا عروضنا مبتنتهيش
نقدم لكم عرض الموسم وبدون مقدمات طويلة الدالة المعرفة SEQUENCE لإنشاء تسلسل بآلية متتالية
تلك الدالة تولد أرقام متتابعة فى الخلايا المجاورة أى أن الدالة تكون بنقطة البداية بالخلية فقط
وهنا نقول يجب ألا يتم التعامل مع أكثر من دالة بنفس الخلية
أو إستخدام أكثر من دالة بأماكن مشتركة حتى لا ترى نتائج غير صحيحة
ملاحظة قبل أن أبدا بعرض مزايا الدالة:
الدالة الخاصة بمايكروسوفت تعمل على ربط المرجع الخاص بنتائج الدالة وذلك بقاعدة البيانات الخلفية لتتمكن من تحديث النتائج فى كل مرة
أسكت كدا يعنى لا استنى شوف الصورة دى
لا طبعا ولذلك زودت باراميتر خامس لتحدد به خلية يمكن ربطها بنتائج الدالة
لتتمكن من معرفة النطاق القديم ليتم التحديث بالنطاق بالجديد
ما هو ياأنا يامايكروسوفت فى هذا الكوكب
حسناَ إذاَ نبدأ على بركة الله بعرض مزايا الدالة اللهلوبة الجديدة أم كرتونة SEQUENCE
أولاَ: كل الباراميترات الخمسه اختيارى وتفادى ايا منهم يعوض برقم 1
عدا طبعا الخلية اللى هتعوض قاعدة البيانات مش هختارها بالباراشوت أنا
يا تحددها انت ياما لن يتم معرفة البيانات القديمة ولن تمحى فى حالة تم تركها
سايبهالك بحرى زى ما انت عايز ياحاج
وعندك شكل الدالة بالباراميترات عشان تملى عينك برضوا منها
CODE
=SEQUENCE([rows],[columns],[start],[step],[cell_database])<br />
وعندك واحد شاى وصلحوااااااا ، عشان كوباية الشاى الجميلة دى
هملى عينك ب 3 أمثلة للدالة لوحدها وبداخل دوال أخرى ، فى الصور التالية
استخدام الدالة لا يتختلف عن استخدامها بالدالة بمايكروسوفت
يضاف فقط الباراميتر الخامس لتحديد خلية كقاعدة بيانات ثابته لها
اذا ايها الشعب العريق نأتى لأهم جزء وهو كود الدالة والملف مرفق كالعادة
CODE
Private Sub addin(rng As Range, vl As Variant): rng = vl: End Sub
Function SEQUENCE(Optional rows As Long = 1, Optional columns As Integer = 1, Optional start As Double = 1, Optional step As Double = 1, Optional tmp As Range) As Variant
'Developer: Eslam Abdullah
Application.Volatile False
Dim x&, y%, i%, s%, e%, t$, chk
If rows < 1 Or columns < 1 Then
GoSub clr: SEQUENCE = CVErr(xlErrNum)
Evaluate "addin(" & tmp.Address(, , , 1) & ","""" )"
Exit Function
End If
GoSub clr: GoSub rnk: SEQUENCE = start
If Not tmp Is Nothing Then Evaluate "addin(" & tmp.Address(, , , 1) & ",""" & Application.Caller.Resize(rows, columns).Address & """)"
For x = 1 To rows
For y = 1 To columns
If x + y > 2 Then
Evaluate "addin(" & Application.Caller.Offset(x - 1, y - 1).Address(, , , 1) & ",""" & Evaluate(Application.Replace(Application.Caller.Formula, s, e, (columns * (x - 1) + y) * step - (step - 1) + (start - 1))) & """)"
End If
Next y
Next x
Exit Function
clr:
If Not tmp Is Nothing Then chk = Evaluate("ISREF(" & tmp & ")")
If IsNumeric(chk) Then
If chk Then
If Range(tmp).rows.Count & Range(tmp).columns.Count = rows & columns Then Evaluate "addin(" & tmp.Address(, , , 1) & ",""" & Application.Caller.Resize(rows, columns).Address & """)"
If Range(tmp).rows.Count > 1 Then Evaluate "addin(" & Mid(Application.Caller.Address(, , , 1), 1, InStr(Application.Caller.Address(, , , 1), "!")) & Range(Range(tmp).Cells(2, 1), Range(tmp).Cells(Range(tmp).rows.Count, Range(tmp).columns.Count)).Address & ","""" )"
If Range(tmp).columns.Count > 1 Then Evaluate "addin(" & Mid(Application.Caller.Address(, , , 1), 1, InStr(Application.Caller.Address(, , , 1), "!")) & Range(Range(tmp).Cells(1, 2), Range(tmp).Cells(1, Range(tmp).columns.Count)).Address & ","""" )"
End If
End If
Return
rnk:
t = Application.Caller.Formula
For i = 2 To Len(t)
If Mid(t, i, 1) = """" Then i = InStr(i + 1, t, """") + 1 Else If Mid(t, i, 9) = "SEQUENCE(" Then s = i: Exit For
Next i
For i = s + 9 To Len(t)
Select Case Mid(t, i, 1)
Case """": i = InStr(i, t, """") + 1
Case "(": i = InStr(i, t, ")") + 1
Case ")": e = i - s + 1: Exit For
End Select
Next i
Return
End Function
وفى الاخير دعنى اخبرك فى تلك النقطة بنصيحه
لا انصح باستخدام الدالة دى مع بيانات كبيره لان تاثيرها كبير وهياثر على سرعة الملف
ويفضل تنفيذ الهدف اللى انت عايزه سواء من الدالة او غيرها مباشرة
انا برمجت الدالة دى لطلب احدهم وعشان تعرف ان اى حاجه ممكن تكويدها اى طلب مهما كان يمكن الوصول اليه بالكود
الكود اقوى اداة ليك سواء مايكروسوفت عامله دوال او جداول محواريه او باور كورى وغيره من الاساليب
كل دا مجرد اداة تخضع لكود فى النهايه ، وبمايكروسوفت او من غيرها انت تقدر توصل للى انت عايزه بنفسك
شكرا لكم ، والسلام عليكم ورحمة الله وبركاته