Vlookup macro that returns data from worksheet, then Loops

X

xlsxlsxls

Hi,
I have a Workbook with 2 sheets. The first sheet is called "SearchData
and has 2 columns:

Name Code
Art 10
Ben 11
Carl 12
Doug 13
Eric 14
Fran 15
Gus 16
Henry 17
Irene 18


The second sheet is called "New" which has one column of names (o
which 5 are in the previous sheet).

Name
Allen
Bruce
Carl
Dana
Eric
Fran
Gary
Henry
John

Manually typing a formula using match and vlookup functions returns th
following desired result. (Note: Search data has to be sorted and uniqu
values only)

The formula is (which is searching for a match and if there is, return
the data in colum 2 or returns "Not Found"

=IF(ISNA(MATCH(A2,source!A:A,0))=FALSE,VLOOKUP(new!$A2,source!$A$1:$B$10,2,FALSE),"No
Found")

Then I fill down and get the desired result.

Name Code
Art 10
Bruce Not Found
Carl 12
Dana Not Found
Eric 14
Fran 15
Gary Not Found
Henry 17
John Not Found

In actuality, there will be thousands of records and I would like to b
able to attach this to a Button w/ a VBA Loop command with a message bo
saying done when complete. Problem is I am not very good at writing cod
and when I entered my formula in a module and tried to include shee
names it got all screwed up. I know it has something to do with D
While / Loop While the active cell in "New" is not empty. Any hel
would be appreciated.

Thank
 
T

Tom Ogilvy

You could use a loop but it would be slower and more complex.

Dim sStr as String, rng as Range
sStr = "=IF(ISNA(MATCH(A2,source!A:A,0))=FALSE," & _
"VLOOKUP(new!$A2,source!$A$1" & _
":$B$10,2,FALSE),""Not Found"")"
With Worksheets("New")
set rng = .range(.range("A2"), .range("A2").End(xldown))
End with
rng.offset(0,1).Formula = sStr
' if you want to replace the formulas with the
' value displayed then uncomment the next line
' rng.offset(0,1).Formula = rng.offset(0,1).Value

Note that since you are using False as the 4th argument of vlookup, the data
in Source does not need to be sorted. The names would need to be unique,
however.
 
M

Mike Fogleman

First, what IS the name of your first sheet? You say "SearchData", but your
formula refers to "source". Whichever, make sure it is right in your
formula.
Let's give your formula a name so we can refer to it instead of writing it
in code the long way to avoid syntax errors. Copy your formula and on the
menu select Insert/Name/Define and paste it in the "Refers To" box. At the
top type in the name FindCode and click OK.
Now from the Control Toolbox menu, make a button on sheet "New". Right click
the button and select View Code and put this code:

Private Sub CommandButton1_Click()
Range("B2").Formula = "=FindCode"
Range("B2", Range("A2").End(xlDown)).Offset(0, 1).FillDown
End Sub

Close the code window and click the Triangle icon in the Control Toolbox
menu to leave Design Mode which will activate the button.

Cheers!..Mike F
 
T

Tom Ogilvy

I suggest you don't use that method, but if you do, you must be cognizant of
the fact that the formula is very sensitive to the ActiveCell location. For
example. E2 was the activecell when the defined name was created.

? activeCell.Address
$E$2
? activeworkbook.Names("FindCode").RefersTo
=IF(ISNA(MATCH(New!A2,Source!A:A,0))=FALSE,VLOOKUP(New!$A2,Source!$A$1:$B$10
,2,FALSE),"Not Found")

' now we make Z21 the activecell:

Range("Z21").Select
? activeworkbook.Names("FindCode").RefersTo
=IF(ISNA(MATCH(New!V21,Source!V:V,0))=FALSE,VLOOKUP(New!$A21,Source!$A$1:$B$
10,2,FALSE),"Not Found")

This could be made to work, but I think I have shown a simpler way.

--
Regards,
Tom Ogilvy


Mike Fogleman said:
First, what IS the name of your first sheet? You say "SearchData", but your
formula refers to "source". Whichever, make sure it is right in your
formula.
Let's give your formula a name so we can refer to it instead of writing it
in code the long way to avoid syntax errors. Copy your formula and on the
menu select Insert/Name/Define and paste it in the "Refers To" box. At the
top type in the name FindCode and click OK.
Now from the Control Toolbox menu, make a button on sheet "New". Right click
the button and select View Code and put this code:

Private Sub CommandButton1_Click()
Range("B2").Formula = "=FindCode"
Range("B2", Range("A2").End(xlDown)).Offset(0, 1).FillDown
End Sub

Close the code window and click the Triangle icon in the Control Toolbox
menu to leave Design Mode which will activate the button.

Cheers!..Mike F

xlsxlsxls said:
Hi,
I have a Workbook with 2 sheets. The first sheet is called "SearchData"
and has 2 columns:

Name Code
Art 10
Ben 11
Carl 12
Doug 13
Eric 14
Fran 15
Gus 16
Henry 17
Irene 18


The second sheet is called "New" which has one column of names (of
which 5 are in the previous sheet).

Name
Allen
Bruce
Carl
Dana
Eric
Fran
Gary
Henry
John

Manually typing a formula using match and vlookup functions returns the
following desired result. (Note: Search data has to be sorted and unique
values only)

The formula is (which is searching for a match and if there is, returns
the data in colum 2 or returns "Not Found"
=IF(ISNA(MATCH(A2,source!A:A,0))=FALSE,VLOOKUP(new!$A2,source!$A$1:$B$10,2,F
 
M

Mike Fogleman

Very true, my oversight since the formula requires some relative values. The
original ActiveCell when the formula was named, must be Activated(Selected)
before the code formula is used. Thanks Tom.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top