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

abouelhassan

05 عضو ذهبي
  • Posts

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

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

  • Days Won

    7

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

  1. يمكنك استخدام الدالة التالية للتحقق من تكرار الأسماء لنفس الرقم 

    
    
    =IF(COUNTIF(A:A, A2) > 1, "تنبيه: تكرار اسم", "")

    هذه الدالة تقوم بفحص العمود A (الذي يحتوي على أرقام الهوية) للصف الحالي (الذي يتمثل في A2 في هذا السياق). إذا وجدت أكثر من قيمة واحدة متطابقة مع قيمة الخلية A2، فإنها تُعيد "تنبيه: تكرار اسم"، وإلا فإنها تعيد "" (لا شيء).

    • Like 2
  2. للأسف، لا يوجد برنامج أو موقع يوفر ملفًا يمكن إضافته إلى Excel 2016 لإضافة جميع المعادلات الجديدة المتوفرة في النسخ الأحدث من Office. الأفضل في هذه الحالة هو استخدام المعادلات والوظائف المتاحة في Excel 2016 والبحث عن حلول بديلة للمهام التي قد تحتاج إلى وظائف جديدة. إذا كانت لديك أي وظيفة محددة تبحث عنها، فلا تتردد في طرحها هنا للحصول على المساعدة في إيجاد حلول بديلة لها.

    • Like 1
  3. جرب

    طبقاً للوصف السابق، يمكنك اتباع الخطوات التالية:


    . ضع هذا الكود

    
    Dim soundPlayed As Boolean
    
    Sub ActivateTimer()
        soundPlayed = False
        ' Your existing code to activate the current time
    End Sub
    
    Sub CheckTime()
        Dim i As Integer
        For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
            If Range("N" & i).Value > Range("L" & i).Value And Not soundPlayed Then
                Beep ' تشغيل الصوت هنا
                soundPlayed = True
            End If
        Next i
    End Sub
    
    Sub ResetSound()
        soundPlayed = False
    End Sub

        

    . قم بتعديل الكود الموجود لديك ليتناسب مع الكود المعطى. ابحث عن الجزء الذي يقوم بحساب الوقت وتحديد نهايته، واستبدله بالكود الجديد الموجود في الدالة `CheckTime`.
    . قم بإضافة زر في ورقة العمل لتفعيل الوقت باستخدام الدالة `ActivateTimer`.
    . قم بتعيين زر آخر لإعادة تهيئة المتغير `soundPlayed` باستخدام الدالة `ResetSound`.

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

    • Like 1
  4. جرب . يمكنك استخدام دالة IF مع دالة ISNUMBER للتحقق مما إذا كان الطالب مسلمًا أم مسيحيًا، ثم استخدام الدوال الأخرى لتحديد ما إذا كان الطالب يدرس مسيحي ك1، مسيحي ك2، اسلامي ك1، أو اسلامي ك2. إليك كيفية تنفيذ ذلك:

     

    1. قم بفتح ورقة العمل في Excel.

    2. انقر بزر الماوس الأيمن على الخلية التي تريد وضع الرقم 1 فيها واختر "صيغة" ثم "محرر الصيغ" من القائمة المنبثقة.

    3. استخدم الصيغة التالية:

    
    
    =IF(ISNUMBER(MATCH("مسيحي ك1",$A1:$A$100,0)),1,
      IF(ISNUMBER(MATCH("مسيحي ك2",$A1:$A$100,0)),1,
      IF(ISNUMBER(MATCH("اسلامي ك1",$A1:$A$100,0)),IF(ISNUMBER(MATCH("مسيحي ك1",$A1:$A$100,0)),"",1),
      IF(ISNUMBER(MATCH("اسلامي ك2",$A1:$A$100,0)),IF(ISNUMBER(MATCH("مسيحي ك1",$A1:$A$100,0)),"",1),""))))

     

       حيث أن $A1:$A$100 هو المدى الذي يحتوي على أسماء الطلاب. يجب تغيير هذا المدى وفقًا لنطاق البيانات الخاص بك.

     

    4. اضغط على Enter.

     

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

  5. مشاركة مع الإخوة لعلها تفيد

    
    لحساب مجموع الساعات وتحويلها إلى أيام وساعات، يمكنك استخدام الصيغ التالية في Excel:
    1. **جمع الساعات:**
       - افتح Excel واكتب الساعات في الخلية A1 إلى A4 (على سبيل المثال).
       - في الخلية الفارغة، اكتب الصيغة التالية: `=SUM(A1:A4)` واضغط Enter. هذه الصيغة ستقوم بجمع جميع الساعات المدخلة.
    2. **تحويل الساعات إلى أيام وساعات:**
       - في الخلية الفارغة، اكتب الصيغة التالية: `=QUOTIENT(B1, 8) & " يوم " & MOD(B1, 8) & " ساعة"` حيث B1 هو الخلية التي تحتوي على مجموع الساعات. ستقوم هذه الصيغة بتحويل الساعات إلى أيام وساعات.
    على سبيل المثال، إذا كانت الساعات المدخلة هي 45 ساعة، سيكون مجموعها 45 ساعة، وسيتم تحويلها إلى "5 يوم 13 ساعة" باستخدام الصيغ أعلاه.
    
    =QUOTIENT(B1, 8) & " يوم " & MOD(B1, 8) & " ساعة"

     

    • Like 1
  6. 
    لإضافة تنسيق للتاريخ في المعادلة، يمكنك استخدام الدالة TEXT لتحويل القيمة إلى نص بتنسيق التاريخ المطلوب. اليك الصيغة المعدلة:
    ```
    =IF(D2="", "", IF(E2="", TEXT(NOW(), "dd/mm/yyyy"), TEXT(E2, "dd/mm/yyyy")))
    ```
    هذه المعادلة تقوم بفحص قيمة في الخلية D2، إذا كانت فارغة، فإنها تعيد قيمة فارغة، وإذا لم تكن فارغة، فإنها تفحص قيمة في الخلية E2، إذا كانت فارغة، فإنها تعيد التاريخ الحالي بتنسيق "dd/mm/yyyy"، وإذا لم تكن فارغة، فإنها تعيد قيمة في الخلية E2 بتنسيق التاريخ "dd/mm/yyyy".
    
    يمكن تنسيق تاريخ الخلية داخل المعادلة باستخدام الدالة TEXT لتحويل التاريخ إلى نص بالتنسيق المطلوب. وبالنسبة لإضافة المعادلة باستخدام VBA، يمكنك استخدام الكود التالي:
    Sub AddFormulaWithDateFormat()
        Dim ws As Worksheet
        Dim formula As String
        
        ' افتح ورقة العمل المراد العمل عليها
        Set ws = ThisWorkbook.Sheets("Sheet1") ' تغيير Sheet1 بالاسم الصحيح
        
        ' تحديد الصيغة المراد إضافتها بالتنسيق المطلوب
        formula = "=IF(D2="""", """", IF(E2="""", TEXT(NOW(), ""dd/mm/yyyy""), TEXT(E2, ""dd/mm/yyyy"")))"
        
        ' إضافة الصيغة إلى الخلية المرادة
        ws.Range("F2").Formula = formula ' تغيير F2 بالخلية المطلوبة
    End Sub
    يرجى تغيير "Sheet1" بالاسم الصحيح لورقة العمل التي ترغب في إضافة المعادلة إليها، وتغيير "F2" بالخلية التي ترغب في وضع المعادلة فيها.

     

  7. 
    Sub SaveAsNewWorkbook()
        Dim wb As Workbook
        Dim ws As Worksheet
        Dim newWb As Workbook
        Dim newWs As Worksheet
        Dim folderPath As String
        Dim clientName As String
        Dim lastRow As Long
        
        ' تحديد المجلد المحتوي على الملف الأصلي
        folderPath = ThisWorkbook.Path
        
        ' اسم العميل (يمكنك تغيير هذا إلى الطريقة التي تريد استخدامها لاستخراج اسم العميل)
        clientName = "اسم العميل"
        
        ' تكوين اسم الملف الجديد
        newFileName = folderPath & "\" & clientName & ".xlsx"
        
        ' نسخ ورقة العمل الحالية إلى مصفوفة
        Set wb = ThisWorkbook
        Set ws = wb.ActiveSheet
        ws.Copy
        
        ' حفظ المصفوفة كملف إكسل جديد
        Set newWb = ActiveWorkbook
        Set newWs = newWb.Sheets(1)
        Application.DisplayAlerts = False
        newWb.SaveAs newFileName, FileFormat:=xlOpenXMLWorkbook
        Application.DisplayAlerts = True
        
        ' تحويل المعادلات في النصف العلوي من الفاتورة إلى قيم
        lastRow = newWs.Cells(Rows.Count, "A").End(xlUp).Row
        newWs.Rows("1:" & lastRow \ 2).Value = newWs.Rows("1:" & lastRow \ 2).Value
        
        ' إظهار رسالة تأكيد الحفظ
        MsgBox "تم حفظ الملف كـ" & newFileName, vbInformation, "تم الحفظ"
    End Sub

    يرجى ملاحظة أنه يجب استبدال "اسم العميل" بالطريقة التي تريد استخدامها لاستخراج اسم العميل

    • Like 2
  8. يمكنك استخدام معادلة في Excel لتحقيق هذا الهدف. يمكنك وضع الرقم الابتدائي في خلية معينة، على سبيل المثال خلية A1، ثم استخدام الصيغة التالية في خلية أخرى، مثل B1، لتحقيق التصاعد التلقائي 

    
    =IF(A1="", "", IF(A1>=10, A1+1, "0"&A1+1))

    هذه الصيغة تفحص قيمة الرقم في الخلية A1، وإذا كانت أقل من 10، فإنها تضيف "0" قبل الرقم للحفاظ على التنسيق، وإذا كانت 10 أو أكبر، فإنها تزيد الرقم بمقدار 1. يمكنك استخدام هذه الصيغة في خلية جديدة لتحقيق التصاعد التلقائي.

     

    أما بالنسبة لتطبيق هذه الفكرة على ملف Word، فإنها لا تدعم التصاعد التلقائي للأرقام مع كل طباعة، ولكن يمكنك تحقيق ذلك بطرق أخرى مثل استخدام ميزة التعداد التلقائي (AutoNumber) في Word.

  9. جرب

    Function GetCustomerData(customerCode As String, dataSheet As Worksheet) As Variant
        Dim dataRange As Range
        Dim result As Variant
        
        Set dataRange = dataSheet.Range("A:C")
        result = Application.WorksheetFunction.Index(dataRange.Columns(3), _
                    Application.WorksheetFunction.Match(1, (dataRange.Columns(1) = [E1]) * (dataRange.Columns(2) = customerCode), 0))
        
        GetCustomerData = IIf(customerCode = "", "", result)
    End Function
    
    Function GetCustomerTotal(customerCode As String, dataSheet As Worksheet) As Variant
        Dim dataRange As Range
        Dim result As Variant
        
        Set dataRange = dataSheet.Range("A:D")
        result = Application.WorksheetFunction.SumIfs(dataRange.Columns(4), dataRange.Columns(1), [E1], dataRange.Columns(2), customerCode)
        
        GetCustomerTotal = IIf(customerCode = "", "", result)
    End Function

     

    • Like 1
  10. 4 ساعات مضت, El_Desouky said:

    اريد كود لاغلاق وحفظ الملف تلقائيا عند الخمول لفتره ٥ دقائق 

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

    يمكنك وضع الكود في وحدة VBA في ملف Excel وسيعمل تلقائيًا بمجرد فتح الملف. إليك الخطوات لوضع الكود وجعله يعمل بشكل تلقائي بدون الحاجة لزر:

    1. افتح ملف Excel الذي تريد إضافة الكود إليه.
    2. اضغط `Alt` + `F11` لفتح محرر VBA.
    3. في القائمة، اختر `Insert` > `Module` لإنشاء وحدة VBA جديدة.
    4. الصق الكود في وحدة VBA التي تم إنشاؤها.
    5. اضغط `Ctrl` + `S` لحفظ الملف.
    6. أغلق محرر VBA.
    7. أغلق الملف وأعد فتحه.

    الآن، سيعمل الكود تلقائيًا عند فتح الملف، حيث سيقوم بحفظ وإغلاق الملف تلقائيًا بعد مرور 5 دقائق من الخمول.

    Dim StartTimer
    Const IdleTime = 5 ' وقت الخمول بالدقائق
    
    Sub ResetTimer()
        StartTimer = Now
    End Sub
    
    Sub CheckIdleTime()
        If (Now - StartTimer) * 24 * 60 > IdleTime Then
            Application.DisplayAlerts = False ' لعدم عرض رسائل التنبيه
            ThisWorkbook.Save ' حفظ الملف
            ThisWorkbook.Close ' إغلاق الملف
            Application.DisplayAlerts = True
        End If
    End Sub
    
    Private Sub Workbook_Open()
        StartTimer = Now
        Application.OnTime Now + TimeValue("00:01:00"), "CheckIdleTime" ' فحص الوقت كل دقيقة
    End Sub
    
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        ResetTimer
    End Sub
    
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        ResetTimer
    End Sub
    
    Private Sub Workbook_SheetActivate(ByVal Sh As Object)
        ResetTimer
    End 

     

    • Like 2
    • Thanks 1
  11. جرب

    
    Private Sub SaveButton_Click()
        Dim wsHome As Worksheet
        Dim wsDaily As Worksheet
        Dim inputDate As Date
        Dim checkDate As Range
    
        Set wsHome = ThisWorkbook.Sheets("Home")
        Set wsDaily = ThisWorkbook.Sheets("Daily")
    
        'Get the date from cell F13 in the Home sheet
        inputDate = wsHome.Range("F13").Value
    
        'Check if the date is already in column J in the Daily sheet
        With wsDaily
            Set checkDate = .Columns("J").Find(inputDate, LookIn:=xlValues, lookat:=xlWhole)
        End With
    
        'If the date is found, prevent saving and show a message
        If Not checkDate Is Nothing Then
            MsgBox "تم حفظ تقرير لهذا التاريخ مسبقاً في الجدول اليومي"
            Exit Sub
        End If
    
        'Save the data if the date is not found
        'Add your code here to save the data to the Daily sheet
    
    End Sub
    

     

    تأكد من تغيير اسماء الشيتات ("Home" و "Daily") وتعديل موضع الخطأ في حالة وجود أي اختلاف في اسماء الشيتات.

    • Thanks 1
  12. جرب

    
    Private Sub SaveButton_Click()
        Dim wsInput As Worksheet
        Dim wsData As Worksheet
        Dim inputDate As Date
        Dim lastRow As Long
        Dim checkDate As Range
    
        Set wsInput = ThisWorkbook.Sheets("واجهة الادخال")
        Set wsData = ThisWorkbook.Sheets("جدول البيانات")
    
        'Get the date from the input form
        inputDate = wsInput.Range("A2").Value
    
        'Check if the date is already in the data table
        With wsData
            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
            Set checkDate = .Range("A2:A" & lastRow).Find(inputDate, LookIn:=xlValues, lookat:=xlWhole)
        End With
    
        'If the date is found, prevent saving and show a message
        If Not checkDate Is Nothing Then
            MsgBox "تم حفظ تقرير لهذا التاريخ مسبقاً"
            Exit Sub
        End If
    
        'Save the data if the date is not found
        'Add your code here to save the data to the data table
    
    End Sub
    

     

    • Thanks 1
  13. السطر الذي تشير إليه يقوم ب لاستخدام الكائن Dictionary. يمكنك فعل ذلك من خلال اتباع الخطوات التالية:

    1. في محرر VBA، انتقل إلى القائمة "Tools" ثم "References" (أو "Tools" ثم "References" في Excel 2010).
    2. ابحث عن "Microsoft Scripting Runtime" في القائمة.
    3. حدد المربع بجانب "Microsoft Scripting Runtime".
    4. انقر فوق "OK" لحفظ التغييرات.

    • Like 2
  14.  إليك خطوات عملية لربط بيانات الموظفين من ملفات Excel الفردية بشيت القبض الشهري:

    1. **تحديد البيانات المطلوبة:** ابدأ بتحديد البيانات التي تحتاج إليها من كل ملف للموظف. على سبيل المثال، اسم الموظف، الراتب، البدلات، الحضور والانصراف، الإجازات، وأي بيانات أخرى ذات الصلة.

    2. **فتح شيت القبض الشهري الجديد:** افتح شيت القبض الشهري الجديد الذي تريد دمج البيانات فيه.

    3. **استيراد البيانات من مصادر خارجية:**
       - اختر علامة تبويب "بيانات" في شريط الأوامر.
       - اختر "استيراد من مصدر آخر" ثم "من ملف Excel".
       - حدد ملف Excel الخاص بالموظف الأول واختر "استيراد".
       - حدد الشيت الذي تحتوي على البيانات المطلوبة واختر "موافق".

    4. **تكرار نفس العملية لبقية الموظفين:** قم بتكرار الخطوات السابقة لجميع الملفات الفردية للموظفين الباقين، حيث يمكنك استخدام نفس الخطوات لاستيراد البيانات من ملفاتهم الفردية.

    5. **تنسيق البيانات:** قد تحتاج إلى ضبط تنسيق البيانات والصيغ إذا كان هناك اختلاف في التنسيق بين ملفات الموظفين.

    6. **حفظ العمل:** بعد دمج جميع البيانات، قم بحفظ الشيت الجديد لديك.

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

  15. جرب

    Sub ProcessData()
        Dim ws1 As Worksheet, ws2 As Worksheet
        Dim lastRow As Long, i As Long
        Dim officeName As String, dateValue As String, claimNumber As String
        Dim uniqueOffices As New Collection
        Dim officeDates As New Dictionary
        Dim officeClaims As New Dictionary
        
        ' Set references to the worksheets
        Set ws1 = ThisWorkbook.Sheets("Sheet1") ' Change "Sheet1" to the actual name of your worksheet
        Set ws2 = ThisWorkbook.Sheets("Sheet2") ' Change "Sheet2" to the actual name of your worksheet
        
        ' Find the last row in worksheet 1
        lastRow = ws1.Cells(ws1.Rows.Count, "O").End(xlUp).Row
        
        ' Loop through the data in worksheet 1
        For i = 1 To lastRow
            ' Get the office name
            officeName = ws1.Cells(i, "O").Value
            ' Add the office name to the uniqueOffices collection
            On Error Resume Next
            uniqueOffices.Add officeName, CStr(officeName)
            On Error GoTo 0
            ' Get the date value
            dateValue = CStr(ws1.Cells(i, "P").Value)
            ' Get the claim number
            claimNumber = CStr(ws1.Cells(i, "Q").Value)
            ' Add the date and claim number to the dictionaries if they don't already exist
            If Not officeDates.Exists(officeName) Then
                officeDates.Add officeName, dateValue
                officeClaims.Add officeName, claimNumber
            ElseIf InStr(1, officeDates(officeName), dateValue) = 0 Then
                officeDates(officeName) = officeDates(officeName) & " + " & dateValue
            ElseIf InStr(1, officeClaims(officeName), claimNumber) = 0 Then
                officeClaims(officeName) = officeClaims(officeName) & " + " & claimNumber
            End If
        Next i
        
        ' Write the unique office names to worksheet 2
        Dim office As Variant
        Dim rowIndex As Long: rowIndex = 1
        For Each office In uniqueOffices
            ws2.Cells(rowIndex, 1).Value = office
            ' Write the dates for each office
            ws2.Cells(rowIndex, 2).Value = officeDates(office)
            ' Write the claim numbers for each office
            ws2.Cells(rowIndex, 3).Value = officeClaims(office)
            rowIndex = rowIndex + 1
        Next office
        
        MsgBox "Process complete."
        
    End Sub

    يرجى تغيير اسمي الورقتين "Sheet1" و "Sheet2" إلى الأسماء الفعلية للورقتين الخاصتين بك.

    • Like 3
×
×
  • اضف...

Important Information