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

محتاج كود لتلوين الخلايا فى عمود بحيث بياناته غير موجوده فى خلايا العمود الثانى


إذهب إلى أفضل إجابة Solved by محمد هشام.,

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

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

مع جزيل الشكر

مقارنة بيانات عمود ببيانات عمود اخر.xls

رابط هذا التعليق
شارك

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

أنا شخصيا لا ألجأ إلى الكود إلا في حالة عدم تنفيذ المطلوب بالمعادلات

ولكن لا أدري لماذا حكمت بكون التنسيق الشرطي لن يفيد؟؟

يمكنك تجربة هذه المعادلة في التنسيق الشرطي

=COUNTIF($F$1:$F$9,"="&I1)=0

وتطبق على I1:I100 مثلا أو أي نطاق تريده

ويمكن الحصول على الكود عند تسجيل ماكرو لهذه العملية

والتعديل عليه في تحديد يداية ونهاية النطاق أو المعادلة

بالتوفيق

رابط هذا التعليق
شارك

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

تقبل تحياتى 

برجاء برجاء تنفيذ المطلوب بالاكواد

رابط هذا التعليق
شارك

  • أفضل إجابة
Private Sub Worksheet_Change(ByVal Target As Range)

  Set a = Range("F2:F" & [F65000].End(xlUp).Row)
  Set b = Range("I2:I" & [I65000].End(xlUp).Row + 10)
  
    Set rng1 = CreateObject("Scripting.Dictionary")
    Set rng2 = CreateObject("Scripting.Dictionary")
    
If Target.Column <> 6 And Target.Column <> 9 Then Exit Sub
For Each J In a
   rng1(J.Value) = J.Value
  Next J

  For Each J In b
    rng2(J.Value) = J.Value

If Not rng1.exists(J.Value) And rng2(J.Value) <> "" Then J.Interior.ColorIndex = 36
If rng1.exists(J.Value) Or rng2(J.Value) = "" Then J.Interior.ColorIndex = xlNone
  Next J
End Sub

 

 

test.xlsb

تم تعديل بواسطه محمد هشام.
  • Like 3
رابط هذا التعليق
شارك

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

ربما

Sub test()
    Dim a
    Dim i&
    a = Range(Cells(2, 6), Cells(2, 6).End(xlDown)).Cells
    With CreateObject("scripting.dictionary")
        For i = 1 To UBound(a)
            If Not .exists(a(i, 1)) Then .Add a(i, 1), a(i, 1)
        Next
        For i = 2 To Cells(Rows.Count, 9).End(xlUp).Row
            If Not .exists((Cells(i, 9).Value)) Then
                Cells(i, 9).Interior.Color = vbRed
            End If
        Next
    End With
End Sub
  أو
Sub tes2()
    Dim a
    Dim i&
    With CreateObject("scripting.dictionary")
        For i = 1 To Cells(Rows.Count, 6).End(xlUp).Row
            If Not .exists(Cells(i, 6).Value) Then .Add Cells(i, 6).Value, ""
        Next
        For i = 2 To Cells(Rows.Count, 9).End(xlUp).Row
            If Not .exists((Cells(i, 9).Value)) Then
                Cells(i, 9).Interior.Color = vbYellow
            End If
        Next
    End With
End Sub

مع المحافظة على لون الخلية عند تغيير القيمة

  • Like 3
رابط هذا التعليق
شارك

السلام عليكم .. اشكر الاساتذة الافاضل على الحلول 

بالنسبة لحل الاستاذ / محمد هشام 

عند تطبيق الكود على الملف لم ينفذ وظهرت المشكلة كما بالصورة

image.png.5d8677668b3ce29c36882615b08cc3fe.png

الاستاذ الفاضل / محى الدين

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

اشكركم على المساعدة وفى انتظار الحلول .. طبتم وطاب يومكم بالصحة والستر والسعادة

 

 

 

 

 

 

 

رابط هذا التعليق
شارك

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

رابط هذا التعليق
شارك

Sub test()
    Dim a
    Dim i&
    a = Range(Cells(2, 6), Cells(2, 6).End(xlDown)).Cells
    With CreateObject("scripting.dictionary")
        For i = 1 To UBound(a)
            If Not .exists(a(i, 1)) Then .Add a(i, 1), a(i, 1)
        Next
        For i = 2 To Cells(Rows.Count, 9).End(xlUp).Row
            If Not .exists((Cells(i, 9).Value)) Then
                Cells(i, 9).Interior.Color = vbRed
            Else
            Cells(i, 9).Interior.Color = xlNone
            End If
        Next
    End With
End Sub
  ---------------------
Sub tes2()
    Dim a
    Dim i&
    With CreateObject("scripting.dictionary")
        For i = 1 To Cells(Rows.Count, 6).End(xlUp).Row
            If Not .exists(Cells(i, 6).Value) Then .Add Cells(i, 6).Value, ""
        Next
        For i = 2 To Cells(Rows.Count, 9).End(xlUp).Row
            If Not .exists((Cells(i, 9).Value)) Then
                Cells(i, 9).Interior.Color = vbYellow
                Else
                Cells(i, 9).Interior.Color = xlNone
            End If
        Next
    End With
End Sub

ماكرو عادي يتم تنفيذه من قبلك

تم تعديل بواسطه محي الدين ابو البشر
  • Like 4
رابط هذا التعليق
شارك

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

من اعماق قلبى اشكر الاساتذة الافاضل 

محمد هشام 

محى الدين ابو البشر

على التكرم بايجاد الحل المناسب مع جزيل الشكر والعرفان

ولو تفضلتم ممكن لاثراء الموضوع تطبيق الحل على عدة اعمدة كما بالمرفق .. مع جزيل الشكر والعرفان

مقارنة بيانات عمود ببيانات عمود اخر (1).xls

رابط هذا التعليق
شارك

Sub test4()
Dim sh As Worksheet: Set sh = Sheets("Sheet1")
Lr = sh.Columns("I:N").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
Set a = Range("F2:F" & [F65000].End(xlUp).Row)
Set b = Range("I2:N" & Lr)

Application.ScreenUpdating = False
  Set R1 = CreateObject("Scripting.Dictionary")
  Set R2 = CreateObject("Scripting.Dictionary")
  
  For Each J In a
   R1(J.Value) = J.Value
   
Next J

  For Each J In b
    R2(J.Value) = J.Value
    
If Not R1.exists(J.Value) And R2(J.Value) <> "" Then J.Interior.ColorIndex = 36
If R1.exists(J.Value) Or R2(J.Value) = "" Then J.Interior.ColorIndex = xlNone

  Next J
End Sub

 

مقارنة بيانات عمود ببيانات عمود اخر 2.xls

او  

Private Sub Worksheet_Change(ByVal Target As Range)

Lr = Columns("I:N").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
Set a = Range("F2:F" & [F65000].End(xlUp).Row)
Set b = Range("I2:N" & Lr)

With Target
    Select Case .Column
        Case 6, 9, 10, 11, 12, 13, 14
            If .Row > 1 Then
            
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    Set R1 = CreateObject("Scripting.Dictionary")
    Set R2 = CreateObject("Scripting.Dictionary")
  
  For Each j In a: R1(j.Value) = j.Value: Next j
  For Each j In b: R2(j.Value) = j.Value
  
If Not R1.exists(j.Value) And R2(j.Value) <> "" Then j.Interior.ColorIndex = 42
If R1.exists(j.Value) Or R2(j.Value) = "" Then j.Interior.ColorIndex = xlNone
Next j

    Application.EnableEvents = True
    Application.ScreenUpdating = True
   
        End If
    End Select
End With
End Sub

 

تم تعديل بواسطه محمد هشام.
  • Like 2
رابط هذا التعليق
شارك

Sub test()
    Dim a, x
    Dim i&, ii&
  Application.ScreenUpdating = False
    a = Range(Cells(2, 6), Cells(2, 6).End(xlDown)).Cells
    With CreateObject("scripting.dictionary")
        For i = 1 To UBound(a)
            If Not .exists(a(i, 1)) Then .Add a(i, 1), a(i, 1)
        Next
        For i = 2 To Cells(1, 9).CurrentRegion.Rows.Count
        For ii = 9 To 9 + Cells(1, 9).CurrentRegion.Columns.Count - 1
            If Not .exists((Cells(i, ii).Value)) Then
                Cells(i, ii).Interior.Color = vbRed
            Else
            Cells(i, ii).Interior.Color = 16777164
            End If
        Next: Next
    End With
    Application.ScreenUpdating = True
End Sub

Sub tes2()
    Dim a, x
    x = Cells(1, 9).CurrentRegion.Columns.Count
    Dim i&, ii&
    Application.ScreenUpdating = False
    With CreateObject("scripting.dictionary")
        For i = 1 To Cells(Rows.Count, 6).End(xlUp).Row
            If Not .exists(Cells(i, 6).Value) Then .Add Cells(i, 6).Value, ""
        Next
        For i = 2 To Cells(1, 9).CurrentRegion.Rows.Count
        For ii = 9 To 9 + Cells(1, 9).CurrentRegion.Columns.Count - 1
            If Not .exists((Cells(i, ii).Value)) Then
                Cells(i, ii).Interior.Color = vbYellow
                Else
                Cells(i, ii).Interior.Color = 16777164
            End If
        Next: Next
    End With
    Application.ScreenUpdating = True
End Sub

 

  • Like 5
رابط هذا التعليق
شارك

الاساتذة الافاضل 

محمد هشام

محى الدين ابو البشر 

اكرمكم الله بواسع فضله وزادكم من نعمه وفضله

وتسلم يداك اخى العزيز محى مجهود رائع .. تقبل شكرى واعتزازى

  • Thanks 1
رابط هذا التعليق
شارك

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