Не очень красиво, и я с нетерпением жду возможности увидеть гораздо более элегантные и профессиональные решения, чтобы поучиться у них, но это работает быстро и грязно (при условии, что ваши данные находятся в столбцах A и B).
Sub CleanData()
Dim objDict As Object
Dim arr As Variant
Dim cll As Range
Dim lng As Long
Dim str As String
Dim lRow As Long, lCol As Long
Set objDict = CreateObject("System.Collections.ArrayList")
For Each cll In Range("B2", Range("B" & Rows.Count).End(xlUp))
str = Replace(Left(cll.Value, Len(cll.Value) - 1), """", "")
arr = Split(str, ";")
For lng = LBound(arr) To UBound(arr)
If Not objDict.Contains(CStr(arr(lng))) Then objDict.Add CStr(arr(lng))
Next
Next
Range("C1").Resize(, objDict.Count) = objDict.toarray()
With ActiveSheet
lCol = .UsedRange.Columns(.UsedRange.Columns.Count).Column
lRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
End With
Range(Range("C2"), Cells(lRow, lCol)).Formula = "=IF(ISNUMBER(FIND(C$1,$B2)),1,0)"
Range(Range("C2"), Cells(lRow, lCol)).Value = Range(Range("C2"), Cells(lRow, lCol)).Value
For lng = 3 To lCol
Cells(1, lng).Value = "is" & Application.Proper(Cells(1, lng))
Next
Columns(2).Delete
End Sub