Solved

XY Look up function for Excel range.  Return array of results to VBA subroutine

Posted on 2012-04-11
9
487 Views
Last Modified: 2012-05-10
Any direction or help would be appreciated.  I have attached a file for you to look at.  What I need is basically a XY table lookup in VBA BUT there can be more than 1 result.  And I need it to ignore blank values and blank lines.


Please refer
For example, if I pass Joe and Period 4 to the funciton.  I would expect an array back with 2 elements of France, .75 and Italy, 1

It also needs to ignore blank lines and numbers.
XYlookup.xlsx
0
Comment
Question by:drhamel69
  • 4
  • 3
9 Comments
 
LVL 24

Expert Comment

by:StephenJR
ID: 37833255
How are you intending to use this array?
0
 
LVL 2

Author Comment

by:drhamel69
ID: 37833353
I have even more coding after this to loop through other things.
0
 
LVL 24

Expert Comment

by:StephenJR
ID: 37833371
OK, didn't read your question title properly. I would have a procedure with arguments including the range and then no need to bother about whether there are blank lines.
0
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

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.

 
LVL 2

Author Comment

by:drhamel69
ID: 37833391
that would work too as long as I am passed an array back
0
 
LVL 24

Accepted Solution

by:
StephenJR earned 500 total points
ID: 37833436
Here is one approach. I'm assuming you want a 2x2 array returned?
Function XYLookup(rTable As Range, vName, vPeriod) As Variant

Dim vOut(), i As Long, c As Long, rFind As Range, sAddr As String
 
c = Application.Match(vPeriod, rTable.Rows(1), 0)

With rTable.Columns(2)
    Set rFind = .Find(What:=vName, LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
    If Not rFind Is Nothing Then
        sAddr = rFind.Address
        Do
            i = i + 1
            ReDim Preserve vOut(1 To 2, 1 To i)
            vOut(1, i) = rFind.Offset(, -1)
            vOut(2, i) = rTable(rFind.Row - rTable(1).Row + 1, c)
            Set rFind = .FindNext(rFind)
        Loop While rFind.Address <> sAddr
    End If
End With

XYLookup = Application.Transpose(vOut)

End Function

Sub x()

Dim v, i As Long

v = XYLookup(Range("A2:H11"), "Joe", "Period 4")

For i = LBound(v, 1) To UBound(v, 1)
    MsgBox v(i, 1) & "," & v(i, 2)
Next i

End Sub

Open in new window

0
 
LVL 2

Author Comment

by:drhamel69
ID: 37833528
WOrks fine on the example I gave but when I imported into my actual project i am getting a type mismatch error on c = Application.Match(vPeriod, rTable.Rows(1), 0)

Any Ideas?
0
 
LVL 24

Expert Comment

by:StephenJR
ID: 37833941
I didn't put in any error trapping. It means the period value isn't found in the first row of your range.
0
 
LVL 46

Expert Comment

by:Martin Liss
ID: 37951046
This question has been classified as abandoned and is closed as part of the Cleanup Program. See the recommendation for more details.
0

Featured Post

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Not long ago I saw a question in the VB Script forum that I thought would not take much time. You can read that question (Question ID  (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_28455246.html)28455246) Here (http…
Excel can be a tricky bit of software to get your head around. Whilst you’ll be able to eventually get to grips with the basic understanding of how to get by, there are a few Excel tips that not everybody will even know about let alone know how to d…
The viewer will learn how to create two correlated normally distributed random variables in Excel, use a normal distribution to simulate the return on different levels of investment in each of the two funds over a period of ten years, and, create a …
This Micro Tutorial will demonstrate how to create pivot charts out of a data set. I also added a drop-down menu which allows to choose from different categories in the data set and the chart will automatically update.

860 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question