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

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


إذهب إلى أفضل إجابة Solved by عبدالله بشير عبدالله,

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

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

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

ثالثا محتاج مساعدة تصميم كود 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
رابط هذا التعليق
شارك

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



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

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

Important Information