سؤال

كان لدي تطبيق لإرجاع أقرب التطابقات إلى قيم معينة في مجموعة كبيرة من القيم (كما في ملفي السابق سؤال) واخترت حل VBA.وأثناء استخدامي للتطبيق المذكور، لاحظت أن نتائج القيمة 0.5 لم تكن صحيحة.كنت أستخدم وظيفة VBA Round والتي وجدت أنها تُرجع 0 لـ 0.5 تقريبًا إلى عدد صحيح بينما ترجع وظيفة جولة ورقة العمل 1.ومن الغريب أن الدالة الدائرية لـ VBA ترجع 2 مقابل 1.5.اضطررت إلى استبدال وظيفة ورقة العمل بدلاً من وظيفة VBA.

هل فاتني شيء؟

هل كانت مفيدة؟

المحلول

وإنها مشكلة معروفة. يستخدم الدالة VBA جولة () التقريب بانكر بينما يستخدم الدالة خلية جدول التقريب الحسابي. الاطلاع على التفاصيل هنا:

PRB: جولة وظيفة مختلفة في VBA 6 و جداول اكسل

والحل المقترح من قبل مايكروسوفت لكتابة وظيفة مخصصة للحصول على النتائج المرجوة.

في بانكر التقريب دائما جولات 0.5 إلى أقرب <م> حتى عدد وهو المعيار في المحاسبة، وهذا هو السبب يعمل إكسل بهذه الطريقة. الحساب التقريب جولات 0.5 يصل إلى الرقم التالي.

نصائح أخرى

ويمكنك إلقاء اللوم مايكروسوفت لهذا واحد: http://support.microsoft.com/kb/194983

وهنا لائحة من الطرق حوله: <لأ href = "http://www.excelforum.com/excel-programming/401104-worksheet-rounding-vs-vba-rounding.html" يختلط = "نوفولو noreferrer "> http://www.excelforum.com/excel-programming/401104-worksheet-rounding-vs-vba-rounding.html

تمت الإجابة على السؤال بالكامل هنا ومنقول هنا (بإذن المؤلف :):

كن حذرًا، تستخدم الدالة VBA Round تقريب Banker، حيث تقوم بتقريب 0.5 إلى رقم زوجي، كما يلي:

Round (12.55, 1) would return 12.6 (rounds up) 
Round (12.65, 1) would return 12.6 (rounds down) 
Round (12.75, 1) would return 12.8 (rounds up)   

بينما يتم تقريب دالة ورقة عمل Excel دائمًا بمقدار 0.5 لأعلى.

لقد أجريت بعض الاختبارات ويبدو أن التقريب بمقدار 0.5 لأعلى (التقريب المتماثل) يُستخدم أيضًا في تنسيق الخلايا، وكذلك لتقريب عرض العمود (عند استخدام تنسيق الرقم العام).لا يبدو أن علامة "الدقة كما هو معروض" تقوم بأي تقريب بحد ذاتها، فهي تستخدم فقط النتيجة المقربة لتنسيق الخلية.

لقد حاولت تنفيذ وظيفة SymArith من Microsoft في VBA للتقريب، ولكن وجدت أن الإصلاح به خطأ عند محاولة إعطائه رقمًا مثل 58.55؛الدالة تعطي نتيجة 58.5 بدلاً من 58.6.ثم اكتشفت أخيرًا أنه يمكنك استخدام وظيفة Excel Worksheet Round، كما يلي:

التطبيق.جولة (58.55، 1)

سيسمح لك هذا بإجراء التقريب العادي في VBA، على الرغم من أنه قد لا يكون بنفس سرعة بعض الوظائف المخصصة.أدرك أن هذا قد انتهى من السؤال، لكنني أردت إدراجه من أجل اكتماله.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top