Это заняло у меня целый день, но мне действительно удалось это сделать!
Спасибо @Harassed Dad!Я адаптировал ваш код, и результат выглядит следующим образом:
Функция:
Function WF_NEXT_CHAR(s As String) As String
Dim ASCII As Byte
Dim i As Integer
s = UCase(s)
ASCII = Asc(Right(s, 1))
If s = String(Len(s), "Z") Then
WF_NEXT_CHAR = "#"
Else
Select Case ASCII
Case 57 'Wrap Number at 9
ASCII = 65
Case 48 To 56, 65 To 89 '0 to 8 and A to Y
ASCII = ASCII + 1
Case 90 'Wrap Char at Z
ASCII = 49
For i = Len(s) To 1 Step -1
If Mid(s, i, 1) = "Z" Then
WF_NEXT_CHAR = Left(s, i - 1) & "0" & Right(WF_NEXT_CHAR, Len(s) - i)
Else
WF_NEXT_CHAR = Left(s, i - 1) & WF_NEXT_CHAR(Mid(s, i, 1)) & Right(WF_NEXT_CHAR, Len(s) - i)
Exit For
End If
Next
End Select
If Len(s) = 1 Then WF_NEXT_CHAR = Chr(ASCII)
If WF_NEXT_CHAR = "" Then WF_NEXT_CHAR = Left(s, Len(s) - 1) & Chr(ASCII)
End If
End Function
Sub (предполагается, что диапазоны находятся в столбце "A "):
Sub UHUUUUL_xD()
Const Del As String = " - "
Dim r As Long
Dim Rng As Variant
Dim i As String
For r = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If InStr(1, Cells(r, 1), Del) > 0 Then
Rng = Split(Cells(r, 1), Del)
Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) = IIf(IsNumeric(Rng(0)), "'", "") & Rng(0)
While i <> "#" And i <> Rng(1)
i = WF_NEXT_CHAR(Cells(Rows.Count, 2).End(xlUp))
Cells(Cells(Rows.Count, 2).End(xlUp).Row + 1, 2) = i
Wend
End If
Next
End Sub