View Single Post
  #9   Report Post  
Posted to microsoft.public.excel.programming
Greg Wilson Greg Wilson is offline
external usenet poster
 
Posts: 747
Default Finding text in one column that compares to another

This will fiind duplicates and will not supplant the contents in the third
row. For example, for the following scenario:

A4 = "Jackson"
A10 = "County"
A15 = "Frank"
A17 = "Hen"
A20 = "Arch"

All other cells in column A populated with text not found in column B.

B2 = "Franklin and Henderson Architechs"
B6 = "Jacksonville County"
B9 = "Mike Jackson"

Result:

C2 = "Frank" and "Hen" and "Arch" in the same cell
C6 = "Jackson" and "County" in the same cell
C9 = "Jackson"

If the text of more than one cell in column A is found in the same cell in
column B then these multiple hits will be displayed in the adjacent cell in
column C in separate lines (i.e. wrapped). So the contents of cells in column
C are not supplanted. Also, if the contents of a single cell in column A is
found in more than one cell in column B then these will be displayed in the
adjacent cells in column C.

Run on a copy of your data as Tom mentioned. Hope it's what you were looking
for.

Regards,
Greg

Sub Test()
Dim r As Range, r2 As Range
Dim c As Range, c2 As Range, c3 As Range
Dim wks As Worksheet

Application.ScreenUpdating = False
Set wks = Sheets("Sheet1")
With wks
Set r = .Range(.Cells(2, 1), _
.Cells(2, 1).End(xlDown))
Set r2 = .Range(.Cells(2, 2), _
.Cells(2, 2).End(xlDown))
End With
For Each c In r.Cells
For Each c2 In r2.Cells
If c2 Like "*" & c & "*" Then
Set c3 = c2(1, 2)
If Len(c3) = 0 Then c3 = c _
Else c3 = c3 & Chr(10) & c
End If
Next c2
Next c
Application.ScreenUpdating = True
End Sub


"Pops Jackson" wrote:

I had stated that I found duplicate matches but found that not to be true.
In fact, I have learned that I need to find duplicate matches, so that the
cell showing the results will be filled in for each occurence of the match.
I have tried making changes to the routine but with no success.

How can I change the routine to find each occurence instead of the first it
comes across?

Thanks,

Jim
--
Pops Jackson


"Tom Ogilvy" wrote:

Sub bbb()
Dim rngA As Range, rngB As Range
Dim rng As Range, cell As Range
Dim res As Variant
With Worksheets("Sheet1")
Set rngA = .Range(.Cells(2, 1), .Cells(2, 1).End(xlDown))
Set rngB = .Range(.Cells(2, 2), .Cells(2, 2).End(xlDown))
End With
For Each cell In rngA
res = Application.Match("*" & cell.Value & "*", rngB, 0)
If Not IsError(res) Then
Set rng = rngB(res)
rng.Offset(0, 1).Value = cell
End If
Next

End Sub

worked for me. It assumes the lists start in A2 and B2. If in A1 and B1,
change

With Worksheets("Sheet1")
Set rngA = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown))
Set rngB = .Range(.Cells(1, 2), .Cells(1, 2).End(xlDown))
End With

--
Regards,
Tom Ogilvy

"Jim Jackson" wrote in message
...
In a spreadsheet I have one column with single item names and a second

column
with strings of data. I am trying to set up a routine that will search

the
column with strings for the names found in the first one. The result

needed
is to place the name in a third column adjacent to the one with the string
that contains the name. I have come up with this:

If InStr(Range("B2"), ActiveCell) Then Range("C2") = ActiveCell
If InStr(Range("B3"), ActiveCell) Then Range("C2") = ActiveCell
etc.

This works if I use "Offset" and type a separate line of code for each row
of data but this is rather inconvenient since there are over 1000 rows.

Is there a better way to accomplish this?

Thanks for any help anyone may offer.