Link to home
Start Free TrialLog in
Avatar of StormFusion
StormFusionFlag for United Kingdom of Great Britain and Northern Ireland

asked on

Take a range and display all values in one cell as comma diliminated

Hi,

I need help with a function that can take a range say A2:E5 and convert all values into one long string and place result into A1.

Then the reverse of this that takes the result from A1 and places into the defined range.  The values could be either text or integer.

Thank you
Avatar of Norie
Norie

How should the values be arranged?

Should it be across then down or down then across?
Avatar of StormFusion

ASKER

Hi,

Across then down.
You won't be able to use functions to do both the concatenation (values into A1) and extraction (values out of A1) because of circular referencing.

If the source range is known - A2:E5 in your example - then one could create a long formula that combines all the values like so:
=A2&","&B2&","&C2&","&D2&","&E2&","&A3&","&B3&","&C3&","&D3&","&E3&","&A4&","&B4&","&C4&","&D4&","&E4&","&A5&","&B5&","&C5&","&D5&","&E5

Admittedly, that's not very elegant.  

If your destination range was similarly-sized, you could insert formulas in the cells to retrieve the specific value, but they, too, would be pretty tedious.

Your best scenario would be to either have a macro or a user-defined function (UDF) that will handle these.  However, they involve VBA and you didn't specify whether that was an option.

-Glenn
ASKER CERTIFIED SOLUTION
Avatar of Subodh Tiwari (Neeraj)
Subodh Tiwari (Neeraj)
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Hi Subodh Tiwari (Neeraj) that works exactly as needed, but how do I now reverse this so it puts values from the function string back into the range defined,

So I use Range ToString (A1:A5) which works, and then another function which 0,0,0,0 for example is passed to and it places all the individual values back into the cells.

Cheers
Here's an slightly different function which allows you to specify the delimiter and whether to go across and down or down and across.
Function RangeToDelimList(rng As Range, Optional Delim = ",", Optional AcrossDown = True)
Dim I As Long
Dim R As Long
Dim tmp As String
Dim arr()


    For I = 1 To rng.Rows.Count
        If DownAcross Then
            tmp = Join(Application.Transpose(Application.Index(Application.Transpose(rng), , I)), Delim)
        Else
            tmp = Join(Application.Transpose(Application.Index(rng, , I)), Delim)
        End If

        ReDim Preserve arr(R)

        arr(R) = tmp
        R = R + 1
    Next I

    RangeToDelimList = Join(arr, Delim)

End Function

Open in new window


It defaults to across and down with the delimiter being a comma.

As for a 'reverse' function, how would the range be determined?
The range would be past to it similar to function
But how would the range be determined?

Would it be passed to the function?
Ok, hows about when the first function is run it stores the RANGE in the first DIM slot, then when the comma deliminated code is passed to a new function it reads the first DIM slot for the range and it has exact size and range to be posted back?

SO.... A2:D5,TEST,DATA,DUMMY,VAR,001 etc

Then when other function called it nows exactly where it all goes back but obviously doesn't paste the RANGE value from the beginning of the string.

That be great :)
So the first function would return the range address followed by the list of values from the range?
The first function would produce a comma deliminated list of data with the first of these values being the range it was taken from.

Then when this data string is past to another function it takes the first data from the string and knows this is the range the data needs to go into.
No comment has been added to this question in more than 21 days, so it is now classified as abandoned.

I have recommended this question be closed as follows:

Accept: Subodh Tiwari (Neeraj) (https:#a41828427)

If you feel this question should be closed differently, post an objection and the moderators will review all objections and close it as they feel fit. If no one objects, this question will be closed automatically the way described above.

frankhelk
Experts-Exchange Cleanup Volunteer