اذهب الي المحتوي
أوفيسنا

ياسر خليل أبو البراء

المشرفين السابقين
  • Posts

    13,165
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    412

كل منشورات العضو ياسر خليل أبو البراء

  1. أخي الحبيب ابن مصر (يبدو أننا نلتقي في نفس الطريق إلى روما دائماً ...) بارك الله فيك وجزاك الله خير الجزاء عما تقدمه من مساعدات جمة وعظيمة لإخوانك تقبل تحياتي وأشواقي بس من غير وردة عشان خايف الورد يخلص وميبقاش غير الشوك
  2. ارفق مثال فقط وإن شاء الله إذا كان المطلوب وافي ، سيقوم الأخ الذي قام بحل مشكلتك بشرح تفصيلي لكيفية عمل الملف ، وأنت تقوم بدورك بالتعديل على ملفك الأصلي ساعد الناس لكي يساعدوك
  3. تفضل أخي الحبيب الملف المرفق Get IP Function.rar
  4. السلام عليكم إخواني الكرام أعرف مدى انشغالكم وعدم إطلاعكم على جديد الحلقات ، فها هنا أنوه عن الحلقة الحادية عشرة .. http://www.officena....094#entry364721 بارك الله فيكم ، ونفعنا الله بما نعلم ، وعلمنا ما ينفع تقبلوا تحياتي
  5. الحلقة الحادية عشرة ***************** السلام عليكم ورحمة الله وبركاته إخواني الكرام في الصرح العملاق أوفيسنا ، أقدم لكم اليوم موضوع في غاية الأهمية ، ألا وهو التعامل مع السلاسل النصية Strings والدوال الخاصة بالتعامل مع النصوص. اتعرفنا في حلقات سابقة على المتغير String ، ودا بنستخدمه لتخزين النصوص .. أول شيء بنعلن عن اسم المتغير ونحدد نوعه كـ String بالشكل ده : Dim strEmail As String وقلنا إن الأفضل دايماً لما نسمي متغير يكون معبر ، ففي السطر اللي فات أنا نويت والنية لله إني أخزن نص ، والنص ده عبارة عن إيميل ، فسميت المتغير strEmail أول 3 حروف من كلمة String وبعدين كلمة معبرة عن النص Email ، وحددت نوعه إنه نص String. طيب تاني سطر ببدأ أضع قيمة للمتغير اللي أعلنت عنه ، ودا بيكون بطريقة معينة ، إننا نحط اسم المتغير على اليسار ، وبأكد على اليسار وبعديه علامة يساوي ، وبعد علامة يساوي أفتح أقواس تنصيص وأكتب النص اللي عايز أخزنه وأقفل أقواس التنصيص (كل اللي بقوله يا حماده كلام قديم مفيش جديد ..دا في الإنجليزي بيسموه Warm-Up يعني تهيئة للحلقة) strEmail = "yakh777@yahoo.com" طيب هل دايماً لازم نحط نص في قيمة المتغير النصي ولا فيه طريقة تانية ؟ فيه طريقة تانية ..إن يكون النص في خلية معينة وليكن A1 ، ولما نيجي نضع قيمة للمتغير نشير لقيمة الخلية A1 زي كدا : strEmail = Range("A1").Value حط الايميل في الخلية A1 ، وجرب بنفسك .. جرب مرة تكتب النص ، وعن طريق الدالة Msgbox شوف النتيجة ، ومرة تانية جرب السطر الأخير وشوف النتيجة (النتيجة واحدة .. كل السبل تؤدي إلى حلقات افتح الباب) ... خلصنا المراجعة يا مدحت .. نشوف ايه اللي هنقدمه في حلقة النهاردة .. أنا صراحة مش مرتب في أفكاري .. ممكن تقول إني عشوائي جداً ، بس الحمد لله ، بتوفيق الله عزوجل بيخرج الموضوع منظم ومتسألش إزاي ..! أنا همسك دالة دالة من دوال التعامل مع النصوص وهشرحها بالتفصيل ، والله المستعان *-------------------------------------------------* الدالة Len (دالة بسيطة وسهلة وكلنا عارفينها ، وبنستخدمها في ورقة العمل : طبعاً إنتو لما بتقروا الحلقات بيكون فيه ملف إكسيل مفتوح (مش كدا ولا مطنشين) ، عشان نطبق أول بأول .. في الخلية A1 إحنا كتبنا نص ، عايزين نعرف طول النص ده ، فبنستخدم الدالة Len ، مثلاً في الخلية B1 اكتب المعادلة بهذا الشكل : =LEN(A1) واحد هيقولي إنت مش بتشرح VBA إنت بتخدعنا ، الشغل دا إحنا عارفينه !! أنا عارف إنكم عارفينه ، بس عايزين نربط بين الشغل في ورقة العمل والشغل في محرر الأكواد ، عشان تكون الصورة واضحة .. نروح للمحرر .. ونكمل الكود اللي كتبنا منه أول سطرين .. Dim strEmail As String Dim X As Integer strEmail = Range("A1").Value X = Len(strEmail) MsgBox strEmail & " : " & X أظن الكود واضح جداً ، إحنا الحمد لله وصلنا لمرحلة متقدمة نقدر من خلالها نفهم أسطر الكود .. هشرح الجديد بس عشان الناس متحسش بالملل : الجديد يا أستاذ عبد المجيد ، الدالة Len ، ودي وظيفتها إننا بنقدر من خلالها معرفة عدد أحرف النص ، والأحرف مش مقصود بيها الحروف العربية والإنجليزية فقط ، ولكن الرموز أيضاً بيتم حسابها زي علامة @ والنقطة .. لما ننفذ الكود هتطلع رسالة فيها النص الموجود في الخلية A1 وبعدين عدد أحرف النص .. وفصلت بينهم بـ : (Shift + ك) الدالة أسندناها للمتغير X وخلينا نوعه Integer لأن عدد أحرف النص عدد صحيح (ولا يمكن يكون فيه حرف بنشوفه ربع حرف زي . طبعاً لا ... ، الحرف يمثل عدد واحد صحيح) بعد كتابة الدالة وضعنا فتحنا قوس ووضعنا المتغير النصي اللي سميناه strEmail وقفلنا القوس ( ) ، ننفذ الكود هنلاقي النتيجة إن عدد الأحرف 17 (اتأكد بنفسك لو وقتك يسمح) *-------------------------------------------------* ننتقل لدالة تانية : الدالة InStr (شكلها صعبة .. لو عرفت اختصارها هتكون سهلة بإذن الله ..الحرفين In يعني (في) أو (داخل) .. والحروف Str اختصار String .. بمعنى تاني : الدالة دالة بحث عن نص داخل نص (فزورة .. وكلام معقد مش عايزين) .. بالمثال نفهم الكلام المعقد ..(نص فرعي أي جزء من النص داخل سلسلة نصية طويلة) ..بردو الكلام صعب نفترض إننا في الإيميل اللي كتبناه عايزين نعرف علامة @ موقعها فين في النص ، في الحالة دي هنستخدم الدالة InStr عشان نقدر نحدد موقعها (مش هنحتاج لـ GPRS خاصية البحث عن طريق الأقمار الصناعية) .. ناخد مثال عشان منتوهش !! Dim strEmail As String Dim X As Integer strEmail = "yakh777@yahoo.com" X = InStr(strEmail, "@") MsgBox X نفس المثال اللي فات تقريباً .. نركز على الجديد ، ونقول دا شكل الدالة ، تقريباً زي الدالة اللي فاتت بس نركز إن فيه بارامتر تاني ، البارامتر التاني هو عبارة عن النص المراد البحث عنه (يعني ممكن نقول إن النص عبارة عن كومة قش ، والنص الفرعي المراد البحث عنه عبارة عن إبرة ، فنشرح الدالة ببساطة إن الدالة بتقوم بعملية البحث عن إبرة في كومة قش .. !!) الناتج يا جماعة يا متابعين الحلقات بيكون عبارة عن عدد صحيح Integer ، لو جربنا الكود هنلاقي الناتج 8 ، أي أن موقع الإبرة في كومة القش رقم 8 (عد من الشمال يا حاج كمال) ممكن نكتب النص الأصلي مباشرةً بدل من إسناده لمتغير زي كدا : Dim X As Integer X = InStr("yakh777@yahoo.com", "@") MsgBox X بس أنا أفضل دايماً الإعلان عن المتغير ، وإسناد قيمة له ، لسبب إننا لما بنكتب كود ، مش هنشتغل على النص مرة واحدة .. الشغل هيكون أكتر من مرة .. فبالتالي أفضل المثال السابق. وجه الاستفادة من الدالة دي إنك تتأكد من وجود نص معين في النص الأصلي من عدم وجوده ، يعني لو مش موجود هتكون النتيجة ايه ؟ فكروا شوية قبل ما أقول الإجاية : أكيد صفر ، لأن النص الفرعي (الإبرة) مش موجودة ، بالتالي تكون النتيجة صفر..نجرب المثال التالي : Dim strEmail As String Dim X As Integer strEmail = "yakh777@yahoo.com" X = InStr(strEmail, "@") If X = 0 Then MsgBox "الإيميل غير صحيح ؛ لأنه لا يحتوي على العلامة اللي متعودين عليها" Else MsgBox "الإيميل صحيح يا فصيح ؛ لأنه يحتوي على العلامة اللي زهقنا من شكلها" End If نجرب ننفذ الكود مرة ، ونشوف النتيجة ، هنلاقي إن الرسالة التانية هي اللي هتظهر ، لأن قيمة X = 8 ، يعني أكبر من الصفر (ودا دليل على وجود الإبرة في كومة القش) أما لو شيلنا علامة @ وجربنا الكود مرة تانية ، فهتظهر لنا الرسالة الأولى ، لأن قيمة X=0 ، (ودا دليل على عدم وجود النص الفرعي في السلسلة النصية) بكدا يكون انتهى الكلام عن الدالة InStr ... لا لسه متستعجلش .. الدالة فيها بارامترات اختيارية واحد بيكون في الأول وواحد في الآخر ، الشكل العام لها كدا : InStr(start, Text_To_Search, Find, comapre إحنا أخدنا البارامتر التاني اللي هو كومة القش (النص المراد البحث فيه) ، والبارامتر التالت اللي هو الإبرة (النص المراد البحث عنه) .. بالنسبة للبارامتر الأول دا نقطة البداية ، ولما مش بنكتبها بيكون الافتراضي فيها 1 أي بداية عملية البحث والتنقيب عن الإبرة في كومة القش تبدأ من أول حرف بالنص.. البارامتر الأخير بردو اختياري ودا نادر الاستخدام .. ودا له 4 قيم : (vbUseCompareOption) , (vbBinaryCompare) , (vbTextCompare) , (vbDatabaseCompare) ناخد مثال بسيط عشان نفهم جزء واحد من الخيارات للبارامتر الرابع : Dim X As Integer X = InStr("This is my heart", "t") MsgBox X ننفذ الكود نلاقي إن الناتج 16 ، ودا موقع حرف t في النص ، نخلي بالنا إن فيه حرف الـ T في أول النص الأصلي ، طيب نفترض إننا عايزين نعرف موقع أول حرف T سواء كان Capital أي حرف كبير أو Small أي حرف صغير .. في الحالة دي هنستخدم البارامتر الرابع ، وهنستخدم الخيار vbTextCompare (وفي حالة استخدامه بيتم تجاهل حالة الأحرف) Dim X As Integer X = InStr("This is my heart", "t", vbTextCompare) MsgBox X ننفذ الكود نتصدم برسالة خطأ .. الغلطة فين ؟ هي مش غلطة ، إنما قاعدة ، إنك لو هتستخدم البارامتر الرابع اللي هو أصلاً اختياري يبقا إجباري عليك تستخدم البارامتر الأول اللي هو اختياري -- أما لو استخدمت البارامتر الأول اللي هو اختياري ، فممكن عادي تستغنى عن البارامتر الرابع اللي هو اختياري (هدوخكم ورايا .. اقرا من الأول عشان تفهمها ) .. يعني الشكل الصحيح يكون كدا : Dim X As Integer X = InStr(1, "This is my heart", "t", vbTextCompare) MsgBox X الناتج هنا هيكون مختلف ، هيكون رقم 1 ، ودا موقع حرف الـ T في أول النص (هنا تم التغاضي عن حالة الأحرف .. يعني كأننا بنقوله ملكش دعوة الحرف كبير أو صغير .. ابحث عنه) كفاية كدا على الدالة دي (خدت أكتر من وقتها) .. *-------------------------------------------------* ننتقل لدالة ثالثة اسمها StrReverse ودي من اسمها نعرف وظيفتها .. Reverse معناها عكس (مضاد : لا مش مضاد .. بقول عكس) يعني بص لها من الآخر .. يعني مثلا كلمة (أوفيسنا) لما بنصلها من الآخر تبقا (انسيفوأ) كدا أكيد وصلتكم ناخد مثال عملي : Dim strOfficena As String Dim strResult As String strOfficena = "أوفيسنا" strResult = StrReverse(strOfficena) MsgBox strResult نجرب الكود ونشوف النتيجة .. كفاية عليها كدا ، مش مستاهلة نتكلم عنها كتير .. *-------------------------------------------------* هختم الحلقة بالدالة الرابعة (نظراً لأن رقم 4 بيغيظ ناس .. وأنا بصراحة من النوع الغياظ المستفز) .. الدالة التوأم (دالتين هشرحهم مع بعض ) .. بس قبل ما نشرحهم نروح لورقة العمل ونكتب مثلاً yasser في الخلية B3 ، وفي الخلية المجاورة اكتب المعادلة : =UPPER(B3) والخلية B4 اكتب كلمة YASSER كلها حروف كبيرة ، وفي الخلية المجاورة اكتب المعادلة : =LOWER(B4) أظن الأمور واضحة بالنسبة لكم ، نرجع للمحرر ونشوف شكل الدالتين دول في المحرر : الدالة LCase أول حرف منها L اختصار Lower يعني زيها زي الدالة Lower في ورقة العمل ، والتانية UCase وحرف U اختصار لكامة Upper يعني زيها زي الدالة Upper بس خلاص .. مش محتاجة شرح .. ممكن ندعم الكلام بمثال فقط : Dim strName As String strEmail = "yasserkhalil" MsgBox UCase(strEmail) نجرب نفس المثال ، بس نخلي النص كله حروف كبيرة ، ونستخدم الدالة التانية LCase زي كدا : Dim strName As String strEmail = "YASSERKHALIL" MsgBox LCase(strEmail) نأتي إلى الواجب اللي الناس بطلت تعمله : اكتب كود ، وأعلن عن متغير نصي ، على أن يكون النص المراد تخزينه فيه العلامة @ ، وفي رسالة أظهر النص المخزن في سطر ، وعدد الأحرف للنص في سطر ، موقع العلامة @ في سطر ، وقم بعكس النص في سطر ، وقم بتحويل حروف النص إلى أحرف كبيرة في سطر ، وتحويل حروف النص إلى أحرف صغيرة في نص .. وكفاية كدا عشان متتعبوش ، أنا يهمني راحتكم. كان معكم أخوكم أبو البراء من منتدى أوفيسنا إلى لقاء متجدد بإذن الله .. دمتم في رعاية الله (خدوا بقا شوية ورد لأحسن أخونا ابن مصر شكله ناوي يخلص على الورد اللي في المنتدى :fff: :fff: .. كفاية 4 وردات) والسلام عليكم ورحمة الله وبركاته
  6. أخونا الكبير أبو حمودي وجودك يشرفنا دائما ، وطلبك في حد ذاته مشاركة ربما يستفيد منه الكثيرون تأكد دائما أنك بين إخوانك وخلانك .. قم بإرفاق ملفك لتجد من يعاونك بإذن الله .. تقبل تحياتي
  7. أشكرك أخي أبو حنين على الكلمات الرقيقة ولكن ليس ما قمت به إبداع .. إنما هي معادلة جمع Sum وبها المعادلتين اللتين تفضلت بهما .. ساعات بتكون بسيطة بس محدش بيكون واخد باله منها .. تقبل تحياتي (خد وردة قبل ما الورد يخلصه ابن مصر )
  8. لو كانت المشكلة بالجمع ممكن تتحل بسهولة =SUM(IF(COUNTIF(B4:B5,"?*")>=1,1,"0"),COUNTIF(B6:B13,"?*"))
  9. حقيقة لم أفهم طلبك : هل تريد العمل على كامل الصف أم من العمود A:D بشكل منفصل عن النطاق E:G ؟ وضح طلبك بشكل أدق لنتمكن من مساعدتك
  10. جزاكم الله خير الجزاء أخي وحبيبي حسام .. في منتهى الروعة .. وموضوع في منتهى الأهمية ، بارك الله فيك وجزيت خيراً وأكلت لحم طيرٍ تقبل تحياتي
  11. الملف المرفق ليس له علاقة بطلبك أخي هامور ..
  12. بالنسبة للمعادلات ننتظر الأستاذ الكبير ملك المعادلات الأستاذ جمال ليقوم بحلها بالمعادلات ..هل جربت الكود على الملف الأصلي؟ هل الكود بطيء في الملف الأصلي ؟ أم أنك تريد الحل بالمعادلات بعيداً عن الأكواد أعتقد أن الأكواد تكون أكثر كفاءة في حالة التعامل مع البيانات الكبيرة بعكس المعادلات التي تبطيء التعامل مع الملف خصوصاً إذا كانت معادلات صفيف
  13. في منتهى الروعة والبساطة والجمال والإبداع بارك الله فيك أخي محمد الريفي تعجبني البطاطا أقصد البساطة
  14. الأخ الحبيب عادل جرب الملف التالي ومتنساش الدعوة Product List For Each Client.rar
  15. الأخ الحبيب جرب الملف التالي : طبعا هتلاقي الاسماء مترتبة ، قم بنسخ الأسماء الغير مرتبة في العمود J وانسخها إلى العمود A ، واحفظ الملف وأغلقه ثم قم بفتحه مرة أخرى Sort Automatically.rar
  16. أخي الحبيب عبد الهادي كل الحلقات فيها أمثلة ما عليك إلا تطبيقها بنفسك حتى تثبت في النافوخ وإلا لن تثبت .. لا تعتمد على الملفات الجاهزة بأي حال من الأحوال اصنع ملفاتك بنفسك إذا أردت أن تتعلم بشكل صحيح تقبل تحياتي
  17. تسلم يا ابن مصر يا غالي الحقيقة إني معملتهاش لأني معتقدش إن فيه حد هيبعثر البيانات بالشكل ده .. عموما بإضافتكم يتجمل الملف بارك الله فيك وجزاك الله خير الجزاء .. إنت تكمل الناقص عندي يا كبير إضافة : يمكن معرفة آخر صف في أي عمود أيضاً بالسطر التالي : LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
  18. أخي الحبيب سليم مش معقولة تهدينا هدية ومنردش الهدية إليك كما وعدتك ملف يقوم بعمل قائمة منسدلة لأكثر من 3 أعمدة (زي ما إنت عايز .. براحتك مش 3 بس) أنا عملت القائمة المنسدلة في الخلية H3 فقط قم بالنقر على زر الأمر .. لتحصل على قائمة منقحة مصححة مفلطحة .. اختر منها سليم حاصبيا .. تقبل تحياتي Unique Validation List From Multi Columns.rar
  19. أخي الفاضل جرب وضع الكود التالي في حدث المصنف بعد الدخول على محرر الأكواد عن طريق Alt +F11 قم بنسخ الكود التالي في حدث المصنف عن طريق النقر المزدوج على ThisWorkbook من نافذة المشروع في الجهة اليسرى (ركز بقول في اليسرى وانت بتبص في الجهة اليمنى ..!!) ، دبل كليك على المصنف والصق الكود التالي فيه ، احفظ الملف واقفل المصنف وافتحه .. Private Sub Workbook_Open() Sheets("القائمة").Activate: Range("A1").Select End Sub
  20. أخي الكريم نور الضياء أنا لم أعمل على أوفيس 2010 .. عموما جرب الملف التالي فيه زرين : زر لإظهار التبويب Developer وآخر لإخفائه تقبل تحياتي Show Hide Developer.rar
  21. نسخة الويندوز لديك 32 بت أم 64 بت؟ قد وبقول قد تكون السبب .. لندع شخص ما يجرب الأداة ويخبرنا بالنتيجة ..
  22. لإثراء الموضوع هذا حل آخر بالأكواد Dup Names Detector YK.rar
  23. الحمد لله الذي بنعمته تتم الصالحات جزيت خيرا أخي على موضوعك الذي أثرى المكتبة لدينا بشيء جديد لا حرمنا الله من جديدك أيها المكتشف يشرفنا وجودك بيننا بالمنتدى ..تقبل تحياتي
×
×
  • اضف...

Important Information