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

خبـراء الاكسل...تغيير قيمة الخلية باستمرار...وايجاد مجموع الفرق في التغيير ....


إذهب إلى أفضل إجابة Solved by محمد هشام.,

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

 

لو عندي خلية في الاكسل تتغير قيمتها باستمرار سواء للاعلى او الاسفل ....كيف ممكن احسب مجموع الفرق في  التغيير اذا كان الى الاسفل ومجموع الفرق في التغيير اذا كان الى الاعلى؟

 

مثال في البداية كانت القيمة الاولى هي  50 ثم صار  53 نقطة، يعني الفرق بالموجب 3 نقاط ثم صارت القيمة مرة اخرى 55 ايضا التغيير بمقار نقطتيين بالموجب بالاضافة الى الثلاث النقاط السابقة صار المجموع الكلي للتغيير هو  5 نقاط بالموجب.

ثم تغيرت القيمة وصارت 47 بمعنى الفرق في التغيير 7 نقاط بالسالب  لانه القيمة هبطت تم صارت القيمة 43 ايضا هبطت بمقدار 4 نقاط بالسالب يصبح المجموع الكلي للتغيير هو  11 نقطة بالسالب ...وهكذا يضل مراقبة التغيير واضافته للمجموع الكلي سواء موجبا او سالبا..

 

ملاحظة: ممكن ضبط قيمة اقل تغيير  نعتمد عليه في الحساب...مثلا اقول اذا كان  التغيير هو 3 نقاط فا اكثر نبداء بالحساب ولكن اذا اكان التغيير اقل من 3 نقاط تجاهل الموضوع، وكان شيئا لم يحدث...طبعا قيمة التفيير ممكن اخليها نقطة او نقطتتين او اكثر بمعنى انا اتحكم بمقدار التغيير..

تم تعديل بواسطه اكسلاوي
رابط هذا التعليق
شارك

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

 

اخي الكريم...هي لا يوجد لدي ملف وانما هي فكرة طرات ببالي  واريد اعرف كيف ممكن حلها:

اختصار شرح الفكرة وهي كتالي:

نفترض عندك خلية وتحتوي على العدد 10 طبعا لنفترض ان هذة القيمة تتغير باستمرار في كل دقيقة..

لنفترض ان التغيرات التي حدثت خلال الدقيقة كانت على النحو التالي..

10 ثم صارت 13 ثم 9 ثم 16 ثم 7

هنا نريد ان نحسب القيمة الحالية من القيمة السابقة مع كل تغيير حدث وستكون النتيجة كتالي

طبعا القيم الموجبة وهي تحدث عنما تكون القيمة الحالية اعلى من القيمة السابقة ، وعكس ذلك  هي القيم السالبة

 

اول تغير كان من 10 الى 13................. اذا الفرق هو 3 نقاط بالموجب

ثاني تغيير كان من 13 الى 9 ................اذا الفرق هو 4 نقاط بالسالب

ثالث تغيير هو من 9 الى 16 .................اذا الفرق هو 7 نقاط بالموجب

رابع تغيير هو من 16 الى 7 ..................اذا الفرق هو 9 نقاط بالسالب

اذا المجموع الكلي للقيمة الموجبة هي 10 

والمجموع الكلي للقيمة السالبة هي 13

طبعا كل تغيير يحدث سواء موجب او سالب يتم اضافته للمجموع الكلي  الموجب للقيم الموجبة  او السالب للقيم السالبة.

اذا هناك اي شي غير مفهوم  ممكن اعيد شرحه من جديد

تم تعديل بواسطه اكسلاوي
  • Like 1
رابط هذا التعليق
شارك

  • أفضل إجابة

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

 كنت في انتظار رفع ملف للتطبيق عليه  . بما انها مجرد فكرة وتريد حلها تفضل اخي الكريم 

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

في مثالنا هدا قد تم تنفيد طلبك مثلا اقول اذا كان  التغيير هو 3 نقاط فا اكثر نبداء بالحساب ولكن اذا اكان التغيير اقل من 3 نقاط تجاهل الموضوع، وكان شيئا لم يحدث . ويمكنك ظبط القيمة كما تشاء من داخل الكود

p_2564n2m151.png

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$E$2" Then

   ' هنا ممكن ضبط قيمة اقل تغيير  نعتمد عليه في الحساب'
    If Abs(Tmp - Target) < 3 Then Exit Sub
   
        Application.EnableEvents = False
        If Target < Tmp Then
            [m2] = [m2] + Tmp - Target 'عدد الاختلافات بالسالب'
        Else
          If Tmp <> 0 Then [g2] = [g2] + Target - Tmp 'عدد الاختلافات بالموجب
        End If
        Tmp = Target
        Application.EnableEvents = True
    End If
    If Target.Address = "$E$2" Then
        [b2] = [b2] + Target  'مجموع القيم المدخلة
    End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$E$2" Then Tmp = Target
    
End Sub

في حالة عدم الرغبة في وضع شرط اقل قيمة يمكنك استخدام الكود التالي

Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Address = Me.[e2].Address Then
          Ecart = Target.Value - Me.[OldVal]
          Me.Names("OldVal").RefersTo = 0 + Target.Value
          Range("E2").Select
          Select Case Ecart
               Case Is > 0
                    Me.[g2] = Me.[g2] + Ecart
               Case Is < 0
                    Me.[m2] = Me.[m2] - Ecart
               Case 0
                 Range("b2").Value = Range("b2").Value + Target.Value
          End Select
          End If
    If Target.Address = "$E$2" Then
        [b2] = [b2] + Target
    End If
End Sub

واليك اخي الكريم الملف تم تطبيق الفكرة عليه للتجربة

 

 

فكرة.xlsm

  • Like 2
  • Thanks 1
رابط هذا التعليق
شارك

في 8‏/1‏/2023 at 21:13, Mohamed Hicham said:

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

 كنت في انتظار رفع ملف للتطبيق عليه  . بما انها مجرد فكرة وتريد حلها تفضل اخي الكريم 

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

في مثالنا هدا قد تم تنفيد طلبك مثلا اقول اذا كان  التغيير هو 3 نقاط فا اكثر نبداء بالحساب ولكن اذا اكان التغيير اقل من 3 نقاط تجاهل الموضوع، وكان شيئا لم يحدث . ويمكنك ظبط القيمة كما تشاء من داخل الكود

p_2564n2m151.png

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$E$2" Then

   ' هنا ممكن ضبط قيمة اقل تغيير  نعتمد عليه في الحساب'
    If Abs(Tmp - Target) < 3 Then Exit Sub
   
        Application.EnableEvents = False
        If Target < Tmp Then
            [m2] = [m2] + Tmp - Target 'عدد الاختلافات بالسالب'
        Else
          If Tmp <> 0 Then [g2] = [g2] + Target - Tmp 'عدد الاختلافات بالموجب
        End If
        Tmp = Target
        Application.EnableEvents = True
    End If
    If Target.Address = "$E$2" Then
        [b2] = [b2] + Target  'مجموع القيم المدخلة
    End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$E$2" Then Tmp = Target
    
End Sub

في حالة عدم الرغبة في وضع شرط اقل قيمة يمكنك استخدام الكود التالي

Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Address = Me.[e2].Address Then
          Ecart = Target.Value - Me.[OldVal]
          Me.Names("OldVal").RefersTo = 0 + Target.Value
          Range("E2").Select
          Select Case Ecart
               Case Is > 0
                    Me.[g2] = Me.[g2] + Ecart
               Case Is < 0
                    Me.[m2] = Me.[m2] - Ecart
               Case 0
                 Range("b2").Value = Range("b2").Value + Target.Value
          End Select
          End If
    If Target.Address = "$E$2" Then
        [b2] = [b2] + Target
    End If
End Sub

واليك اخي الكريم الملف تم تطبيق الفكرة عليه للتجربة

 

 

فكرة.xlsm 28.61 kB · 5 downloads

حياك الله اخي محمد

ماشاء الله عليك، هذا بالضبط ما قصدته...ياريت لو تطبق الفكرة بشكل مباشر على سعر الصرف بما انه يتغير تقريبا كل ثانية.

تقوم باحضار سعر الصرف لليورو دولار مثلا ، ومن ثم نقوم بتطبيق الفكرة عليه، بما ان السعر يتغير باستمرار.

لكن لا اعرف لماذا الملف لم يشتغل عندي...هل بعد تنزيل الملف المفروض يعمل ام يجب القيام ببعض الخطوات؟

ممكن اعرف ...ماهي اللغات التي تجيدها غير vba ؟

تم تعديل بواسطه اكسلاوي
رابط هذا التعليق
شارك

قمت بغلق الملف وفتحه من جديد، ولكن عندما ادخلت قيمة 10 في الخليةE2 ثم غيرتها الى القيمة 13 ثم الى القيمة 9 وهكذا، ولكن لم يحدث اي تغيير في القيم الاخرى..

مثال عملي لتطبيق الفكرة...هو احضار سعرف صرف العملة بشكل مباشر الى ملف الاكسل ونقوم بحساب التغير بشكل مباشر

مثلا..تقوم باحضار سعر الصرف لليورو دولار ، ومن ثم نقوم بتطبيق الفكرة عليه، بما ان السعر يتغير باستمرار.

تم تعديل بواسطه اكسلاوي
رابط هذا التعليق
شارك

الملف يشتغل عندي بكفاءة اخي الكريم .

https://streamable.com/3mbrm0

تم اعادة رفع الملف مرة اخرى للتجربة

فكرة 2.xlsm

تم تعديل بواسطه Mohamed Hicham
رابط هذا التعليق
شارك

نعم يتضمن الكود ................

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

ربما احد الاخوة الاعضاء  يقوم بالتجربة ويوافينا بالنتيجة

رابط هذا التعليق
شارك

ياريت اخي محمد..ترفع فيديو على نفس الموقع streamable.com تشرح فيه ..كيف نضيف الكود ونشعله في الاكسل...لاني حاولت اعمل ذلك، لكن الكود ما اشتغل...اعتقد ربما ينقصني بعض الخطوات...

 

كمان عندي ملاحظة..هل يجب اضغط على زر انتر كل ما ادخل قيمة..اذا كان الجواب بنعم...فكيف ممكن اجعل  التغيير يحدث تلقائي بدون الضغط على زر انتر ..بمعنى بمجرد تغيير القيمة داخل الخلية..يحدث التغيير داخل الخلايا الاخرى مباشرة بعيدا عن الضغط على زر انتر؟

تم تعديل بواسطه اكسلاوي
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information