-
Posts
13,165 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
412
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو ياسر خليل أبو البراء
-
بارك الله فيك أخي الرائع مختار يمكن استخدام الإضافة التالية لتؤدي الغرض بعد إدراج الإضافة سيظهر زر أمر في التبويب Home باسم Get Sheet Size Get Sheets Size.rar
-
السلام عليكم ورحمة الله وبركاته إخواني الكرام ... ارتأيت أن موضوع المصفوفات بات من الأهمية بمكان بحيث لا يجب أن ننساه لما له من أهمية كبيرة في التعامل مع الأكواد بسرعة كبيرة جداً وخصوصاً في حالة التعامل مع كم هائل من البيانات .. فقررت أن أشارككم بما تقع عليه يدي من أكواد فيما يخص المصفوفات لنتعلم ونرتقي سوياً .. سأتناول كود بسيط بالتفصيل لنعرف ما هية المصفوفات وكيفية التعامل معها بشكل جيد الكود عبارة عن عمل حلقة تكرارية لعناصر المصفوفة من أول عنصر لآخر عنصر .. وإظهار العناصر في رسالة أو وضعها في نطاق أو التعامل معها كما تريد نبدأ بالكود بالكامل ثم نتناوله بالتفصيل Sub LoopInArray() Dim myArray As Variant Dim X As Integer myArray = Array("Yasser", "Khalil", "Officena", "Forum") For X = LBound(myArray) To UBound(myArray) MsgBox (myArray(X)) Next X End Sub السطر الأول هو بداية الإجراء الفرعي ويبدأ بكلمة Sub كما تعودنا يليه اسم الإجراء الفرعي ويفضل تسميته باسم يعبر عن الهدف من الكود ...قمت بتسميته LoopInArray حيث أننا سنتعامل بالحلقات التكرارية داخل عناصر المصفوفة .. وطبعاً لكل شيء بدأته لازم تقفله ..وقفلة الـ Sub بتكون بكلمة End Sub في نهاية الكود بالطبع السطر الثاني الإعلان عن متغير myArray وهو متغير للمصفوفة التي سنتعامل معها وقمت بتسميتها باسم مناسب وليس أي اسم (أفضل دائماً أن تكون أسماء المتغيرات معبرة عن المتغير والهدف منه ونوعه ..) السطر الثالث هو إعلان عن متغير من النوع Integer ووظيفة هذا المتغير أنه بمثابة عداد ..إذ أن من يعرف الحلقات التكرارية يعرف أنه لعمل حلقة تكرارية يستلزم أن يكون هناك عداد لهذه الحلقة التكرارية .. وقيمة المتغير X ستتغير مع كل حلقة .. أقصد أنه في أول لفة ستكون قيمة المتغير تساوي رقم البداية (فإذا كان رقم البداية 1 فإن المتغير يساوي 1) وفي اللفة الثانية تزداد قيمة المتغير بمقدار 1 ليصبح على سبيل المثال 2 وفي اللفة الثالثة يساوي 3 وفي اللفة الرابعة ..كمل إنت !! انتهينا من الأسطر التقليدية (تسمية الإجراء والإعلان عن المتغيرات) ... نتوقف قليلاً لللتجربة !! ماذا سنجرب يا ترى ؟ هل هناك ما يستدعي منا أن نجربه ونحن ما زلنا في البداية ولم نكتب أسطر فعلية للكود .. نعم لابد أن نتعلم شيئاً جديداً ومفيداً عند التعامل مع الأكواد ...... تطبيق : انسخ الكود السابق في موديول جديد ثم ضع الماوس داخل الإجراء الفرعي .. ومن قائمة View في محرر الأكواد اختر الأمر Local Window إنها نافذة ستجعل منك محترفاً في فهم الأكواد (صدقوني ستذهلون منها بشكل كبير جداً) ..إنها بمثابة نافذة لك لتدرك كيف يتم تنفيذ أسطر الكود سطر سطر انتبهوا لهذه النافذة بشكل كبير ... كيف سيتم التعامل مع هذه النافذة المدهشة ؟ الأمر في غاية اليسر والسهولة والبساطة .. ستستخدم من لوحة المفاتيح F8 وهو يمكنك من متابعة الكود سطر بسطر .. كفانا كلام نظري وننتقل للتطبيق .. ضع الماوس داخل الإجراء الفرعي (الكود) ثم اضغط F8 مرة واحدة فقط .. وانظر للنافذة التي كانت فارغة منذ قليل لقد أصبحت ثرية .. نعم ثرية .. بضغطة واحدة ستتمكن الآن من تحليل المتغيرات .. لقد تم وضع سطر باللون الأصفر على أول سطر بالكود كما تم وضع المتغيرات في النافذة بهذا الشكل في الناحية اليسار من النافذة توجد أسماء المتغيرات التي تم الإعلان عنها وفي العمود الأوسط قيمة المتغير ..فقيمة المتغير الأول Empty ما زالت المصفوفة فارغة لم يتم إضافة أي عنصر لها ، وقيمة المتغير الثاني لأنها من النوع Interger فتحمل القيمة صفر لأننا لم نضع قيمة لها بعد وفي العمود الثالث نوع المتغير فالمتغير الأول من النوع Variant وهذا النوع غالباً ما نستخدمه مع المصفوفة لأن المصفوفة مرنة ربما تحمل نصوص وربما أرقام وربما حتى نطاقات (موضوع يطول شرحه) إلى الخطوة الثانية والتي هي نفس الخطوة الأولى (حد يفكرني !!) محدش مركز !! ... الخطوة التانية اضغط F8 مرة تانية .. ماذا حدث ؟ لقد تجاوز السطر الأصفر أسطر الإعلان عن المتغيرات .. نعم لأنها أسطر غير قابلة للتنفيذ إنما تظهر المعلومات المرتبطة بهذه المتغيرات مع أول ضغطة على F8 بعد السطر الأول في الكود .. انتقل السطر الأصفر ليظلل السطر التالي .. ولم يحدث أي تغيير في نافذة الـ Local Window myArray = Array("Yasser", "Khalil", "Officena", "Forum") هل التنفيذ مرتبط بالسطر الأصفر ؟ نعم يتم تنفيذ السطر الملون بالأصفر بعد الخروج من السطر الأصفر وليس عند تظليل السطر الأصفر الخطوة الثالثة .. ماذا تتوقع أن يحدث بعد أن نضغط F8 للمرة الثالثة؟؟؟ فكر ثواني عشان تفهم اللعبة .. سيتم تنفيذ السطر الأصفر السطر الحالي عبارة عن تعيين قيم أو وضع عناصر للمصفوفة .. لدينا بعض الأسماء (وبما أن الأسماء نصوص فتم وضعها بين أقواس تنصيص) وهذه الأسماء سيتم وضعها داخل المتغير الذي قررنا أنه سيكون للمصفوفة انتبه انتبه ..لم أطلب منك أن تبدأ الخطوة الثالثة بعد ..!! فقط انظر لنافذة الـ Local Window على المتغير myArray وشوف القيمة هتلاقيها Empty أي أن المصفوفة فارغة (وكما بص على يسار اسم المتغير ..هل يوجد علامة زائد بجانب اسم المتغير myArray ؟؟ الإجابة لا يوجد) ابدأ تنفيذ الخطوة الثالثة ألا وهي نفس الخطوة الأولى ونفس الخطوة الثانية ..حد يفكرني !! محدش مركز .. اضغط F8 بردو (أنا مش عايز أتعبك أنا عايز تشوف وتتعلم وبعديها خلي دماغك يتكلم) ضغطت يا وائل ولا لسه على F8 ؟؟؟ تمام تمام الله ينور عليك ايه اللي حصل يا حوسو .. لما نحب نعرف ايه اللي حصل هنبص على الكود وعلى النافذة .. نبص الأول على الكود هنلاقي إنه تم الانتقال للسطر التالي وأصبح السطر التالي مظلل باللون الأصفر .. طيب الأهم إننا نبص على النافذة Local ونشوف المتغير myArray هنلاقي حاجة غريبة بتحصل .. حاجة بسيطة لكن مهمة المصفوفة اللي كانت فارغة Empty من شوية ومفيش علامة زائد جنبها .. أصبح فيه علامة زائد على يسار اسم المتغير ولما نبص في عمود القيمة هنلاقي كلمة Empty أصبحت مش موجودة .. دا لأنها بعد الانتقال من السطر اللي فات بقت المصفوفة فيها قيم .. نبص للعمود الثالث هنلاقي بردو فيه شيء اتغير ..نوع المتغير لم يتغير زي ما هو Variant بس فيه شيء إضافي .. هتلاقي ما بين قوسين بداية المصفوفة ونهاية المصفوفة بمعنى آخر المصفوفة اللي بنتعامل معاها دلوقتي فيها 4 قيم .. ولما نبص نلاقي الأرقام من 0 إلى 3 (افتراضي المصفوفة بتبدأ من الرقم 0 وليس الرقم 1 ) الأرقام دي عبارة عن فهرس للمصفوفة (زي فهرس كتاب) يعني مثلاً أول قيمة في المصفوفة اللي هي Yasser لها الرقم 0 في الفهرس .. والقيمة Khalil ليها رقم 1 وهكذا لنهاية القيم كل عنصر داخل المصفوفة ليها رقم في الفهرس .. عايز تتأكد من كلامي تعال على نفسك شوية ونتعب ونضغط علامة الزائد اللي على يسار اسم المتغير (خلي الصورة تتكلم شوية عشان أنا تعبت) زي ما إحنا شايفين الفهرس من 0 1 2 3 وكل عنصر له رقم في الفهرس وله قيمة يعني دلوقتي لو عايز أعرف تاني قيمة في المصفوفة هعمل ايه؟ ببساطة ممكن استخدم كلمة Msgbox ثم اسم المصفوفة ثم افتح قوس ثم أضع رقم القيمة المطلوبة ثم اقفل القوس MsgBox myArray(1) واحد يقولي إنت مش بتجيب تاني عنصر في المصفوفة ..طيب ليه كتبت واحد مش 2 (أقوله لأن المصفوفة بتبدأ من الصفر وليس من الواحد ..) فالواحد بمثابة 2 (عد من البداية ::: رقم صفر هو أول عنصر في المصفوفة .. رقم 1 هو ثاني عنصر في المصفوفة وهكذا) المهم عشان أنا بدأت أتوه من نفسي ننتقل للحلقة التكرارية ودي بيكون ليها عداد زي ما قلنا والعداد هنا X فبنقول For X وبعديها علامة يساوي ... بعد يساوي بداية الحلقة التكرارية يليها كلمة To ثم نهاية الحلقة التكرارية بداية الحلقة هتكون أول رقم فهرس في المصفوفة اللي هو في مثالنا يساوي صفر ، ونهاية الحلقة التكرارية هو آخر رقم في الفهرس اللي هو 3 وبدل ما نكتب من 0 إلى 3 (استخدمنا دالة بتجيب أول رقم في المصفوفة واسمها LBound ودي اختصار لكلمة Lower Bound أي الحد السفلي أي أول رقم في الفهرس ... وأيضاً بالمثل استخدمنا دالة عشان تجيب آخر رقم في المصفوفة والدالة هي UBound ودي اختصار لكلمة Upper Bound أي آخر رقم في الفهرس) طيب العداد لازمته ايه ؟؟ قلنا بيحمل القيمة الحالية ..فأول قيمة عندي هتكون صفر بالتالي قيمة X هتساوي صفر .. إحنا دلوقتي واقفين في السطر الملون باللون الأصفر مع بداية الحلقة التكرارية لو وقفنا بالماوس على كلمة X سيظهر تليح صغير في مستطيل أصفر صغير به قيمة المتغير ( في الصورة قيمة X تساوي صفر) وهو أول رقم في الحلقة التكرارية لأن رقم البداية صفر (والمتغير X يحمل قيمة أول رقم في بداية الحلقة) المهم اضغط F8 لتنتقل للسطر التالي وعايز تروح بالماوس وتقف على الكلمة دي myArray(X) هتلاقي مربع أصفر فيه القيمة Yasser وروح للـ X وقف عليها ستجد القيمة صفر أي أن المصفوفة المسماة myArray ثم نفتح قوس ونضع رقم الفهرس المطلوب ورقم الفهرس هنا هو صفر ..يحمل القيمة Yasser اضغط F8 لتظهر لك رسالة بقيمة أول عنصر في المصفوفة .. اضغط F8 مرة أخرى لتنتقل للفة الثانية في الحلقة .. ولاحظ أن الانتقال بعد ذلك سيكون ما بين السطرين MsgBox (myArray(X)) Next X القيمة X تتغير ويتغير معها القيمة التي تظهر في الرسالة .. أكمل الضغط على F8 لترى نتائج الكود بنفسك ... وعينك دائماً على نافذة Local لترى قيمة المتغير X وهي تتغير مع كل لفة وطبعاً عند وصول قيمة X لـ 3 تنتهي الحلقة التكرارية لأن نهاية الحلقة هو الرقم 3 أتمنى أن يكون الشرح واضح ومفيد للجميع مع تحياتي أخوكم ياسر خليل أبو البراء
- 33 replies
-
- 14
-
أخي الكريم ناصر المصري اطلع على الملف التالي عله يكون المطلوب إن شاء الله Grab Data With The Same Format Using Arrays.rar
-
أخي الكريم أبو حمادة بالنسبة لنسخ المعادلة دون التنسيقات استبدال السطر التالي Range("A16:BY16").AutoFill Destination:=Range("A16:BY" & x + 15), Type:=xlFillDefault بهذا السطر Range("A16:BY16").AutoFill Destination:=Range("A16:BY" & x + 15), Type:=xlFillValues
-
نسخ بيانات من ورقه لمجموعة اوراق
ياسر خليل أبو البراء replied to أبو وليد's topic in منتدى الاكسيل Excel
ضع قبل هذا السطر سطر لتخطي الخطأ On Error Resume Next -
أخي وحبيبي في الله أبو يوسف أعانكم الله على البلاء الذي ابتلاكم الله به .. ولا أملك لكم إلا الدعاء لكم أن يفرج الله عنكم ما ابتلاكم به .. وصبراً فمهما طال الليل لابد من بزوغ الفجر مساهمةً مني في الموضوع الرائع الذي بدأته ..سأساهم ولو بالقليل لعل أن يجد صدى ومنفعة لدى جميع الأعضاء أقدم لكم دالة من دوال الإكسيل وما يقابلها في محرر الأكواد الدالة هي CHAR : لمعرفة الحرف أو الرمز المقابل لرقم معين افتح ملف إكسيل وضع الرقم 1 في الخلية A1 وضع الرقم 2 في الخلية A2 ثم .. حدد الخليتين معاً وقم بسحب الخليتين من مقبض السحب .. واسحب الأرقام حتى الصف 255 أي اكتب الأرقام من 1 إلى 255 في الخلية B1 اكتب المعادلة التالية : =CHAR(A1) ثم قم بسجب المعادلة إلى آخر النطاق أي إلى الخلية B255 ستلاحظ وجود علامات ورموز وحروف في العمود الثاني ..هذا يدعى جدول الأسكي ASCII .. على سبيل المثال الأرقام من 0 إلى 9 تأخد الأرقام في جدول الأسكي من 48 إلى 57 الأرقام من 65 إلى 90 الحروف الإنجليزية الكبيرة الأرقام من 97 إلى 122 الحروف الإنجليزية الصغيرة الرقم 10 يمثل سطر جديد الرقم 32 يمثل المسافة (التي تؤخذ بالمسطرة يا باشمهندس) الرقم 44 يمثل الفاصلة , ------------------------------------------------------------------------ الدالة المقابلة للدالة CHAR في محرر الأكواد هي الدالة CHR مثال تطبيقي للاستفادة من الدالة : أنشيء ورقة عمل جديدة وضع النص التالي بهذا الشكل في الخلية A1 Yasser,Ahmed,Khalil,Salem,Baraa غير ارتفاع الصف وخليه 100 لتكون الأسماء واضحة أمامك الفاصلة تفصل بين الأسماء بفاصلة .. والمطلوب أن توضع الأسماء في نفس الخلية في أسطر متتالية أي تكون بهذا الشكل: قم بوضع الكود التالي في موديول .. Sub UseCHR() Dim str As String str = Range("A1").Value str = Replace(str, Chr(44), Chr(10)) Range("A1").Value = str End Sub يتم تعريف المتغير من النوع النصي باسم str ليحمل قيمة الخلية A1 وفي السطر الثالث يتم استبدال الفاصلة Chr(44) بسطر جديد Chr(10) ..بكل بساطة بالتالي أصبح لدينا المتغير الجديد تم فيه استبدال الفاصلة بسطر جديد .. في السطر الأخير يمكنك وضع قيمة المتغير في نفس الخلية A1 أو يمكنك وضعها في خلية جديدة كما ترغب أرجو أن تكون الخاطرة قد أعجبتكم تقبلوا وافر تقديري واحترامي
-
أخي الكريم أبو أحمد الحمد لله أنك توصلت لسبب المشكلة (بس متنساش إني توقعت وجود خلايا مدمجة من غير ما أشوف الملف ) بص بالنسبة للخلايا المدمجة الغيها لأنها لا تتوافق مع الأكواد ..حاول تضبط التنسيقات من غير ما تدمج الخلايا .. يعني مثلاً لو عندي نص طويل في الخلية A1 وليكن النص "الحمد لله الذي بنعمته تتم الصالحات" والخلية غير كافية .. ومش هينفع إني أوسع عرض العمود يبقا أول شيء بييجي في دماغك الدمج إنك تدمج الخلايا A1 و B1 و C1 و D1 عشان النص يظهر في الأربعة خلايا من A1:D1 أقولك اوعى تدمج .. وخليك مركز معايا ممكن تعمل ايه حدد الأربعة خلايا ... كليك يمين على الخلايا المحددة واختر الأمر تنسيق خلايا Format Cells >> ادخل على التبويب المسمى ALignment حلو الكلام ؟؟ قول حلو في أول قايمة منسدلة في النافذة اختر الأمر Center Across Selection واضغط أوك وبس خلاص ..سيتم المطلوب بدون دمج بالمناسبة يا ريت تغير اللقب اللي كله أرقام للقب الخاص بك بلاش 1427452 بتضايقني شوية تقبل تحياتي
-
جدول تقاطعات البيانات المسجلة
ياسر خليل أبو البراء replied to أبوساره's topic in منتدى الاكسيل Excel
أخي الكريم ابو سارة للأسف المرفق لا يؤدي إلى فهم المطلوب ..ما هي آلية العمل لحساب التقاطعات وضح المنطق في الخطوات التي يتم على أساسها العمل اشرح بالتفصيل الممل مع ذكر مثال كنموذج لكيفية حساب التقاطعات تقبل تحياتي -
تجزئة الاسم الى اكثر من خلية
ياسر خليل أبو البراء replied to مفتاح عثمان's topic in منتدى الاكسيل Excel
جميل يا أبو أنس جرب الأسماء المركبة مثل "عبد الله أحمد محمد عبد السلام" مع ملفك وأخبرنا بالنتيجة!! -
بداية الطريق لإنقاذ الغريق
ياسر خليل أبو البراء replied to ياسر خليل أبو البراء's topic in منتدى الاكسيل Excel
وبارك الله فيك أخي الكريم أبو أنس تقبل تحياتي -
فرز اسماء حسب حروف عمود معين
ياسر خليل أبو البراء replied to أبو أنس80's topic in منتدى الاكسيل Excel
أخي الكريم ابو أنس هل كود الأخ أبو نصار أدى الغرض ؟!! لأني جربته ولم يؤدي المطلوب كما هو واضح لي .. يرجى توضيح مشاركاتك قليلاً حيث أن الكلام لا يكون مفهوم بالنسبة لي بشكل كامل جرب الكود مرة أخرى وأعلمنا بالنتيجة -
دالة تحويل التاريخ الهجري إلى ميلادي
ياسر خليل أبو البراء replied to ياسر خليل أبو البراء's topic in منتدى الاكسيل Excel
أخي الكريم وليد الخطوات التي تقوم بها تحول التاريخ الميلادي لهجري كتنسيق فقط أما قيمة الخلية الفعلية فتكون تاريخ ميلادي ..!!! -
أخي الكريم أبو أحمد لم تجب على سؤالي ..هل الملف الأصلي ..الورقة التي بها الكود فيها خلايا مدمجة أم لا ..لأن غالباً المشاكل ما تحدث في وجود الخلايا المدمجة بالنسبة للكود طالما أنه يعمل على ملف إن شاء الله يعمل على ملف آخر إذا كان له نفس المواصفات من حيث ترتيب الصفوف والأعمدة والبيانات
-
أكرر عليك ..ضع ملفك أفضل واطرح المطلوب إذ أن الملف الأول ليس كما تظن أنه يقوم باستدعاء البيانات وفقط إنما يتم الاستدعاء بناءً على القيمة الموجودة في العمود الأول .. ارفق ملفك أفضل ليسهل العمل وتسهل المهمة . يسر على إخوانك يسر الله عليك
-
يمكنك تخفيف حجم الملف الأصلي من البيانات والاكتفاء بجزء من البيانات لتتضح الصورة إذ أن العمل بهذا الشكل سيكون مضني والاحتمالات لن تتوقف عند حد معين من المحتمل أن يكون هناك خلايا مدمجة تسبب لك المشاكل مجرد تخمين
-
جدول تقاطعات البيانات المسجلة
ياسر خليل أبو البراء replied to أبوساره's topic in منتدى الاكسيل Excel
أخي الحبيب سليم بارك الله فيك وجزاك الله كل خير لما لا تصبر قليلاً ريثما يضع السائل تصوره بدلاً من هدر الوقت والجهد ..مجرد تساؤل جميل أن نقدم المساعدة ولكن يجب أولاً التريث كي نفهم المطلوب بشكل أعمق .. المشاركة السابقة هي رقم 3 بالنسبة لك .. وربما لا يكون المطلوب أيضاً .. تقبل تحياتي -
تجزئة الاسم الى اكثر من خلية
ياسر خليل أبو البراء replied to مفتاح عثمان's topic in منتدى الاكسيل Excel
أخي الكريم يوجد موضوع فيه شرح للبدايات قم بالإطلاع عليه من هنا -
أخي الكريم بدلاً من إرفاق ملفات ملف تلو الآخر .. أقترح إرفاق ملف فيه بعض الصفوف وليس هذا الكم الهائل ليسهل العمل عليه . وتضع تصورك والمطلوب بشكل أكثر دقة .. هل المطلوب نسخ البيانات كما هي أم أن هناك ارتباط بشرط محدد ..!! أتمنى أن تكون وصلتك الفكرة
-
أخي الكريم هل الكود لا يعمل أم أنه لا يؤدي الغرض ؟؟ أم أن هناك مشكلة بالكود
-
هل ورقة العمل محمية ؟؟؟ وما هو إصدار الأوفيس الذي تعمل عليه؟ يرجى رفع النسخة من الملف التي بها المشكلة
-
تجزئة الاسم الى اكثر من خلية
ياسر خليل أبو البراء replied to مفتاح عثمان's topic in منتدى الاكسيل Excel
أخي الكريم مفتاح أهلاً بك في المنتدى ونورت بين إخوانك يرجى تغيير اسم الظهور للغة العربية إليك الملف التالي فيه دالة معرفة تقوم بالمطوب إن شاء الله كما يوجد خاصية البحث في المنتدى وستجد موضوعات بهذا الخصوص كثيرة .. تقبل تحياتي Split Compound Names UDF Function.rar -
جدول تقاطعات البيانات المسجلة
ياسر خليل أبو البراء replied to أبوساره's topic in منتدى الاكسيل Excel
أخي الكريم ارفق شكل النتائج المتوقعة حتى يسهل للأخوة الأعضاء فهم المطلوب بشكل أوضح