اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

abouelhassan

05 عضو ذهبي
  • Posts

    2,843
  • تاريخ الانضمام

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

  • Days Won

    7

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

  1. تفضل اخي طبق الاتى

     إليك كيفية تحويل الكود إلى معادلات:

    1. في الخلية B2 في ورقة "Report"، استخدم الدالة VLOOKUP للبحث عن القيمة في الخلية A2 من ورقة "AllData" واسترجاع قيمة بداية التاريخ.
       
       

    
    =VLOOKUP(A2, AllData!$A$2:$E$1000, 3, FALSE)
    

    2. في الخلية C2، استخدم الدالة VLOOKUP مرة أخرى للبحث عن القيمة في الخلية A2 من ورقة "AllData" واسترجاع قيمة نهاية التاريخ.
       

    
    =VLOOKUP(A2, AllData!$A$2:$E$1000, 4, FALSE)

    3. في الخلية D2، استخدم الدالة VLOOKUP للبحث عن القيمة في الخلية A2 من ورقة "AllData" واسترجاع قيمة نوع الاجازة.
       
       

    
    =VLOOKUP(A2, AllData!$A$2:$E$1000, 5, FALSE)

       

    تأكد من تغيير نطاق البحث وفقًا لموقع البيانات الخاصة بك في ورقة "AllData

    1. افتح برنامج Excel وقم بإنشاء ورقة عمل جديدة.

    2. قم بنسخ البيانات الخاصة بك من ورقة "AllData" إلى الورقة الجديدة.

    3. في العمود الأول (الخانة A) في الورقة الجديدة، قم بوضع القيم التي تريد البحث عنها في ورقة "AllData".

    4. في العمود الثاني (الخانة B)، استخدم الدالة VLOOKUP للبحث عن بداية التاريخ.

    5. في العمود الثالث (الخانة C)، استخدم الدالة VLOOKUP للبحث عن نهاية التاريخ.

    6. في العمود الرابع (الخانة D)، استخدم الدالة VLOOKUP للبحث عن نوع الاجازة.

    7. ضع المعادلات في الصفوف التي ترغب فيها للبحث عن البيانات.

     

    هذه الخطوات يمكن أن تنتج نفس النتائج التي يقوم بتحقيقها الكود السابق 

    • Like 1
  2. هل تحتاج معادلة ام كود

     

    1. افتح Excel وانقر على الخلية التي ترغب في وضع الصيغة فيها.
    2. استخدم الصيغة التالية:

       حيث أن $A$2:A2 تحدد نطاق البيانات الذي تريد البحث فيه للقيم المكررة، و A2 هو الخلية التي تحتوي على القيمة التي تريد فحصها.

    3. اضغط على Enter.

    هذه الصيغة ستظهر القيمة فقط إذا كانت تظهر للمرة الأولى في النطاق المحدد، وإلا ستظهر خلية فارغة.

    
    =IF(COUNTIF($A$2:A2,A2)=1,A2,"")

    وهذا كود

     
     Sub RemoveDuplicatesWithCount()
        Dim LastRow As Long
        Dim i As Long
        Dim UniqueValue As String
        Dim Count As Long
        
        LastRow = Cells(Rows.Count, "A").End(xlUp).Row
        
        For i = 2 To LastRow
            UniqueValue = Cells(i, 1).Value
            Count = WorksheetFunction.CountIf(Range("A2:A" & LastRow), UniqueValue)
            If Count = 1 Then
                Cells(i, 2).Value = UniqueValue
            Else
                Cells(i, 2).Value = UniqueValue & " (" & Count & ")"
            End If
        Next i
    End Sub

    هذا الكود سيقوم بتطبيق الصيغة وسيظهر القيم المكررة مع عددها في الخلية المجاورة. قم بتنفيذ الخطوات نفسها لإضافة الكود إلى وحدة VBA في Excel وتشغيله.

    • Like 2
  3. المعادلة الجديدة، يمكننا تغيير المعادلة لاستخدام وظائف تدعمها الإصدارات السابقة من Excel. إليك معادلة بديلة تستخدم الوظائف المتاحة في الإصدارات القديمة:

    ```
    =IF(ISERROR(INDEX($A$1:$A$1000, MATCH(0, COUNTIF($E$1:E1, $A$1:$A$1000) + IF($B$1:$B$1

    يرجى استبدال النطاقات ($A$1:$A$1000، $B$1:$B$1000، $C$1:$C$1000، $E$1:E1) بنطاقات البيانات الخاصة بك.

    هذه المعادلة تستخدم وظائف MATCH وCOUNTIF للبحث عن الأرقام المطلوبة وتجنب التكرار. تأكد من تغيير "تاريخ1" و "تاريخ2" و "اسم المكتب" إلى القيم المناسبة.

    
    =IF(ISERROR(INDEX($A$1:$A$1000, MATCH(0, COUNTIF($E$1:E1, $A$1:$A$1000) + IF($B$1:$B$1000>=تاريخ1, IF($B$1:$B$1000<=تاريخ2, IF($C$1:$C$1000="اسم المكتب", 1, 0), 0), 0), 0))), "", INDEX($A$1:$A$1000, MATCH(0, COUNTIF($E$1:E1, $A$1:$A$1000) + IF($B$1:$B$1000>=تاريخ1, IF($B$1:$B$1000<=تاريخ2, IF($C$1:$C$1000="اسم المكتب", 1, 0), 0), 0), 0)))

     

    • Like 1
  4. المعادلة التي استخدمتها هي جزء من صيغة مصفوفة ديناميكية في Excel لاسترداد الأرقام دون تكرار حسب تاريخين معينين واسم المكتب. إليك كيفية استخدام هذه الصيغة:

    1. قم بوضع هذه الصيغة في الخلية التي ترغب في استرداد الأرقام فيها.
       
    2. قم بتعديل "تاريخ1" و "تاريخ2" و "اسم المكتب" لتناسب القيم الفعلية التي تريدها.

    3. اضغط على Ctrl + Shift + Enter بدلاً من الضغط على Enter وحده. هذا يجعل Excel يفهم أنها صيغة مصفوفة.

    إليك الصيغة:

    ```
    =IFERROR(INDEX(A:A, SMALL(IF((B:B>=تاريخ1)*(B:B<=تاريخ2)*(C:C="اسم المكتب"), ROW(B:B)-MIN(ROW(B:B))+1), ROWS(A$1:A1))), "")
    ```

    تأكد من تغيير "تاريخ1" و "تاريخ2" و "اسم المكتب" إلى القيم المناسبة.

    • Like 1
  5. جرب

    Private Sub UserForm_Initialize()
        Dim salesRange As Range
        Dim cell As Range
        
        ' تعيين مجال البيانات
        Set salesRange = Worksheets("Sheet1").Range("A1:A50") ' قم بتغيير "Sheet1" و "A1:A50" حسب احتياجاتك
        
        ' تنسيق البيانات وإضافتها إلى ListBox
        For Each cell In salesRange
            ListBox1.AddItem Format(cell.Value, "0.000")
        Next cell
    End Sub

    السؤال الثاني

    Private Sub ListBox1_Click()
        Dim selectedCell As Range
        
        ' العثور على الخلية المحددة في الصفحة الأصلية
        Set selectedCell = Worksheets("Sheet1").Range("A1:A50").Find(ListBox1.Value) ' قم بتغيير "Sheet1" و "A1:A50" حسب احتياجاتك
        
        ' التأكد من أن الخلية تم العثور عليها
        If Not selectedCell Is Nothing Then
            ' التحرك إلى الخلية المحددة
            selectedCell.Select
        End If
    End Sub

     

    يمكنك إضافة هذين الكودين إلى مستند Excel باتباع الخطوات التالية:
    1. افتح ملف Excel.
    2. اذهب إلى "مطور" > "محرر Visual Basic".
    3. انقر فوق "إدراج" > "وحدة".
    4. قم بلصق الكود في وحدة جديدة.
    5. احفظ الملف بامتداد .xlsm.
    6. قم بتعيين الوحدة الأولى كـ "UserForm" والوحدة الثانية كـ "ListBox1".
    7. أغلق المحرر واستخدم ملف Excel بشكل عادي.

    لكى تتعلم اخى اتبع ما سبق 

    • Like 1
  6. جرب هذه الدالة واخبرنى

    عذرًا على الالتباس. يمكنك استخدام الدالة التالية لجمع الصف الأول بشرط أن تكون القيمة في الصف الثاني غير فارغ

    =SUM(A1:INDEX(A:A, MATCH(1E+306, B:B, 1)))

    هذه الدالة تستخدم دالة MATCH للعثور على أول خلية غير فارغة في الصف الثاني، ثم يستخدم الدالة INDEX لإنشاء مرجع للخلية المتناظرة في الصف الأول، وأخيرًا يقوم بجمع القيم في هذا النطاق.

    
    =SUM(A1:INDEX(A:A, MATCH(1E+306, B:B, 1)))

     

    • Like 1
  7. منذ ساعه, zsbmwr said:

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

    ودي تكون معادله

    المطلوب :

    مجموع خلايا الصف الأول ( ليس جميع الخلايا) فقط بعدد خلايا الصف الثاني التي فيها ارقام

    جرب

    Sub CalculateRatio()
        Dim ws As Worksheet
        Dim sumRow1 As Double
        Dim sumRow2 As Double
        Dim ratio As Double
        
        ' تعيين ورقة العمل المطلوبة
        Set ws = ThisWorkbook.Sheets("اسم الورقة")
        
        ' حساب مجموع القيم في الصف الأول لعدد الخلايا التي تحتوي على قيم في الصف الثاني
        sumRow1 = Application.WorksheetFunction.Sum(ws.Range("A1:F1")) / Application.WorksheetFunction.CountA(ws.Range("A2:F2"))
        
        ' حساب مجموع القيم في الصف الثاني
        sumRow2 = Application.WorksheetFunction.Sum(ws.Range("A2:F2"))
        
        ' حساب النسبة
        ratio = sumRow1 / sumRow2
        
        ' عرض النسبة في الخلية المناسبة
        ws.Range("G1").Value = ratio
    End Sub
    

     

  8. منذ ساعه, zsbmwr said:

    الجدول فيه ثلاث صفوف
    صف العناوين
    الصف الاول جميع الخلايا من Aحتى T فيها قيم
    الصف الثاني الخلايا من Aحتى F فيها قيم

    الصف الثاني المجموع فقط للقيم من A حتى F

    اريد مجموع الصف الاول تكون للقيم من A حتى F فقط
    تكون نقسم عدد قيم الصف الثاني

    
    Sub CalculateRatio()
        Dim ws As Worksheet
        Dim sumRow1 As Double
        Dim sumRow2 As Double
        Dim ratio As Double
        
        ' تعيين ورقة العمل المطلوبة
        Set ws = ThisWorkbook.Sheets("اسم الورقة")
        
        ' حساب مجموع القيم في الصف الأول
        sumRow1 = Application.WorksheetFunction.Sum(ws.Range("A1:F1"))
        
        ' حساب مجموع القيم في الصف الثاني
        sumRow2 = Application.WorksheetFunction.Sum(ws.Range("A2:F2"))
        
        ' حساب النسبة
        ratio = sumRow1 / sumRow2
        
        ' عرض النسبة في الخلية المناسبة
        ws.Range("G1").Value = ratio
    End Sub

     

  9. ```
       =UNIQUE(FILTER(A:A, (B:B>=تاريخ1)*(B:B<=تاريخ2)*(C:C="اسم المكتب")))
       ```
     

     

    1. قم بتنسيق البيانات في ورقة العمل بحيث تكون الأرقام في العمود A، تواريخ التاريخ في العمود B، وأسماء المكاتب في العمود C.

       ```

       حيث تحتاج إلى استبدال "تاريخ1" و "تاريخ2" بالتواريخ المرغوبة، و "اسم المكتب" بالاسم المناسب.

    3. اضغط على Enter لتطبيق الصيغة.

    هذه الصيغة ستقوم بجلب الأرقام بدون تكرار حسب التاريخين المحددين واسم المكتب.

    • Like 2
  10. في 6‏/2‏/2024 at 11:59, ابوخليل said:

    عدل جميع الخصائص في النماذج الى : سجل محرر

    كما في الصورة

    يوجد لديك اخطاء برمجية في المشروع .. تتبع الاخطاء في محرر الفيجوال  بواسطة : debug / compile

     

     

     

     

    Untitled.jpg

    السلام عليكم استاذي

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

  11. تلك الصيغة تستخدم في جداول البيانات في ، وتهدف إلى حساب مجموع لأرقام معينة استناداً إلى مجموعة من الشروط. في هذه الحالة، يتم تحديد المجموعة التي تريد جمع أرقامها في "range". ثم يحدد "criteria1" الشرط الذي يجب أن تلبيه الأرقام لتُضاف إلى المجموع، في هذا المثال هو ">100" لاستبعاد الأرقام من 1 إلى 100. وأما "criteria2" فهو الشرط الآخر الذي يجب أن تلبيه الأرقام لتُضاف إلى المجموع، في هذا المثال هو "<=100" لاستبعاد الأرقام من 1 إلى 100.

    • Like 3
  12.  شرح عمل الكود:

    1. يتم تعريف متغير `PreviousValue` كمتغير يخزن القيمة السابقة للخلية التي تم تغييرها.

    2. الجزء الرئيسي من الكود يأتي في الدالة `Worksheet_Change`، والتي تقوم بتنفيذ الإجراءات التالية:
       - تحديد ما إذا كانت الخلية المغيرة واحدة أو مجموعة خلايا، وإذا لم تكن فإن الدالة تخرج.
       - التحقق مما إذا كان التغيير يحدث داخل نطاق الخلايا المستخدمة في ورقة العمل.
       - تعطيل حدث تغيير الخلية مؤقتًا لتجنب تشغيل الكود بشكل لا نهائي.
       - إذا كانت القيمة الجديدة مختلفة عن القيمة السابقة، فإنه يتم استدعاء الدالة `LogChanges` لتسجيل التغيير.

    3. الدالة `LogChanges` تقوم بتسجيل التغيير في ورقة "Log" عن طريق إضافة تاريخ ووقت التغيير، وعنوان الخلية المتأثرة، والقيمة القديمة، والقيمة الجديدة.

    بهذه الطريقة، يتم تعقب التغييرات التي تحدث في الخلايا وتسجيلها في ورقة مخصصة تسمى "Log".

    إذا لم يعمل الكود، قد يكون هناك عدة أسباب لذلك، هي بعض النقاط التي يجب التحقق منها:

    1. **التأكد من تمكين ماكرو VBA**: تأكد من أن الوضع الموجود فيه Excel يسمح بتشغيل ماكرو VBA. يمكنك التحقق من ذلك في قسم إعدادات الأمان في Excel.

    2. **التحقق من وجود ورقة العمل "Log"**: تأكد من أنه تم إنشاء ورقة العمل "Log" بالطريقة الصحيحة وأن الاسم مكتوب بالشكل الصحيح.

    3. **التحقق من الكود الذي تم لصقه في وحدة الفبا**: تأكد من أن الكود تم لصقه في وحدة الفبا الصحيحة ولم يتم تعديله بطريقة تؤثر على عمله.

    4. **تفعيل الأحداث في Excel**: تأكد من أن الأحداث مفعلة في Excel. يمكنك التحقق من ذلك بالتأكد من أن خيار "EnableEvents" مفعل في الكود.

    5. **اختبار الكود خطوة بخطوة**: يمكنك استخدام محرر VBA لتنفيذ الكود خطوة بخطوة باستخدام زر التشغيل F8، وذلك لمعرفة ما إذا كان هناك أي أخطاء.

  13. 3 دقائق مضت, خالد المخزومي said:

    شكرا اخي الفاضل

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

    الاصل اخى أن نقوم بتقديم البسيط 

    وإليك المطلوب

    جرب

    Dim PreviousValue As Variant
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error Resume Next
        If Target.Cells.Count > 1 Then Exit Sub
        If Not Intersect(Target, Me.UsedRange) Is Nothing Then
            Application.EnableEvents = False
            If PreviousValue <> Target.Value Then
                Call LogChanges(Target.Address, PreviousValue, Target.Value)
                PreviousValue = Target.Value
            End If
            Application.EnableEvents = True
        End If
    End Sub
    
    Sub LogChanges(ByVal TargetAddress As String, ByVal OldValue As Variant, ByVal NewValue As Variant)
        Dim wsLog As Worksheet
        Set wsLog = ThisWorkbook.Sheets("Log")
        
        With wsLog
            .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Now
            .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0).Value = TargetAddress
            .Cells(.Rows.Count, 3).End(xlUp).Offset(1, 0).Value = OldValue
            .Cells(.Rows.Count, 4).End(xlUp).Offset(1, 0).Value = NewValue
        End With
    End Sub

    الآن، قم بإضافة ورقة جديدة في ملف Excel واسمها "Log"، وهذه الورقة ستحتوي على تفاصيل التغييرات.

    عند كل مرة يتم فيها تغيير قيمة في ورقة العمل، سيتم تسجيل الوقت وعنوان الخلية والقيمة القديمة والجديدة في ورقة "Log".

    يرجى ملاحظة أنه يمكنك تعديل اسم ورقة العمل التي تحتوي على سجل التغييرات بحسب احتياجاتك.

    • Like 4
×
×
  • اضف...

Important Information