بحث مخصص من جوجل فى أوفيسنا
Custom Search
|
-
Posts
13,165 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
412
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو ياسر خليل أبو البراء
-
أخي الكريم أهلاً بك في المنتدى ونورت بين إخوانك أرى أن تقوم بإرفاق ملف فيه شكل النتائج المتوقعة ليساعدك الأخوة الأعضاء في المنتدى .. تقبل تحياتي
-
الحلقات التكرارية للمصفوفة
ياسر خليل أبو البراء replied to ياسر خليل أبو البراء's topic in منتدى الاكسيل Excel
أخي الحبيب صلاح أنت صاحب فكرة الدورة الجديدة الخاصة بالمصفوفات ..رأيت أن أبدأ من جديد في هذا الموضوع نظراً لأهميته فبارك الله فيك يا ملهم .. تقبل تحياتي -
أخي الحبيب محمود الشريف أخي الغالي محي الدين أبو البشر أخي الفاضل صلاح المصري أخي العزيز عبد العزيز البسكري أخي المتميز زيزو العجوز أخي المحبب لقلبي خالد الرشيدي صاحب الأعمال الخفية بارك الله فيكم جميعاً وجزيتم خيراً على تسجيعكم الدائم لي .. لا تعرفون مدى سعادتي بتشجيعكم لي وبتقديركم المميز لي رغم أن ما قدمته بسيط جداً مقارنةً بما تقدمونه جمعني الله وإياكم في مستقر رحمته يوم القيمة إنه ولي ذلك والقادر عليه إن شاء الله بالنسبة للحلقات الجديدةسوف يتم إدراجها في مشاركة في ترتيبها بشكل عادي وفي النهاية يمكن تجميع المشاركات كلها في موضوع واحد مستقل .. بارك الله فيكم وجزيتم خير الجزاء ، ودمتم على طاعة الله تقبلوا تحياتي
-
بارك الله فيك أخي الحبيب أحمد وجزيت خيراً على دعائك الطيب بالنسبة للموضوع المعلومات ليست دسمة ..كل ما في الأمر أنني أقوم بتفصيل الموضوع ولذا يبدو أن الموضوع دسم ولكن في حقيقة الأمر أنها معلومات بسيطة جداً ومجرد بدايات ولكنها في غاية الأهمية حيث أن فهم البدايات سيمكنك من التعامل مع الأكواد المتقدمة بسهولة ويسر تقبل تحياتي
-
السلام عليكم ورحمة الله وبركاته إخواني وأحبابي في الله .. بصراحة أعجز عن البداية في هذا الموضوع نظراً لكثرة المعلومات في هذا الموضوع وتشعب الموضوع بشكل كبير ، ويرجع هذا التشعب إلى أهمية الموضوع لأن العمل بالمصفوفات يجعل الأكواد تكون أسرع بكثير من التعامل بالأكواد العادية خصوصاً مع البيانات الكثيرة .. الموضوع سيكون مستمر بإذن الله .. فأنا أؤمن بالحكمة التي تقول : قليل دائم خير من كثير منقطع .. سنبدأ في تناول الموضوع جزء جزء لكي نستطيع أن نهضم سوياً الموضوع ، ونستفيد من هذا الموضوع أقصى استفادة ممكنة نبطل رغي ونبدأ في المهم يعني ايه مصفوفة Array ؟ قبل ما نتعرف على المصفوفة .. عرفنا في دورة افتح الباب وادخل لعالم البرمجة "المتغير Variable" وقلنا إن المتغير وظيفته إنه بيخزن قيمة (سواء القيمة دي نص أو رقم أو تاريخ أو أي نوع من أنواع البيانات) .. بس المتغير بيخزن قيمة واحدة مثال : لو عايز أخزن القيمة النصية Officena Forums في متغير كنا بنعمل ايه ..؟! بنعلن عن المتغير من النوع النصي في سطر وفي السطر التالي بنقوم بتعيين قيمة للمتغير .. Sub StringVariable() Dim str As String str = "Officena Forums" End Sub طيب عشان نتأكد إن شغلنا مضبوط عايزين نعرف المتغير دا تم تخزين القيمة النصية فيه ولا لا .. ممكن نستخدم طريقة من اتنين : الطريقة الأولى باستخدام MsgBox لإظهار رسالة للمستخدم بقيمة المتغير .. MsgBox str الطريقة التانية ودي مهمة جداً لأننا هنستخدمها أثناء شرح المصفوفات لمتابعة تنفيذ أسطر الكود .. الطريقة باستخدام Debug.Print Debug.Print str طيب الطريقة دي هتظهر لنا إزاي : هتظهر النتائج في نافذة اسمها النافذة الفورية Immediate Window (طيب دي أجيبها منين وإزاي؟!) روح للقائمة الموجودة في محرر الأكواد وانقر على View هتلاقي Immediate Window أو باختصار من لوحة المفاتيح اضغط على Ctrl + G .. هتظهر النافذة الفورية في أسفل محرر الأكواد .. جرب الكود بالشكل الكامل بهذا الشكل Sub StringVariable() Dim str As String str = "Officena Forums" MsgBox str Debug.Print str End Sub طيب لما نحب ننفذ الكود يا ريت لا يتم التنفيذ مرة واحدة من خلال الأمر Run .... عايز التنفيذ يتم واحدة واحدة وسطر بسطر عشان تتعلموا إزاي تتابعوا عمل الكود .. عشان ننفذ الكود سطر بسطر ونتابع عايزين نظهر نافذة تانية كمان اسمها Local Window وبردو من نفس القائمة View وحاول تظبط النافذتين بحيث يكونوا بجانب بعضهم البعض كما في الصورة بحيث تتابع التنفيذ خلينا عمليين ونطبق أول بأول : روح لمحرر الأكود وأدرج موديول وانسخ الكود وأظهر نافذة Local Window والنافذة الفورية وضع مؤشر الماوس داخل الكود في اي سطر واستعد للانطلاق (على السادة المبرمجين ربط الأحزمة وشحذ الهمة والتركيز) اضغط F8 من لوحة المفاتيح هتلاقي أول سطر Sub StringVariable اتلون باللون الأصفر .. هنا بيتم الإعلان عن المتغيرات (بص في نافذة اللوكال) هتلاقي اسم المتغير str في عمود اسمه Expression ، وقيمته "" في عمود اسمه Value (طبعاً لسه فراغ لأن لسه مخزناش فيه حاجة) ، ونوعه String في عمود Type .. يعني ببساطة عرفنا تاريخ حياته في اللحظة دي ..عرفنا اسمه وقيمته ونوعه (الكلام دا رغم إنه ملوش علاقة بموضوع المصفوفات لكنه مهم جداً عشان نفهم إزاي نتعامل مع محرر الأكواد بشكل احترافي ونعلم نفسنا إزاي الكود بيتم تنفيذه) نضغط F8 تاني (هنا مفيش حاجة حصلت) السطر الأصفر انتقل للسطر ده str = "Officena Forums" ولكن محصلش أي تغيير في نافذة اللوكال ..دا لأن التغيير بيحصل لما بخرج من السطر الأصفر .. اضغط F8 للمرة التالتة وشوف نافذة اللوكال ولاحظ قيمة المتغير .. اتغيرت القيمة من فراغ إلى النص Officena Forums اضغط F8 للمرة الرابعة هتظهر لك رسالة فيها قيمة النص اضغط F8 للمرة الخامسة هيظهر قيمة المتغير في النافذة الفورية اضغط F8 للمرة السادسة والأخيرة على سطر End Sub لإنهاء الإجراء الفرعي بكدا نكون عرفنا إزاي هنتعامل مع تنفيذ الكود أثناء الدورة ... طولت في النقطة اللي فاتت شويتين بس كان لازم منها عشان ننتقل إلى مرحلة الاحترافية في التعامل مع الأكواد *************** طيب سؤال ايه علاقة المتغير بالمصفوفة؟ الإجابة إن المصفوفة متغير بس مش بيخزن قيمة واحدة (دا بيخزن مجموعة من المتغيرات دفعة واحدة) مثال عملي لفهم المصفوفة بشكل أعمق ::: نفترض أن لدينا 5 طلاب وليهم درجات ..نروح لورقة العمل ونكتب 5 أسماء بدرجاتهم كما بالشكل التالي نروح لمحرر الأكودا وننفذ الكود التالي ..الكود مش محتاج شرح الكود بسيط جداً Sub StudentMarks() With ThisWorkbook.Worksheets("Sheet1") 'الإعلان عن متغير لكل طالب Dim Student1 As Integer Dim Student2 As Integer Dim Student3 As Integer Dim Student4 As Integer Dim Student5 As Integer 'تعيين قيم المتغيرات من الخلايا المشار إليها Student1 = .Range("B1").Offset(1) Student2 = .Range("B1").Offset(2) Student3 = .Range("B1").Offset(3) Student4 = .Range("B1").Offset(4) Student5 = .Range("B1").Offset(5) 'طباعة الدرجات في النافذة الفورية Debug.Print "درجات الطلاب" Debug.Print Student1 Debug.Print Student2 Debug.Print Student3 Debug.Print Student4 Debug.Print Student5 End With End Sub أول سطر في الكود عشان نتعامل مع المصنف الحالي الذي يحتوي الكود .. والتعامل هيكون مع ورقة العمل Sheet1 ... الجزء الأول بيتم الإعلان عن المتغيرات لدرجات الطلاب من النوع Integer أي عدد صحيح (طبعاً دا مجرد مثال .. لأن الدرجات من المفترض إنها تكون Double لأن أكيد بيكون فيه كسور)>>المهم الجزء التاني بيتم تعيين قيم للمتغيرات (الدرجات) انطلاقاً من الخلية B1 ... بإزاحة بمقدار صف واحد لأسفل هيجيب قيمة الخلية B1 ... بإزاحة بمقدار صفين هيجيب الخلية B3 وهكذا الجزء التالت هيطبع درجات الطلاب في النافذة الفورية لتكون النافذة الفورية بهذا الشكل طيب المثال اللي فات 5 طلاب ..طيب لو عندي 100 طالب .. 500 طالب .. 1000 طالب .. 10000 طالب (هل سيكون التعامل مع طالب طالب ..؟؟ دا أكيد انتحار ) من هنا تأتي أهمية المصفوفة لتخزين جميع القيم في متغير واحد فقط .. يعني المصفوفة هتخليني أخزن القيم (درجات الطلاب) في متغير واحد فقط Sub StudentMarksArr() With ThisWorkbook.Worksheets("Sheet1") 'الإعلان عن متغير من النوع مصفوفة وأبعاد المصفوفة 5 عناصر 'لأن عدد الطلاب 5 طلاب والمطلوب تخزين درجاتهم في المصوفة Dim Students(1 To 5) As Integer 'قراءة درجات الطلاب من ورقة العمل Dim I As Integer For I = 1 To 5 Students(I) = .Range("B1").Offset(I) Next I 'طباعة الدرجات من المصفوفة في النافذة الفورية Debug.Print "درجات الطلاب" For I = LBound(Students) To UBound(Students) Debug.Print Students(I) Next I End With End Sub تم الإعلان عن اسم المتغير Students وطالما وضعنا أقواس بعد المتغير ..محرر الأكواد بيفهم إن دي مصفوفة .. طيب ايه الأرقام اللي ما بين الأقواس 1 إلى 5 دا اسم البعد الأول للمصفوفة (لأن المصفوفة دي عبارة عن عمود واحد اللي هو عمود الدرجات ودي بيسموها مصفوفة ذات بعد واحد (أحادية الأبعاد) وإن شاء الله هنتكلم عنها بالتفصيل نضع المؤشر داخل الكود ونضغط F8 ونبص في اللوكال ... ركز يا مان وشوف المتغير اللي اسمه Students في نافذة اللوكال هتلاقي علامة زائد انقر عليها زي ما إحنا شايفين اللوكال قالت كل حاجة ..قالت الأبعاد وقالت لنا على عناصر المصفوفة ورقم الفهرس لكل عنصر (الرقم اللي بين أقواس بعد اسم المصفوفة دي رقم الفهرس ) طبعاً لسه الكود في بدايتة فالقيم كلها ما زالت صفر .. ابدأ في التنقل باستخدام F8 كما تعلمنا وارجع بعد شوية .... لاحظت في الحلقة التكرارية اللي بدأت من 1 إلى 5 إن القيم الموجودة بدأت تتغير من أصفار إلى قيم (درجات الطلاب) لمزيد حول الحلقة التكرارية للمصفوفة راجع الموضوع التالي من هنا نيجي لآخر جزئية وهي طباعة الدرجات في النافذة الفورية ... هنا تم استخدام الحلقات التكرارية من بداية المصفوفة باستخدام كلمة LBound يليها اسم المصفوفة ، إلى نهاية المصفوفة باستخدام كلمة UBound يليها اسم المصفوفة .. ببساطة الكلمتين دول بيجيبوا الحد الأدنى للمصفوفة (1 كما في المثال) والحد الأعلى للمصفوفة (5 كما في المثال) قم بالضغط على F8 واحدة واحدة وشوف التغيرات اللي بتحصل في نافذة اللوكال والنافذة الفورية عشان تقدر تستوعب عمل الكود بشكل جيد إلى هنا حانت لحظة النوم وبدأ النوم يداعب جفوني ، ألتقي بكم على خير إن شاء الله وإلى لقاء آخر وموضوع متجدد بإذن الله دمتم على طاعة الله والسلام عليكم ورحمة الله وبركاته
- 34 replies
-
- 12
-
الحلقات التكرارية للمصفوفة
ياسر خليل أبو البراء replied to ياسر خليل أبو البراء's topic in منتدى الاكسيل Excel
أخي الحبيب صلاح أفضل دائماً في عملية التعلم التدرج في المعلومة ... حاول أن تتدرج في التدرب على الموضوع ثم بإذن الله ستجد كل شيء سهل ويسير .... تقبل تحياتي -
بسم الله ما شاء الله عليك أخي الغالي رمهان متمكن ... ورائع ما تسيبك من الأكسس وخليك معانا في الإكسيل ..!!
-
أخي العزيز أحمد رغم إن الدورة خلصت من فترة لكن يبدو إن فيه واجبات لازم تتصحح تاني .. بالنسبة للكود ده بص كويس في بداية كل سطر Sub news() ' ' news ماكرو ' ahmed ' ' Range("A1:B10").Font.Bold = True Range("A1:B10").HorizontalAlignment = xlRight Range("A1:B10").Font.Name = "Andalus" Range("A1:B10").Font.Size = 14 End Sub بصيت كويس ..تمام لاحظت ايه؟؟ علي صوتك عشان أسمعك ... بتقول لاحظت أنه نفس النطاق .... طيب ارجع اقرا الحلقة من تاني وشوف بنعمل ايه لما نتعامل مع نفس النطاق لأكثر من سطر وارجع لي بعد ما تراجع الحلقة (بلاش كروتة) تقبل تحياتي
-
الحلقات التكرارية للمصفوفة
ياسر خليل أبو البراء replied to ياسر خليل أبو البراء's topic in منتدى الاكسيل Excel
أخي الكريم صلاح المصري ... إليك الملف المرفق التالي فيه .... تطبيق عملي لاستخدام المصفوفات في عمليات الترحيل من خلال تخزين عناوين النطاقات المراد ترحيلها في مصفوفة حمل الملف من هنا -
وعليكم السلام أخي الكريم محيي تصدق فكرتني إني جعاااان ..أقوم أتغدى بقا ، بس مش هعزم عليكو ؛ عشان صعب تيجو كلكم مرة واحدة .. الميزانية لن تسمح يرحى إعادة العزومة في وقتٍ لاحق تقبل تحياتي
-
أخي الكريم توكل بلاش تتكلم في السياسة وإلا هعتبر دي مخالفة .. بلاش شغل الأحزاب ده !! إحنا هنا عيلة واحدة مش حزب وبعدين طالما إنك عضو في المنتدى يبقا متقلقش .. أكيد ليك نصيب في البطة بس إنت وحظك .. يعني يا رقبة يا رقبة
-
أخي الكريم أيمن بارك الله فيك وجزيت خير الجزاء على ما قدمته من خدمة للعاملين في هذا المجال برجاء تغيير اسم الظهور للغة العربية يا مستر ايمن تقبل تحياتي
-
ليس من عدل كمن أبدع أخي الغالي رجب جاويش فأنت صاحب الكود وكل ما فعلته أنني اختصرت المسافة .. يعني بدل ما آخد أتوبيس أخدت توك توك (وكل السبل تؤدي إلى بلشاي)
-
ممكن تضع سطر في أول الكود ليلغي هذه الرسالة التي تسبب مشكلة Application.DisplayAlerts=False تقبل تحياتي القلبية
-
جزيت خيراً أخي الغالي محمود عند الضغط على زر الأمر إنشاء نسخة مستقلة عن الحالة يحدث خطأ في السطر التالي wbTemp.SaveAs ThisWorkbook.Path & "\" & "اسم الملف.xlsx", 51
-
أخي الحبيب الغائب عن العين الحاضر في القلب محمود الشريف بارك الله فيك وجزيت خيراً على الموضوع المتميز نفع الله بك الإسلام والمسلمين البرنامج يعمل على 32 بت فقط .. يا ريت تزودنا بالنسخة 64 بت أيضاً تقبل وافر تقديري واحترامي
-
أخي الحبيب رجب جاويش بارك الله فيك وجزتي خيراً على حلولك الجميلة مجرد سؤال : لما قمت بكتابة أكواد في حدث كل ورقة عمل على حدا .. ما رأيك بإزالة كل الأكواد في حدث كل أوراق العمل ووضع الكود التالي في حدث المصنف Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = [B4].Address Then Application.EnableEvents = False Sheets("1").[B4] = Target.Value Sheets("2").[B4] = Target.Value Sheets("3").[B4] = Target.Value Application.EnableEvents = True End If End Sub تقبل وافر تقديري واحترامي
-
أخي الغالي رجب جاويش لكم يسعدني مشاركتك بالموضوع والمشاركة رائعة جداً وتثري الموضوع بشكل كبير مناقشة الكود لا تعني التقليل منه على الإطلاق إنما الموضوع أصلاً متعمد فيه عملية المناقشة وليس تقديم حلول فحسب .. فإذا كانت لديك أية أفكار حول الموضوع أو حول أي كود فلتقم بتقديم ملاحظاتك ليستفيد الجميع فرأيي أن مناقشة الأكواد تكسب المتعلم الجديد مهارات لن يكتسبها وحده ، وتثقل أداء المحترف ..ألست توافقني الرأي في تلك النطة (اتكتبت غلط أنا أقصد النقطة بس يبدو إن البطة مسيطرة على تفكيري) بالنسبة لكودك جميل جداً في حالة إذا كانت الأعمدة قريبة من بعضها والتي تمكن المستخدم من الاختيار بسهولة ولكن لو كانت الأعمدة متباعدة جداً سيكون الأمر مرهق .. هذه نقطة .. وبما أنك جعلت المستخدم يختار الأعمدة فكان من الأيسر بدلاً من الكود أن يقوم بتلك الخطوة ثم كليك يمين على رؤوس الأعمدة ثم يختار الأمر Hide .. فلن يكون للكود أهمية وصدقني لا أقصد على الإطلاق تقليل الكود ولكن المناقشة مفتوحة للجميع لكي يبدي رأيه تقبل وافر تقديري واحترامي
-
الأخ الفاضل أبو يحي أهلاً بك في المنتدى ونورت بين إخوانك برجاء تغيير اسم الظهور للغة العربية ومراجعة موضوع التوجيهات في الموضوعات المثبتة في المنتدى لمعرفة كيفية التعامل مع المنتدى بشكل أفضل وكما أخبرك أخونا المتميز رجب جاويش برجاء إرفاق ملف لتتضح الصورة أكثر .. وإن شاء الله طلبك سهل ويسير تقبل تحياتي
-
أخي الكريم أهلا بك في المنتدى ونورت بين إخوانك برجاء توضيح المطلوب ووضع الكود بين أقواس الكود وذكر المصدر للكود .. وما المطلوب من الكود أن يقوم به؟ وقم بإرفاق ملف توضح به المطلوب لتتضح الصورة ويستطيع الجميع تقديم المساعدة إن شاء الله تقبل تحياتي
-
استفسار توزيع الارقام على الخلايا
ياسر خليل أبو البراء replied to كريم الفلسطيني's topic in منتدى الاكسيل Excel
أخي الكريم كريم ما هو المنطق في عملية التوزيع للأرقام ؟ أليس من الممكن أن يكون التوزيع مختلف طبقاً لما أرفقته من ملف 6 ثم 4 ثم 3 ثم 5 ...؟؟!! -
أخي العزيز محمد علي سالم شرفتنا بتواجدك معنا في الموضوع سأقوم بشرح بسيط لكود الأستاذ سليم علها تكون البداية لك Sub xx() Columns.Hidden = True Range("a1,c1,e1,j1,o1,z1").EntireColumn.Hidden = False End Sub السطر الأول يبدأ بكلمة Sub يليها اسم الإجراء واسم الإجراء أنت حر فيه سمه بما تريد وأفضل أن تكون التسمية معبرة عن الهدف من الكود مثلاً UnhideSpecificColumns .. وفي آخر سطر قفلة الكود بالجملة End Sub ما بين السطرين البداية والنهاية هذا هو لب الكود (ودا ملوش علاقة بالسوداني .. ولا المصري !!) السطر الأول في الكود يقوم بإخفاء الأعمدة كلها ...أينعم حيث أن الخاصية المستخدمة هي الخاصية Hidden وتعني مخفي .. إذاً ترجمة السطر الأعمدة. مخفي =صح يعني إخفاء كل الأعمدة لو غيرنا القيمة True إلى False تفتكر ايه اللي ممكن يحصل ؟؟ معروف إن True عكسها False ..إذاً سيقوم السطر في هذه الحالة بإظهار كل الأعمدة السطر الأول إذاً يقوم بإخفاء كل الأعمدة مرة واحدة (دفعة واحدة وفي نفس واحد) ثم السطر الثاني يأتي ليحدد اعمدة يعينها للتعامل معها وإظهارها .. وهنا أخونا الغالي سليم استخدم أول خلية في كل عمود من الأعمدة المراد إظهارها ، فالخلية a1 تمثل العمود الأول .. المهم جمع الخلايا في نطاق واحد كما هو مشار في الكود بهذا الشكل Range("a1,c1,e1,j1,o1,z1") ثم استخدم الخاصية EntireColumn والتي تتعامل مع العمود بالكامل ثم الخاصية Hidden والتي تحدثنا عنها ، وهنا إشارة لكل الأعمدة المطلوبة وفي النهاية تم وضع القيمة False لها لإظهارها دون سواها أرجو أن أكون وفقت في توصيل المعلومة تقبل تحياتي