Improve company productivity with a Business Account.Sign Up


Listing out of a listing

Posted on 2011-09-06
Medium Priority
Last Modified: 2012-05-12
Dear Experts,
I have a list of values in $A:$A and a corresponding list of values in let's say $B:$B. At another sheet I would like to get a list of all those values which meet a certain criteria...something like countif..

For example in a and in b I have the following:

in sheet2 I want to have now as a result in a column A called FC the following:

and in the column B called HC the following:

Question by:Petersburg1
  • 4
  • 4
LVL 50
ID: 36493958

you can use a pivot table to group the values by their respective categories. See attached.

cheers, teylyn


Author Comment

ID: 36494461
Hi Teylyn,
I do not want a pivot table, lookin for a formula which allows me to realize that, if possible.
Where to find/switch on this pivot table?
LVL 50
ID: 36494548

If you don't want to use a pivot table, why do you want to know how to create one? :-)

Here's how to get started with pivot tables:

To do what you describe without a pivot table is rather complex:

First, you would have to work out the unique values of column B. This would be either manually or by using the Unique switch of the Advanced Filter, then transposing the result to a row (from the column source). This will not be dynamic. -- Compare with:  A pivot table will update dynamically upon refresh.

Then you would need to figure out a formula to return the 1st, 2nd, 3rd, etc. match for the desired column header. Not a mean feat with formulas. Refer to for a few approaches, neither for the faint-hearted.

You'd also need to know how many items will possibly be returned for each column, so you can cater for the formula to be copied down a sufficient number of rows.

In short: Excel does not come with a simple, native, two or three click solution to present the result in your desired layout.

The two or three click solution can be achieved by a Pivot Table, as I described in my previous post.

You may want to take a step or two back and explain the bigger picture. There may be approaches that differ from your conception of a solution, approaches which may be easier to implement.

If not, I'm afraid the Pivot Table is the most dynamic and flexible, AND easy to create approach.

cheers, teylyn
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.


Author Comment

ID: 36494826
Ok, thanks a lot.
Here the bigger already simplified picture and I guest this should be possible.

In an Excel file A I have a list of employee abbreviations like NIK, KAG, OVS etc. and in the same excel file also a column which is listing their position abbreviation like HC, FC, CEO etc.

In another excel file which is linked with the first one I have several columns for the different job titles like HC and another one with FC and so on and I would like here to get a sorted listing of employees.
All FC employees shall be listed in the FC column and so on.
I know that we never ever will have more than 50 FCs so I could run down a formula which either gives me the value or "" empty space.....
I think it should be something like vlookup or sumproduct or countif and give me as result not a number but the abbreviation and in this way it should result into a listing?

Author Comment

ID: 36494869
Hi again,
just looked that interesting link: but although nice still not helping me to come up with the approach.
Helping columns are fine with me too.

I simply need a dynamic list of the FCs in Excel file B for field validation which is coming from Excel A where we have a list of all our employees which is constantly kept up to working with Excel file B would give me at any time an updated list of employee abbreviations which are FCs...(Financial controllers)...


LVL 50
ID: 36494951

So there are different FILES involved, not just different sheets in the same file? That does not make the situation any easier.

Even if you use words like "just" and "simply" and "dynamic" in your question does not mean that the result can be easily achieved with a simple formula. The Ozgrid link posted above has all the information required to look up and return the nth occurrence of a value in a given column, providing a solution for both a formula approach and with VBA as an alternative.

If you've tried the Ozgrid methods and they do not work for you, please post the file(s) with the Ozgrid formula or VBA applied to your source data, so we can have a look at what is going wrong.

cheers, teylyn

LVL 50

Accepted Solution

Ingeborg Hawighorst (Microsoft MVP / EE MVE) earned 1000 total points
ID: 36495023
See attached file

formula in E2, copy down and across.


E1 to I1 hold the list of unique strings in column B. Column C is a helper cell, as described in the Ozgrid link above. Instead of a Vlookup, this solution uses Index/Match, since the lookup value is to the right of the lookup return value.

cheers, teylyn

Assisted Solution

TinTombStone earned 1000 total points
ID: 36495730
This lot seems to work.  At least on your example!

Have attached an example workbook with the code working with your data MatchValues.xls

Sub MatchVals()

Dim rng1 As Range
Dim rng2 As Range
Dim rowCount As Long
Dim arr1() As Variant
Dim arr2() As Variant
Dim counter As Integer, counter2 As Integer
Dim colInc As Integer, rowInc As Integer
colInc = 1
rowInc = 1
    rowCount = Range("A1").CurrentRegion.Rows.Count
    Set rng1 = Range(Cells(1, 1), Cells(rowCount, 2))
    Set rng2 = Range(Cells(1, 2), Cells(rowCount, 2))
    arr1 = rng1
    arr2 = rng2
    SortArr arr2
    For counter = 1 To UBound(arr2, 1) - 1
        If arr2(counter, 1) <> arr2(counter + 1, 1) Then
            Cells(1, colInc).Value = arr2(counter, 1)
            colInc = colInc + 1
        End If
        Cells(1, colInc).Value = arr2(UBound(arr2, 1), 1)
    Set rng2 = Range(Cells(1, 1), Cells(1, Cells(1, 1).CurrentRegion.Columns.Count))
    arr2 = rng2
    For counter = 1 To UBound(arr2, 2)
        For counter2 = 1 To UBound(arr1, 1)
            If arr1(counter2, 2) = arr2(1, counter) Then
                Cells(rowInc + 1, counter).Value = arr1(counter2, 1)
                rowInc = rowInc + 1
            End If
        Next counter2
        rowInc = 1
    Next counter
End Sub

Sub SortArr(ByRef arr As Variant)
Dim tempVal As Variant
Dim counter As Integer
    For counter = 1 To UBound(arr, 1) - 1
        If arr(counter, 1) > arr(counter + 1, 1) Then
            tempVal = arr(counter, 1)
            arr(counter, 1) = arr(counter + 1, 1)
            arr(counter + 1, 1) = tempVal
            SortArr arr
        End If
End Sub

Open in new window


Author Comment

ID: 36497112
thanks a lot. I found a workable solution but like yours even more!
Also the code is very nice as not helping columns at all are needed


Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

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.

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.

Join & Write a Comment

As a person who answers a lot of questions, I often see code that could be simplified, made easier to read, and perhaps most importantly made easier to maintain if the code was modified to use the Select Case statement. This article explains how to…
This article presents several of my favorite code snippets.
Graphs within dashboards are meant to be dynamic, representing data from a period of time that will change each time the dashboard is updated with new data. Rather than update each graph to point to a different set within a static set of data, t…
This Micro Tutorial will demonstrate the scrolling table in Microsoft Excel using the INDEX function.

587 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