Your Answer Pankaj Sonawane,
this appears to duplicate your last question. If I have missed some difference let me know. I will post the code here as well to make sure you see it.
I made a mock up of your two workbooks as I envision they are organized and tested this code. It acted as I expected - as I understand your requirement. Both procedures below need to be placed into your module. Test this on a copy of your workbook
Sub ABC() Dim bk1 As Workbook, bk2 As Workbook Dim sh1 As Worksheet, sh2 As Worksheet Dim r1 As Range, r2 As Range, r3 As Range Dim v As Variant, s As String, res As Variant Dim r4 As Range, r5 As Range, Aval As String Dim ii As Long, r6 As Range Dim bFound As Boolean, cell As Range ' Set a reference to "copy of Extract1.xls" Set bk1 = Workbooks("Copy of Extract1.xls") ' set a reference to Base Data in bk1 Set sh1 = bk1.Worksheets("Base Data") ' set a reference to all the cells in column E of sh1 ' starting in cell E2 Set r1 = sh1.Range("E2", sh1.Cells(sh1.Rows.Count, "E").End(xlUp)) ' set a reference to Copy of Mapping Details Set bk2 = Workbooks("Copy of Mapping Details.xls") ' loop through all the cells in column E of sh1 in bk1 ' starting in cell E2. If Only E2 needs to be checked, then ' change ' set r1 = sh1.Range("E2",sh1.cells(sh1.rows.count,"E").End(xlup)) ' to set r1 = Sh1.Range("E2") For Each cell In r1 ' extract the "x" you speak of ' first see if there is a comma in the cell; if so use split ' to separate out the "x". If not see if there is anything in ' the cell. If there is, that is "x", if not we will not search ' on that cell If InStr(1, cell, ",", vbTextCompare) > 0 Or Len(Trim(cell.Value)) > 0 Then If InStr(1, cell, ",", vbTextCompare) > 0 Then
v = Split(cell, ",") s = v(LBound(v))
Else
ReDim v(0 To 0) v(0) = cell.Value s = cell.Value
End If For ii = LBound(v) To UBound(v)
s = v(ii) bFound = False ' Loop through the sheets in Bk2 in tab order ' search in column A for the "x" value held in the variable "s"
For Each sh2 In bk2.Worksheets
Set r2 = sh2.Range("A1", _
sh2.Cells(sh2.Rows.Count, "A").End(xlUp))
' "*" & s & "*" finds the search string as a substring
' just s finds the search string as the complete cell
' entry. as written I am looking for a substring
' if this is not correct, change it to
' Application.countif(r2,s)
If Application.CountIf(r2, "*" & s & "*") > 0 Then
res = Application.Match("*" & s & "*", r2, 0)
' or res = Application.Match(s, r2, 0)
If Not IsError(res) Then
Set r3 = r2(res)
bFound = True
Exit For
End If 'Not IsError(res)
End If 'Application.CountIf(r2, "*" & s & "*") > 0
Next 'Each sh2 In bk2.Worksheets
'5. If it is present, then do certain tasks
'which I will let you know in my next question.
If bFound Then
' code goes here to do certain tasks
'MsgBox s & " found at " & r3.Address(0, 0, xlA1, True)
Set r4 = r3.Offset(0, 2) ' column C
Do While r4.Row > 1
Set r4 = r4.Offset(-1, 0)
If r4.Value = 1 Then
Set r5 = r4.Offset(0, -2)
Aval = r5.Value
Set r6 = cell.Offset(0, -1)
If InStr(1, r6, Aval, _
vbTextCompare) = 0 Then
If IsEmpty(r6) Then
r6.Value = Aval
If InStr(1, cell, ",", vbTextCompare) > 0 Then
r6.Font.ColorIndex = 3
End If
Else
ColorCell r6, Aval
End If
End If
Exit Do
Else
' a one was not found in column C
End If
Loop
End If ' bfound = True
Next 'ii = LBound(v) To UBound(v) End If ' InStr(1, cell, ",", vbTextCompare) > 0 Then Next 'Each cell In r1 End Sub
Public Sub ColorCell(r As Range, Aval As String) Dim l As Long Dim s As String, vv As Variant l = Len(r) + Len(Aval) + 1 s = r.Value & "," & Aval ReDim vv(1 To l) For i = 1 To Len(r) vv(i) = r.Characters(i, 1).Font.ColorIndex Next For i = Len(r) + 2 To l
vv(i) = 3
Next r = s For i = 1 To l
r.Characters(i, 1).Font.ColorIndex = vv(i)
Next End Sub PS: If you didn't understand the answer, please post a followup with additional information or what your question is.
My New Question:
The above code is running without any error, however no actions are been taken in the sheet.
Can I send you the sheets which I am working on to your personal email?
Pankaj
Pankaj Sonawane,
based on your description of what you wanted, I build test files and ran the code against them. The code worked fine for me.
If you want to send your files, I will take a look. Don't expect a rapid response however as I will have to perform testing on the files.
Advertisement