
'
Option Explicit
'
Sub abc()
Dim a, i, j, p, n, s, f, d, t(2)
a = [a1].CurrentRegion.Offset(1).Resize(, 1).Value
Set d = CreateObject("scripting.dictionary")
For i = 1 To UBound(a) - 1
p = InStr(a(i, 1), ")")
If p Then n = Val(Mid(a(i, 1), p + 1))
ReDim b(1 To 2, 1 To Len(a(i, 1)))
s = a(i, 1) & "?": f = 0
For j = 1 To Len(s) - 1
t(0) = Mid(s, j, 1)
If t(0) = "(" Then
f = 1
ElseIf t(0) = ")" Then
f = 0
Else
If Not IsNumeric(t(0)) Then
If Asc(t(0)) > 64 Then
t(2) = Mid(s, j + 1, 1)
If t(2) >= "a" And t(2) <= "z" Then
t(0) = t(0) & t(2)
j = j + 1
End If
b(1, j) = t(0)
t(1) = Val(Mid(s, j + 1))
If t(1) = 0 Then t(1) = 1
b(2, j) = t(1)
If f Then b(2, j) = b(2, j) * n
End If
End If
End If
Next
For j = 1 To UBound(b, 2)
If Len(b(1, j)) Then d(b(1, j)) = d(b(1, j)) + b(2, j)
Next
t(1) = vbNullString
For Each j In d.keys
If d(j) = 1 Then t(0) = vbNullString Else t(0) = d(j)
t(1) = t(1) & j & t(0)
Next
a(i, 1) = t(1): d.RemoveAll
Next
[b2].Resize(UBound(a) - 1) = a
End Sub