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

الردود الموصى بها

قام بنشر

الى جميع الاخوة من مشرفين واعضاء

السلام عليكم ورحمة الله وبعد

اريد طريقة بـ VBA تمكنني من جمع الجدول مثلا من B8:N141 ثم لو اختلفت النهاية مثلا B8:N100 يكون الجمع تلقائي بواسطة الكود ولكم جزيل الشكر

قام بنشر

الاخ nse

تحياتى لك

اخى يمكنك عمل ذلك بدون اللجوء الى VBA ببساطة شديدة

فيمكن استخدام المدى المتحرك بمعنى المدى الديناميكى (Dynamic Range)

فى عمل جدول ذو مدى ديناميكى (Dynamic table)

ولعمل Dynamic Range يجب اجادة استخدام دالة (OFFSET) مع احد دوال العد مثل (COUNTA)

الجدول الديناميكى يمكن عملة بطريقتين حسب احتياجك

النوع الاول هو الجدول ذو المدى المتحرك بعدد الصفوف حسب احتوائها للبيانات وهو ما فهمت من طلبك

شاهد المرفق

ستجد فى المرفق ورقتين

الورقة الاولى بها مثال لما تطلب اللون الاخضر هو مدى الجدول ويتم انشاء المدى (MyRange1)

من قائمة ( ادراج / اسم / تعريف )

وكتابة اسم المدى فى خانة (الاسماء فى المصنف)

ومعادلة المدى فى ( يشير الى )

والمعادلة المستخدمة هى :

=OFFSET(Test1!$B$8;0;0;COUNTA(Test1!$B$8:$B$141);13)
والخلية الصفراء تقوم بعملية جمع الجدول وصيغتها :
=SUM(MyRange1)

والورقة الثانية :

نفس الورقة الاولى مع الاختلاف فى نوع الجدول وهو جدول ديناميكى بعدد الصفوف والاعمدة

ارجو ان اكون اسطعت التوضيح

تحياتى

Dynamic_table.rar

قام بنشر

الاخ تامر

السلام عليكم ورحمة الله

اشكرك على هذه المعلومة القيمة ولكن مايحصل عندي هو مسح لمحتويات الصفحة واحضار بيانات اخرى من صفحة اخرى

وهذه البيانا ت كما ذكرت مختلفة حينا تنتهي عند السطر 100 ومرة اخرى بعد مسح القديم تنتهي عند 141 مثلا وبالتالي عمود التجميع سينمسح مع كل نسخ وبالتالي اريدها ضمن كود يتعرف على آخر خلية ثم يقوم بالتجميع

واشكرك كثيرا مرة اخرى

قام بنشر

الاخ nse

السلام عليكم ورحمة الله وبركاتة

اخى اراى مشاركات كثيرة لك تبين انك تستطيع التعامل مع الاكواد

فيمكن عن طريق الكود واستخدام الفكرة المطروحة بجمع اسم المدى المتحرك عن طريق اسمة وليس عنوانة

واذا اردت مساعدتى ضع صفحة البيانات مع توضيح المطلوب لأجراء الازم

تحياتى

قام بنشر

اخي تامر

اشكرك على سرعة الرد انا اهوى البرمجة واحب تعلمها ولكن تواجهني بعض الصعوبات احيانا واحاول التغلب عليها ولكن اذا لم استطيع ارجع لمنتدانا الرائع وجهودكم الجبارة وعلمكم لاجتياز الصعوبة التي اواجهها

اخي تامر مرفق الملف وماريد هو عند اختيار مدينة الرياض مثلا من القائمة المنسدلة تكون هناك دالة عن طريق الكود تجمع البانات من يناير الى ديسمبر حسب المرفق وعلى فكرة الكود المرفق من عمل قمت به لاحد المشاركين

ولك خالص تحياتي

_______.rar

قام بنشر

=OFFSET(Test1!$B$8;0;0;COUNTA(Test1!$B$8:$B$141);13)

بارك الله فيك أخي عمر الحسيني

عمل رائع

وفضلا لا أمراً أود التكرم مشكوراً بشرح المعادلة أعلاه شرحاً مفصلاً . . إذا لم يكن لديك مانع .

قام بنشر (معدل)

شكرا لك اخى nasersaeed

اخى أبوعبدالله يسعدنى ذلك وخصوصا انه موضوع هام جدا لمن اراد اجادة التعامل مع الاكسيل

Offset

استخدام دالة ( Offset ) لتصنع مدى او نطاق ديناميكى

هي دالة حيوية لها كثير من الاستخدامات

دالة (Offset) من الدوال الهامة جدا التى تتعامل مع مراجع الخلية

وهى من الدوال التى تزيد امكانيات الدوال الاخرى التى تقترن بها

ودالة (Offset) تعيد قيمة من اي خلية يشار اليها بعدد من الصفوف والاعمدة التى تبتعد عنها .

وصيغة الدالة هى :

=OFFSET(reference,rows,cols,height,width)
- العامل الاول : الخلية المرجع او الخلية الاساس او الام 2 - العامل الثانى : عدد الصفوف 3 - العامل الثالث : عدد الاعمدة 4 - العامل الرابع : الارتفاع محدد بعدد من الصفوف 5- العامل الخامس : العرض محدد بعدد من الاعمدة وقد تم استخدام دالة () فى المثال الذى اشرت اليه اخى لعمل مدى متحرك او ديناميكى ولنعمل معا مثال بسيط : نحن نريد إنشاء مدى لجدوال من البيانات يحتوى على 10 صف و 5 أعمدة الوضع العادى لهذا الاجراء هو ان نقوم بتعليم هذا المدى بدأ من الخلية (A1) الى الخلية (E10) من قائمة (ادراج / اسم / تعريف) ونكتب اسم هذا المدى وليكن ( Rng) سنجد ان الصيغة الموجود اثناء انشاء الجدول فى الصندوق الحوارى (تعريف اسم) والتى تشير الى احداثيات المدى ( Rng) هى : A1:E10 وهى عبارة عن 10 صف و 5 أعمدة وتظل هكذا دائما هذا المدى دائما ثابت كما نعرف سواء احتوى الجدوال على بيانات او لم يحتوى على بيانات هنا تأتى فائدة انشاء المدى الديناميكى الذى تزاد عدد صفوفة او تنكمش تبعا لأحتواء المدى على بيانات وخاصة فى العمود الاول او حسب اى عمود تريدة ليكون هو الحاكم بأمر المدى حسب احتوائة على بيانات . سنقوم معا بإنشاء نفس المدى ولكن بأسم ( MyRange ) وبنفس الابعاد التى اشرنا اليها وهى عبارة عن 10 صف و 5 أعمدة . ولكن هذه المرة سيكون كمدى دينامكى يتمدد وينكمش حسب احتواء العمود الاول (A) على بيانات اى اذا كانت الخلايا من (1A) الى (3A) بها بيانات كان المدى عبارة عن 3 صف و 5 أعمدة . اما اذا كانت الخلايا من (1A) الى (7A) بها بيانات كان المدى عبارة عن 7 صف و 5 أعمدة . شئ جميل جدا طبعا لمن يتعامل مع الاكواد وخاصتا من يعمل مع اسماء النطاقات بدل من الاشارة الى المدى بالخلايا المرجعية له 0 اخى قم فتح ملف جديد فارغ لنعمل هذا المثال : قم بتسمية الورقة الاولى Test1 فى الورقة الاولى قم بتحدد المدى (A1:E10) وقم بتلوين خلاياه باللون الاخضر الفاتح ليكون فقط واضح لنا . قف فى اى خلية واضغط مفتاحى (كنترول + اف3) لفتح صندوق الحوار (تعريف اسم) فى خانة (الاسماء فى المصنف) اكتب اسم المدى او النطاق فى هذا المثال وليكن (MyRange) وفى خانة (يشير الى) اكتب الصيغة التالية : سنقوم بشرحا بعد إنشاء المدى والتعرف عليه
=OFFSET(Test1!$A$1;0;0;COUNTA(Test1!$A$1:$A$10);5)
ثم اضغط موافق وقم بحفظ الملف املئ الخلايا الخضراء بأى بيانات اضغط مفتاح (اذهب الى) اى مفتاح (اف5) و اكتب (MyRange) طبعا بدون الاقواس سنجد ان المنطقة الخضراء تم تعليمها بالكامل (A1:E10) الان قم بمسح بيانات الصف العاشر والتاسع اضغط مفتاح مفتاح (اف5) و اكتب (MyRange) سنجد هنا ان المنطقة المعلمة عبارة عن ثمانية صفوف من الجدول والان امسح محتويات الخلية (8A) اضغط مفتاح مفتاح (اف5) و اكتب (MyRange) سنجد هنا ان المنطقة المعلمة عبارة عن سبعة صفوف من الجدول لماذا اخى سنفهم ذلك من شرج صيغة المدى :
=OFFSET(Test1!$A$1;0;0;COUNTA(Test1!$A$1:$A$10);5)
لاحظ ان
Test1!
هذا هو اسم اورقة الاولى ملحق به علامة التعجب ليشر الى اسم الورقة (هذه طريقة الاشارة الى اسماء الاوراق فى صيغ المعادلات) 1 - العامل الاول :
 Test1!$A$1
وهو يشير الى الخلية (1A) فى الورقة ( Test1 ) اى الخلية الاساسية او نقطة بداية المدى او خلية الارتكاز او الخلية الام 2 - العامل الثانى : صفر 3 - العامل الثالث : صفر العامل الثانى والثالث صفر لأننا لن نبتعد عن الخلية الام بأى عدد من الخلايا لا رأسيا او افقيا 4 - العامل الرابع :
COUNTA(Test1!$A$1:$A$10)

هذا العامل هو قلب المدى المتحرك او الديناميكى او المفصلى فهو يقوم بعد الخلايا فى العمود الاول من (A1) الى (A10) .

فعندما قمنا بمسح بيانات الصف الصف العاشر والتاسع كان ناتج هذا العامل هو 8 أى 8 صفوف وهو العامل الديناميكى فى الصيغة .

وايضا عندما قمنا بمسح محتويات الخلية (A8) كان ناتج هذا العامل هو 7 أى 7 صفوف وهنا بيت القصيد .

لان ارتفاع الجدول او المدى (MyRange) يتحدد حسب احتواء المدى (A1: A10) على بيانات .

5- العامل الخامس : 5

وهنا نقوم بتحديد عرض الجدول او المدى (MyRange) بعدد من الاعمدة وهو 5 أعمدة وهو ثابت دائما .

ولكن يمكن جعله ديناميكى ايضا لو اردنا ذلك بنفس الطريقة المتبعة فى العامل الرابع

ليكون جدول متحرك او ديناميكى كامل الاحساس بالنسبة لعدد صفوف واعمدة الجدول

ولكن فى مثالنا هذا هو يتحسس فقط عدد الصفوف بالتحكم فى العامل الرابع

ولو اردنا ان يكون كامل الاحساس يجب ان يكون العامل الخامس مفصلى ايضا كالرابع

مع تغير عناوين الخلايا الى العناوين المناظرة .

لعلى وعسى ان اكون قد وفقت فى شرح المدى الديناميكى وقد تعمدت الاسهاب فى الشرح بطريقة مبسطة

لما له من اهمية فى عالم الاكواد وتسهيل العمل المراد انجازة بطريقة فعالة وحية تجاة التغيرات

فى حجم المدى المحتوى على بيانات .

مع تحيات ابوتامر

تم تعديل بواسطه أبو تامر
  • Like 1
  • Thanks 1
قام بنشر

الاخ nse

شاهد المرفق

لقد لاحظت ان جميع خلايا الشهور فى الورقتين عندما تحتوى على القيمة صفر تعطى شرطة او علامة السالب

حسب التنسيق المخصص لها

فهلا انت تقصد ذلك ام يستوجب منك التصحيح

تحياتى

_______3.rar

قام بنشر

اخي تامر

الله ينور دربك ويرزقك الذرية الصالحة

فعلا هذا هو المطلوب

ومعليش لو ازعجتك لو حبيت اكمل باقي المعادلات الموجدة بعد العمود 14 بحيث تظهر ايضا مع التجميع هل ممكن؟

ولك خالص تحياتي

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information