dynamic concatenation
I have an array with a list of friends in a column and family and relatives along the top row. Each entry is the relative amount of agitation caused to my family by the friends who are visiting. If certain friends are invited over, I wanted to combine the agitation factor to each family member in a new array. To explain, here is the array. (x=ok, xx=mild, xx-strong dislike, no entry=neutral)
A B C D E
1 Mom Dad Sister Brother
2 tom x xx xxx
3 jane xxx x
4 silvia xxx xx
5 fred xxx xxx
So on Monday, I invited Tom, Jane, and Fred over and on Tuesday I invited Jane and Silvia over (indicated by a "1" in their cell for that day)
A B C
7 Monday Tuesday
8 tom 1
9 jane 1 1
10 silvia 1
11 fred 1
I want to create an effective agitation chart for each family member based on who I decided to invite over, so I need to "AND" the 2 arrays together and concatenate the results for each family member for each day. So the output will look like this
irritation degree Mom Dad Sister Brother
Monday x xxx xx xxx xxx x xxx
Tuesday xxx x xxx xx
so I wanted a 1-step formula to do this (but it won't work). I tried the following array formula to create an intermediate array.
{=IF((B$8:B$11=1),IF(($B$2:$B$5)="","",($B$2:$B$5)),"")}
which creates this column of data.
B(mon) C(Tues)
14 Mom Mom
15 x
16 xxx xxx
17
18
Now if I concatenate column B using a function "Concat" to make the following entry for Mom for Monday and similarly for Tuesday. This is the end result (which is repeated for all the family)
Mom Monday Tuesday
x xxx xxx
here is the concat function
Function ConCat(Delimiter As Variant, ParamArray CellRanges() As Variant) As String
Dim Cell As Range, Area As Variant
If IsMissing(Delimiter) Then Delimiter = ""
For Each Area In CellRanges
If TypeName(Area) = "Range" Then
For Each Cell In Area
If Len(Cell.Value) Then ConCat = ConCat & Delimiter & Cell.Value
Next
Else
ConCat = ConCat & Delimiter & Area
End If
Next
ConCat = Mid(ConCat, Len(Delimiter) + 1)
End Function
if I process this in 2 steps I get the result I want, however it requires a scratch sheet to be made for each column of data (which I don't want). This command errors out on me but if I use the debugger it shows the array is there.
=concat(" ",IF((B8:B11=1),IF((B2:B5)="","",(B2:B5)),""))
Anyone know what is wrong?
thanks
mark
Recent comments
5 years 42 weeks ago
6 years 28 weeks ago
6 years 40 weeks ago
6 years 42 weeks ago
6 years 43 weeks ago
6 years 49 weeks ago
7 years 5 weeks ago
7 years 5 weeks ago
7 years 5 weeks ago
7 years 5 weeks ago