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

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

قام بنشر

السلام عليكم 

اخوتنا الكرام

مطلوب تحويل هذه المعادل الي كود ويرجي توضيح تحويل اي معادله الي كود مع الشرح

=TEXTJOIN(", ",TRUE,UNIQUE(FILTER($B$4:$B$1200,$A$4:$A$1200=C3)))

وشكرا لكم جميعا

TEST CODE.xlsx

قام بنشر

وعليكم السلام 

Function JoinUniqueValues(lookupValue As Variant, lookupRange As Range, returnRange As Range) As String
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    Dim i As Long
    Dim result As String
    
    ' إنشاء قاموس لتخزين القيم الفريدة
    For i = 1 To lookupRange.Count
        If lookupRange.Cells(i, 1).Value = lookupValue Then
            If Not dict.exists(returnRange.Cells(i, 1).Value) Then
                dict.Add returnRange.Cells(i, 1).Value, Nothing
            End If
        End If
    Next i
    
    ' دمج القيم الفريدة باستخدام فاصلة
    result = Join(dict.keys, ", ")
    
    JoinUniqueValues = result
End Function

لاستخدام هذا الكود، قم بإضافته إلى وحدة VBA في Excel، ثم استخدم الدالة في ورقة العمل كالتالي:

 
=JoinUniqueValues(I3, $A$4:$A$1200, $B$4:$B$1200)

 

TEST CODE.xlsm

  • Like 2
قام بنشر

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

بطريقة أخرى 

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WS As Worksheet: Set WS = ThisWorkbook.Sheets("Sheet1")
    Dim n As Object: Set n = CreateObject("Scripting.Dictionary")
    Dim i As Long, ling As Long, lastRow As Long, tmp As String, kay As String, j As Variant
    
    If Not Intersect(Target, WS.Range("A4:B" & WS.Rows.Count)) Is Nothing Then
        Application.ScreenUpdating = False
        
        With WS
            ' مسح النتائج السابقة
            .Range("I3:J" & .Rows.Count).ClearContents
            
            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
            ling = 3 '  تحديد صف وضع النتائج
            
            ' بداية من الصف 4
            For i = 4 To lastRow
                tmp = .Cells(i, 1).value ' الحصول على القيمة من عمود A
                kay = .Cells(i, 2).value ' الحصول على القيمة من عمود B

                ' التأكد من أن القيم ليست فارغة
                If tmp <> "" And kay <> "" Then
                    If n.Exists(tmp) Then
                        n(tmp) = n(tmp) & ", " & kay
                    Else
                        n.Add tmp, kay
                    End If
                End If
            Next i
            
            For Each j In n.Keys
                .Cells(ling, 9).value = j ' القيم الفريدة في عمود I
                .Cells(ling, 10).value = n(j) ' القيم المرتبطة في عمود J
                ling = ling + 1
            Next j
            
            ' تعديل عرض العمود  ليتناسب مع المحتوى
            .Columns("J").AutoFit
        End With
        
        Application.ScreenUpdating = True
    End If
End Sub

 

TEST CODE.xlsb

  • Like 3
قام بنشر (معدل)

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

اظافة الى ما تقضلو  به اساتذتنا الاكارم

 

TEST CODE1.xlsm

تم تعديل بواسطه عبدالله بشير عبدالله
  • Like 2
  • 1 month later...
قام بنشر
On 11/11/2024 at 6:39 PM, محمد هشام. said:

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

بطريقة أخرى 

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WS As Worksheet: Set WS = ThisWorkbook.Sheets("Sheet1")
    Dim n As Object: Set n = CreateObject("Scripting.Dictionary")
    Dim i As Long, ling As Long, lastRow As Long, tmp As String, kay As String, j As Variant
    
    If Not Intersect(Target, WS.Range("A4:B" & WS.Rows.Count)) Is Nothing Then
        Application.ScreenUpdating = False
        
        With WS
            ' مسح النتائج السابقة
            .Range("I3:J" & .Rows.Count).ClearContents
            
            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
            ling = 3 '  تحديد صف وضع النتائج
            
            ' بداية من الصف 4
            For i = 4 To lastRow
                tmp = .Cells(i, 1).value ' الحصول على القيمة من عمود A
                kay = .Cells(i, 2).value ' الحصول على القيمة من عمود B

                ' التأكد من أن القيم ليست فارغة
                If tmp <> "" And kay <> "" Then
                    If n.Exists(tmp) Then
                        n(tmp) = n(tmp) & ", " & kay
                    Else
                        n.Add tmp, kay
                    End If
                End If
            Next i
            
            For Each j In n.Keys
                .Cells(ling, 9).value = j ' القيم الفريدة في عمود I
                .Cells(ling, 10).value = n(j) ' القيم المرتبطة في عمود J
                ling = ling + 1
            Next j
            
            ' تعديل عرض العمود  ليتناسب مع المحتوى
            .Columns("J").AutoFit
        End With
        
        Application.ScreenUpdating = True
    End If
End Sub



الف شكر علي المجهود العظيم م/ محمد هشام 

1	a	S-K-01
1	b	S-K-02
1	c	S-K-03
1	a	S-K-03
2	X	S-K-05
2	Y	S-K-06
2	z	S-K-07
2	v	S-K-03
2	u	S-K-01
1	a	S-K-10


 "C" في هذا المثال يمكنيني اضافه العمود 
"K"واظهار الناتج في  عمود 

 

TEST CODE.xlsb 16.41 kB · 30 downloads

 

قام بنشر
7 ساعات مضت, hanykassem said:
1	a	S-K-01
1	b	S-K-02
1	c	S-K-03
1	a	S-K-03
2	X	S-K-05
2	Y	S-K-06
2	z	S-K-07
2	v	S-K-03
2	u	S-K-01
1	a	S-K-10


 "C" في هذا المثال يمكنيني اضافه العمود 
"K"واظهار الناتج في  عمود 

نعم اخي  @hanykassem  نظرا للمثال المرفق هناك بعض الإحتمالات الواردة في حالة كان هناك تكرار لنفس القيم  كما هو موضح في الصورة أدناه   

1.jpg.40ebea3fe23d8734b155ba53f358e907.jpg

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WS As Worksheet: Set WS = Sheets("Sheet1")
    Dim i As Long, ling As Long, lastRow As Long, tmp As String, kayB As String, kayC As String, _
                                                             j As Variant, a As Object, r As Object

    Set a = CreateObject("Scripting.Dictionary"): Set r = CreateObject("Scripting.Dictionary")
    If Not Intersect(Target, WS.Range("A4:C" & WS.Rows.Count)) Is Nothing Then
        Application.ScreenUpdating = False

        With WS
            .Range("I3:K" & .Rows.Count).ClearContents

            lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
            ling = 3

            For i = 4 To lastRow
                tmp = .Cells(i, 1).value
                kayB = .Cells(i, 2).value
                kayC = .Cells(i, 3).value

                If tmp <> "" Then
                    If kayB <> "" Then a(tmp) = IIf(a.Exists(tmp), a(tmp) & " , " & kayB, kayB)
                    If kayC <> "" Then r(tmp) = IIf(r.Exists(tmp), r(tmp) & " , " & kayC, kayC)
                End If
            Next i

            For Each j In a.Keys
                .Cells(ling, 9).value = j
                .Cells(ling, 10).value = a(j)
                .Cells(ling, 11).value = r(j)
                ling = ling + 1
            Next j

            .Columns("j:K").AutoFit
        End With

        Application.ScreenUpdating = True
    End If
End Sub

لحدف التكرارات قم بتعديل الصف التالي 

If tmp <> "" Then
   If kayB <> "" Then a(tmp) = IIf(a.Exists(tmp), a(tmp) & " , " & kayB, kayB)
   If kayC <> "" Then r(tmp) = IIf(r.Exists(tmp), r(tmp) & " , " & kayC, kayC)
End If

إلى


If tmp <> "" Then
    If kayB <> "" Then If Not a.Exists(tmp) Then a.Add tmp, _
    kayB Else If InStr(1, a(tmp), kayB) = 0 Then a(tmp) = a(tmp) & " , " & kayB
            
    If kayC <> "" Then If Not r.Exists(tmp) Then r.Add tmp, _
    kayC Else If InStr(1, r(tmp), kayC) = 0 Then r(tmp) = r(tmp) & " , " & kayC
 End If

 

TEST CODE 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