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

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

قام بنشر

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

ثانيا شكرا مقدما علي المساعدة والدعم الدائم من اعضاء المنتدي العظيم

ثالثا محتاج مساعدة تصميم كود vba

عندي نموذج لملف excel موجود به عدد من البيانات محتاج اصمم كود يعمل كما الاتي:-

1- لو الخلية رقم N3 <>"" تكون قمية الخلية x3 ="كبير"

2- لو الخلية رقم m3='" و مجموع السنين والاشهر والايام في الخلية w3وv3وu3 على التوالي اكبر من 1 سنة يكون قمية الخلية x3=" الاول أ "

3- لو الخلية رقم m3='" و مجموع السنين والاشهر والايام في الخلية w3وv3وu3 على التوالي اقل من 1 سنة يكون قمية الخلية x3=" الاول ب "

4- لو الخلية رقم l3 <>"" و مجموع السنين والاشهر والايام في الخلية w3وv3وu3 على التوالي اكبر من 3 سنة يكون قمية الخلية x3=" الثاني أ "

5- لو الخلية رقم l3 <>"" و مجموع السنين والاشهر والايام في الخلية w3وv3وu3 على التوالي اقل من 3 سنة يكون قمية الخلية x3=" الثاني ب"

6- لو الخلية رقم k3 <>"" و مجموع السنين والاشهر والايام في الخلية w3وv3وu3 على التوالي اكبر من 6 سنة يكون قمية الخلية x3=" الثالث أ "

7- لو الخلية رقم k3 <>"" و مجموع السنين والاشهر والايام في الخلية w3وv3وu3 على التوالي اقل من 6 سنة  وحتي 3 سنوات يكون قمية الخلية x3=" الثالث ب"

8- لو الخلية رقم k3 <>"" و مجموع السنين والاشهر والايام في الخلية w3وv3وu3 على التوالي اقل من 3 سنة يكون قمية الخلية x3=" الثالث ج"

9- لو الخلية رقم j3<>"" و مجموع السنين والاشهر والايام في الخلية w3وv3وu3 على التوالي اكبر من او يساوي 2 سنة يكون قمية الخلية x3=" الرابع أ"

10- لو الخلية رقم j3<>"" و مجموع السنين والاشهر والايام في الخلية w3وv3وu3 على التوالي اقل من 2 سنة يكون قمية الخلية x3=" الرابع ب"

ولكم جزيل الشكر والعرفان ونكم نتعلم 

تحويل من اجر اساسي الي اجر وظيفي.xlsx

قام بنشر

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

جرب هدا 

Sub Test_EvaluateConditions()
    Dim WS As Worksheet: Set WS = Sheets("Sheet1")
    Dim Irow As Long, n As Long, OnRng As Variant, a() As Variant
    Irow = WS.Cells(WS.Rows.Count, "N").End(xlUp).Row
    
    OnRng = WS.Range("J3:W" & Irow).Value
    ReDim a(1 To UBound(OnRng), 1 To 1)
    
    For i = 1 To UBound(OnRng, 1)
        n = Val(OnRng(i, 14)) * 365 + Val(OnRng(i, 13)) * 30 + Val(OnRng(i, 12))
        a(i, 1) = Choose( _
            Application.WorksheetFunction.Match( _
                True, Array( _
                    OnRng(i, 9) <> "", _
                    OnRng(i, 8) = "" And n > 365, _
                    OnRng(i, 8) = "" And n <= 365, _
                    OnRng(i, 7) <> "" And n > 3 * 365, _
                    OnRng(i, 7) <> "" And n <= 3 * 365, _
                    OnRng(i, 6) <> "" And n > 6 * 365, _
                    OnRng(i, 6) <> "" And n <= 6 * 365 And n >= 3 * 365, _
                    OnRng(i, 6) <> "" And n < 3 * 365, _
                    OnRng(i, 5) <> "" And n >= 2 * 365, _
                    OnRng(i, 5) <> "" And n < 2 * 365 _
                ), 0 _
            ), _
            "كبير", "الأول أ", "الأول ب", "الثاني أ", "الثاني ب", "الثالث أ", "الثالث ب", "الثالث ج", "الرابع أ", "الرابع ب" _
        )
    Next i
    WS.[X3].Resize(UBound(a, 1), 1).Value = a
End Sub

 

  • Like 1
قام بنشر

أخي يصعب تتبع جميع الشروط للتأكد من صحة البيانات يرجى إظافة بعض التواريخ في اكثر من صف مع النتائج المتوقعة يدويا لنتمكن من تحديد مكان الخطأ 

  • أفضل إجابة
قام بنشر

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

بعد اذن استاذنا ومعلمنا محمد هشام 

وحسب فهمى للطلب

الكود

Sub test()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim years As Long, months As Long, days As Long
    Dim totalMonths As Long
    Dim data As Variant
    Dim result() As Variant
    
    Application.ScreenUpdating = False
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    data = ws.Range("A3:W" & lastRow).Value
    ReDim result(1 To UBound(data, 1), 1 To 1)
    
    For i = 1 To UBound(data, 1)
        If data(i, 2) = "" Then
            result(i, 1) = ""
        Else
            years = IIf(IsNumeric(data(i, 23)), data(i, 23), 0)
            months = IIf(IsNumeric(data(i, 22)), data(i, 22), 0)
            days = IIf(IsNumeric(data(i, 21)), data(i, 21), 0)
            totalMonths = (years * 12) + months + Int(days / 30)

            Select Case True
                Case data(i, 14) <> ""
                    result(i, 1) = "كبير"
                Case data(i, 13) <> ""
                    If totalMonths >= 12 Then
                        result(i, 1) = "الاول أ"
                    Else
                        result(i, 1) = "الاول ب"
                    End If
                Case data(i, 12) <> ""
                    If totalMonths >= 36 Then
                        result(i, 1) = "الثاني أ"
                    Else
                        result(i, 1) = "الثاني ب"
                    End If
                Case data(i, 11) <> ""
                    If totalMonths >= 72 Then
                        result(i, 1) = "الثالث أ"
                    ElseIf totalMonths >= 36 Then
                        result(i, 1) = "الثالث ب"
                    Else
                        result(i, 1) = "الثالث ج"
                    End If
                Case data(i, 10) <> ""
                    If totalMonths >= 24 Then
                        result(i, 1) = "الرابع أ"
                    Else
                        result(i, 1) = "الرابع ب"
                    End If
            End Select
        End If
    Next i
    
    ws.Range("X3:X" & lastRow).Value = result
    
    Application.ScreenUpdating = True
End Sub

الملف

تحويل من اجر اساسي الي اجر وظيفي (2).xlsb

  • Like 2

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information