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

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

قام بنشر

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

ضع الكود التالى فى حدث الفورم

Private Sub CommandButton1_Click()
Dim Arr, Cond1, Cond2, Cond3
Dim Tmp, p
Arr = Range("A2:B9")
Cond1 = Me.TextBox1.Value
Cond2 = Me.TextBox2.Value
Cond3 = Me.TextBox3.Value
If Cond1 = "" Or Cond2 = "" Or Cond3 = "" Then
MsgBox "asdfghjkl"
Exit Sub
End If
ReDim Tmp(1 To UBound(Arr, 1), 1 To UBound(Arr, 2))
For i = 1 To UBound(Arr, 1)
If Arr(i, 2) = Cond1 Or Arr(i, 2) = Cond2 Or Arr(i, 2) = Cond3 Then
p = p + 1
For j = 1 To 2
Tmp(p, j) = Arr(i, j)
Next
End If
Next
With Me.ListBox1
 .Clear
 .AddItem
 .List = Tmp
End With
End Sub

 

  • Like 1
قام بنشر

السلام عليكم 

الأستاذ الكريم .. أريد الصفات في 3 تكست بوكس .. أعتقد أنه يجب أن أضع and بدل or

If Arr(i, 2) Like "*" & Cond1 & "*" And Arr(i, 2) Like "*" & Cond2 & "*" And Arr(i, 2) Like "*" & Cond3 & "*" Then

أستاذي الكريم و مع تغيير الكود كما سبق لم يعطي النتيجةالمطلوبة : طالب عنده هذه الصفات الثلاث

هل يمكن عمل ذلك

مع الشكر

 

 لقد بدلت السطر قبل الرد و لم ينجح الأمر

 

قام بنشر

السلام عليكم

قمت بالتغيير ل or

فكانت النتيجة كل طويل و كل سمين و كل ذكي .. المفروض أن تعطي سامر فقط لأنه الوحيد الطويل و السمين و الذكي .. و المفروض تعطي اسم سامر مرة واحدة كقيمة فريدة

20231013 test.xlsm

  • تمت الإجابة
قام بنشر

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

تفضل اخى

Private Sub CommandButton1_Click()
    Dim Ws As Worksheet, Arr, dic As Object, Levels, X
    Dim i As Long, R As Long, j As Long, P As Long
    Set Ws = ThisWorkbook.Worksheets("main")
    Arr = Ws.Range("A2:B" & Ws.Cells(Rows.Count, 1).End(xlUp).Row).Value
    Set dic = CreateObject("Scripting.Dictionary")
    R = 1
    Levels = Array(TextBox1, TextBox2, TextBox3)
    Me.ListBox1.Clear
    ReDim B(1 To UBound(Arr, 1))
    For i = LBound(Arr, 1) To UBound(Arr, 1)
        If Not dic.Exists(Arr(i, 1)) Then
            dic.Add Arr(i, 1), R
            B(R) = Arr(i, 1) & "-" & Split(Arr(i, 2))(0)
            R = R + 1
        Else
            B(dic(Arr(i, 1))) = B(dic(Arr(i, 1))) & "-" & Split(Arr(i, 2))(0)
        End If
    Next i
    ReDim Tmp(1 To R - 1)
    For i = LBound(B, 1) To R - 1
        If UBound(Split(B(i), "-")) = UBound(Levels) + 1 Then
            For j = 1 To UBound(Levels) + 1
                X = Application.Match(Split(B(i), "-")(j), Levels, 0)
                If IsError(X) Then GoTo 1
            Next j
            P = P + 1
            Tmp(P) = Split(B(i), "-")(0)
        End If
1   Next i
    If P > 0 Then Me.ListBox1.List = Application.Index(Tmp, Evaluate("row(1:" & P & ")"))
End Sub

 

 

test.xlsm

  • Like 1
قام بنشر

الحمدلله و لك الشكر و جزاك الله خيرا 

أستاذي المطلوب بالضبط

لكن سؤال أخير قبل أن نغلق الموضوع 

هذا الكود يلزم كثيرا مع تغير قاعدة البيانات و الأعمدة المطلوبة

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

لك وافر أحترامي 

قام بنشر

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

عدل نطاق المصفوفه من 

Arr = Ws.Range("A2:B" & Ws.Cells(Rows.Count, 1).End(xlUp).Row).Value

الى

Arr = Ws.Range("B2:E" & Ws.Cells(Rows.Count, 2).End(xlUp).Row).Value

وعدل عامود الشروط من العامود الثانى في المصفوفه

Arr(i, 2)

الى العامود الرابع في المصفوفه

Arr(i, 4)

 

  • Like 1

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

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

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

Important Information