concatenating cells together depending on criteria?!

ellison

Active Member
Joined
Aug 1, 2012
Messages
343
Office Version
  1. 365
Platform
  1. Windows
hi, is there a way to concatenate the contents of multiple cells together depending on IF certain criteria?

EG we have "item names" in Column A and their corresponding "order codes" in Column B

So sometimes we can have a plug, but it has 3 different order codes.

Is there a Marco or Function that could concatenate the info so that there is just one entry for plug (in row A) and 1 cell (in Row B ) which contains the 3 order codes (separated by a semicolon)

EG we have thousands of lines to go through, but in amongst them would be:

<colgroup><col><col></colgroup><tbody>
</tbody>
Row ARow B
plugA45563
plug12223333
plugXYZ

<colgroup><col><col></colgroup><tbody>
</tbody>

We would really like all of that info on one single row =

Row ARow B
plugA45563;12223333;XYZ


<colgroup><col><col></colgroup><tbody>
</tbody>
 

Excel Facts

Control Word Wrap
Press Alt+Enter to move to a new row in a cell. Lets you control where the words wrap.
How about
Code:
Sub MyConcat()
   Dim Cl As Range
   Dim ary As Variant
   Dim i As Long
   
   ReDim ary(1 To Range("A" & Rows.Count).End(xlUp).Row, 1 To 2)
   With CreateObject("scripting.dictionary")
      For Each Cl In Range("A2", Range("A" & Rows.Count).End(xlUp))
         If Not .Exists(Cl.Value) Then
            i = i + 1
            .Add Cl.Value, i
            ary(i, 1) = Cl.Value: ary(i, 2) = Cl.Offset(, 1).Value
         Else
            ary(.Item(Cl.Value), 2) = ary(.Item(Cl.Value), 2) & ";" & Cl.Offset(, 1).Value
         End If
      Next Cl
      Range("C2").Resize(.Count, 2).Value = ary
   End With
End Sub
 
Upvote 0
That is absolutely BRILLIANT, many thanks indeed.

This is a process I like to refer to as "the list squash-down" and you have just made it immeasurably easier!!!!

Thanks again

Best

Neil
 
Upvote 0
Glad to help & thanks for the feedback
 
Upvote 0
That is absolutely BRILLIANT, many thanks indeed.
I know you have a solution, but I developed this little bit more compact macro before seeing that was the case, so I will post my macro (uses a completely different method) for your consideration.
Code:
[table="width: 500"]
[tr]
	[td]Sub ConcatLikeItems()
  Dim Ar As Range
  With Range("A2", Cells(Rows.Count, "A").End(xlUp))
    .Value = Evaluate("IF(" & .Address & "=" & .Offset(-1).Address & ",""""," & .Address & ")")
    For Each Ar In .SpecialCells(xlBlanks).Areas
      Ar(1).Offset(-1, 1) = Join(Application.Transpose(Ar(1).Offset(-1, 1).Resize(Ar.Count + 1)), ";")
    Next
    .SpecialCells(xlBlanks).EntireRow.Delete
  End With
End Sub[/td]
[/tr]
[/table]
Note: Unlike Fluff's code, my code physically replaces the original data with the compacted data. If you wanted to use my code but have the output go where Fluff's code goes, I can easily modify my code to do that.
 
Last edited:
Upvote 0

Forum statistics

Threads
1,215,770
Messages
6,126,794
Members
449,337
Latest member
BBV123

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top