Value result from Vlookup

Hi Guys, can anyone help me resolve why the Vlookup is failing in the T column in my spreadsheet and I get a #VALUE# result? It uses a lookup on Column B from a concatenation of cells.
DummyRec4.xlsx
JustincutAsked:
Who is Participating?
 
NBVCConnect With a Mentor Commented:
It is because the contents of the cell B304 is greater than 255 characters, which VLOOKUP, MATCH, SUMIF, COUNTIF don't work with.

You can try perhaps SUMPRODUCT.. but you need to limit the range sizes to min required.

e.g

=SUMPRODUCT(--(Journals!$B$1:$B$1000=B305),Journals!$O$1:$O$1000)
0
 
JustincutAuthor Commented:
What about creating my own Vlookup via a Function inserted into myWorksheet? Would that work? What code would I need?
0
 
NBVCCommented:
Not sure if a UDF would be more efficient... you can try:

=INDEX(Journals!$B$1:$B$1000,MATCH(TRUE,INDEX(Journals!$B$1:$B$1000=B304,0),0))

again limiting rows to min needed, perhaps by creating a Dynamic Named Range.
0
Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
JustincutAuthor Commented:
I saw this post on google: can you adapt the Function to my spreadsheet?



Hi,

 

You need to write your own VLOOKUP that doesn't have this limitation.

 

ALT+F11 to open VB editor, right click 'ThisWorkbook and insert module and paste the code below in. Close VB editor and back on the worksheet call with the formula

 

=MyVlookup(A1,Sheet5!A1:B100,2)

 

 

Where A1 is the lookup value, Sheet5A1:B100 is the lookup range and 2 is the column you want to return.

 

 

 

Function MyVlookup(Lval As Range, c As Range, oset As Long) As Variant
 Dim cl As Range
 For Each cl In c.Columns(1).Cells
     If UCase(Lval) = UCase(cl) Then
         MyVlookup = cl.Offset(, oset - 1)
         Exit Function
     End If
     Next
 End Function
0
 
NBVCCommented:
You would paste the Function macro into your VB editor, by holding ALT and hitting F11, then go to Insert|Module, then paste the function in the window.

Close the editor and in the sheet enter formula like:

=MyVlookup(B304,Journals!B:B,1)

again, the range Journals!B:B is a whole column.  You would need to reduce that for efficiency's sake.

if you want to get column C data, then change to:  =MyVlookup(B304,Journals!B:C,2)
0
 
JustincutAuthor Commented:
Its not working in Range "S5". Any ideas why?
0
 
NBVCCommented:
Can you clarify what you mean?  What exact formula are you using and what is expected?
0
 
byundtCommented:
You might consider the following alternative to your VLOOKUP in cell T304:
=IFERROR(VLOOKUP($B304,Journals!$B:$Q,15,FALSE),IFERROR(LOOKUP(2,1/(LEFT($B304,255)=LEFT(Journals!$B:$B,255)),Journals!P:P),0))

Note that IFERROR requires Excel 2007 or later.

The first IFERROR uses the VLOOKUP formula that was initially in the cell. It will be faster than an array formula if the concatenation is less than 255 characters.

If the VLOOKUP fails, the next IFERROR uses LOOKUP to return the last match for the first 255 characters in B304 matching a value in worksheet Journals column B. If a match is found, then return a value from Journals column P on that same row.

If the LOOKUP also fails, then return 0.
0
 
NBVCCommented:
.... sorry wrong thread.....

Justincut, please close this thread as appropriate before starting new threads...
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.