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

AbuuAhmed

الخبراء
  • Posts

    1095
  • تاريخ الانضمام

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

  • Days Won

    18

مشاركات المكتوبه بواسطه AbuuAhmed

  1. يا لحساسية هذه المواضيع والتي أحاول أن أتجنب الظهور فيها، قبل أن أشارك راسلت السائل وقدمت له دالتي وسمحت له بنشرها دون ذكر اسمي، ولكن في الأخير حسمت قراري بالمشاركة.

    أكثر الأخطاء حصلت بسببين:
    الأول: أن أكثركم ذهب لمعالجة الكسر إذا كان أصغر من نصف أو (أكبر أو يساوي نصف) ولكن غفل عن الكسر إذا كان صفرا والذي لا يحتاج إلى معالجة.
    الآخر: عدم اختبار دوالكم مع الأرقام السالبة، وهذه تحتاج إلى مزيد من العناية والحرص ومعرفة تامة بالتعامل مع دالتي int و fix أو trunc في لغات أخرى.

    عموما مهما تعملق المبرمج فلن ينجح دائما من صنع دوال الأرقام والتاريخ من أول محاولة وبدون تجارب ومقارنات عدة.
    لا تغلقون الموضوع قبل إزالة أفضل إجابة واتركوها للمختصين في الرياضيات والهندسة والمحاسبة.

  2. لقد كتبت في مشاركتي السابقة أنها ستكون الأخيرة في هذا الموضوع، ولكن،
    بما أن هذا الموقع علمي وتعليمي، فلا بد أن يكون اختيار أفضل حل علميا وخصوصا أن الموضوع له علاقة بالرياضيات والحكم على الحلول من نتائجها.
    لا أعرف من اختار أفضل إجابة فإذا كان هو السائل فأنصحة بأن هذه الأمور العلمية غير خاضعة للاستحسان والمزاج. الأكواد منشورة والنتائج أيضا ولا يوجد مجال للمجاملات، تستطيع الامتناع عن اختيار أفضل إجابة وهو غير إجباري أفضل من هذا الاختيار غير الصائب وغير الموفق. أقل متعلم درس الرياضيات يعرف أن الاختيار خاطئ.

  3. مشاركتي الأخيرة في هذا الموضوع
    ملخص مقارنة لجميع المشاركات في ملف إكسل وصورة.

    اقتباس

    لكن دالة CEILING اساسا موجودة بالاكسل من ضمن الدوال المضمنه به ولم تكن تحتاج الى كتابة اى اكواد

    الدالة المذكورة ومثيلاتها الثلاث صممت للأكسس مع تطابق تام مع دوال الإكسل بقدر الاستطاعة، وملف الإكسل ما هو إلا وسيلة للمقارنة فقط.

    image.png.d9b189cb42b5d11820e535edf6c380fc.png

    موفقين جميعا، أنا لم أغادر أوفيسنا، ومتواجد في منتدى الإكسل لمن يريد متابعتي.

    CustomCeiling_01.xlsm

    • Like 2
  4. 1 ساعه مضت, ابوخليل said:

    ا هلا ابو احمد  .. عودا حميدا :fff:

    من طول الغيبات جاب الغنايم :gift2:

    يا هلا بيك وشكرا لك.

    وجدت في جهازي دالة بنفس اسم دالة الإكسل وأداؤها أفضل من دالة الإكسل حيث في الأرقام السالبة لا يحتاج أن يكون الكسر (Factor) سالب لتعطي نتائج صحيحة.
    الدالة ليست من عملي، وزدت بداية اسمها حرفين vb لتمييزها عن دالة الإكسل.
     

    Public Function vbCeiling(ByVal X As Double, Optional ByVal Factor As Double = 1) As Double
        ' X is the value you want to round
        ' is the multiple to which you want to round
        vbCeiling = (Int(X / Factor) - (X / Factor - Int(X / Factor) > 0)) * Factor
    End Function

    لهذا الموضوع تكون قيم Factor نصف أي 0.5
    جربوها.

    • Thanks 1
    • Haha 1
  5. عملت دالتين أحدهما مختصرة ولكنها فشلت في تقريب النصف، لذا استبعدتها.
    الدالة الأطول والأدق:
     

    Function myRound(ByVal Expression As Double) As Double
      Dim SgnVal As Integer
      Dim frac As Double
      
      SgnVal = Sgn(Expression)
      Expression = Abs(Expression)
      frac = Expression - Fix(Expression)
      
      If frac >= 0.5 Then frac = 1
      If frac > 0 And frac < 0.5 Then frac = 0.5
      
      myRound = (Fix(Expression) + frac) * SgnVal
    End Function

     

     

    Rounding.png

    • Like 1
  6. في 20‏/9‏/2024 at 01:25, AbuuAhmed said:

    كواد الترتيب هي ناتج عملية تسجيل للماكرو
    لم أنتبه أنه يحدد آخر سطر مع أن في التسجيل كنت أختار كامل العمود.
    وقد تم التعديل على الكود ليتعامل مع آخر سطر بالزيادة أو النقصان.

    توزيع الطلاب_04.xlsm 23.56 kB · 34 downloads

    هناك هفوة، لتصحيحها بدلوا:
     

        For row = 2 To lRow
            Cells(row, 3) = (row - 2) Mod 5 + 1
        Next row

    إلى:
     

        For row = 2 To lRow
            Cells(row, 3) = (row - 2) Mod Classes + 1
        Next row

     

  7. لا تحكموا على ما أقصده من العنوان، فالمعنى المقصود في نص الموضوع ضمنا.

    فالتلفزيون مثلا اختراع مذهل ولكن ليس هنا في مواقع البرمجه مكانه.

    لن ترى تاجر موكيت يفتح نشاطا لغسيل الموكيت والفهم عليكم.

    فالذكاء الاصطناعي مهم جدا ويحتاج إلى مواقع متخصصة فيه وليس هنا مكانه أيضا.

    نحن نتكلم العربية يا سادة.

     

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

     

    يمكن اللجوء لهذه المواقع عند فشل صناع الشفرات لحل مشكلة ما، علما أن ما تقدمه هذه المواقع ما هو إلا تجميع مقنن لعمل مبرمجين آخرين.

     

    أتوقع لا سمح الله بعد عشر سنوات من الآن لن تجدوا من يجيد كتابة الأكواد وسترون مبرمجين زائفين يمكن بالكثير نطلق عليهم معدو برامج، وربما ستغلق مواقع البرمجة لعدم جدواها العلمي.

    موفقين.

    • Like 3
  9. هدية مني لكم
    هذا كود يختصر الوقت لمستخدمي النافذة الفورية حيث يمسح كامل النصوص/المخرجات السابقة قبل أي إرسال نصوص أو مخرجات جديدة
    جربوه وزودونا بأي مشاكل تواجهونها للتعديل عليه.
     

    Sub DebugClear()
      'AbuuAhmed 2024/11/01
      Dim WshShell As Object
           
      Set WshShell = CreateObject("WScript.Shell")
      With WshShell
        .SendKeys "^g", True
        .SendKeys "^a", True
        .SendKeys "{DEL}", True
      End With
      
      Set WshShell = Nothing
    End Sub


     

    • Like 1
  10. أكواد الترتيب هي ناتج عملية تسجيل للماكرو
    لم أنتبه أنه يحدد آخر سطر مع أن في التسجيل كنت أختار كامل العمود.
    وقد تم التعديل على الكود ليتعامل مع آخر سطر بالزيادة أو النقصان.

    توزيع الطلاب_04.xlsm

  11. قدم لنا أي فكرة ممكن نحولها إلى أكواد
    ربما لو يكون هناك توزيع نسب للأبعاد يكون البحث أقرب لمطلبك مثلا N تعطيه 50% والـ E 30% والـ Z يأخذ 20% وهكذا.
    أنا قدمت اجتهادي وننتظر من الزملاء تقديم أفكار أخرى ويمكنك كذلك عرض السؤال على منتدى أكسس فلديهم الكثير ممن يجيد كتابة الأكواد كما خبراء الاكسل.

  12. تم التعديل على الكود للتسريع فقط.

    Function getAvgPer(N1 As Double, E1 As Double, Z1 As Double, _
                       N2 As Double, E2 As Double, Z2 As Double) As Double
                           
        getAvgPer = (IIf(N1 < N2, N1 / N2, N2 / N1) + _
                     IIf(E1 < E2, E1 / E2, E2 / E1) + _
                     IIf(Z1 < Z2, Z1 / Z2, Z2 / Z1)) _
                     / 3
    End Function
    
    Function getClosestID(N1 As Double, E1 As Double, Z1 As Double) As Double
        Dim Sht As Worksheet
        Dim row As Long, lRow As Long
        Dim ClosestVal As Double, CurrVal As Double
        Dim ClosestID As Long
        
        Application.ScreenUpdating = False
        Set Sht = Sheets("1")
        
        With Sht
            lRow = .Range("A1").End(xlDown).row
            For row = 1 To lRow
                CurrVal = getAvgPer(N1, E1, Z1, .Cells(row, 2), .Cells(row, 3), .Cells(row, 4))
                If CurrVal > ClosestVal Then
                    ClosestVal = CurrVal
                    ClosestID = .Cells(row, 1)
                    If ClosestVal = 1 Then Exit For
                End If
            Next row
        End With
        
        getClosestID = ClosestID
        
        Set Sht = Nothing
        Application.ScreenUpdating = True
    End Function

     

    • Thanks 1
×
×
  • اضف...

Important Information