通常,当您在 StackOverflow 中提出问题时,始终建议您提供一些代码(或您尝试过的代码):
https://stackoverflow.com/help/how-to-ask
不过,如果您认为输入应该来自一个单元格并返回到下一个单元格,这是另一种可能的解决方案:
Public Sub TestMe()
Dim sourceRange As Range
Dim resultArray As Variant
Set sourceRange = Worksheets(1).Range("A1")
resultArray = CharacterArray(sourceRange.Value2)
Dim cnt As Long
Dim result As String
Dim spaces As String
For cnt = (LBound(resultArray) + 1) To UBound(resultArray)
If resultArray(cnt) = resultArray(cnt - 1) Then
spaces = spaces & " "
result = result & spaces & resultArray(cnt) & vbCrLf
Else
spaces = vbNullString
result = result & resultArray(cnt) & vbCrLf
End If
Next cnt
sourceRange.Offset(0, 1) = result
Debug.Print result
End Sub
还有字符数组:
Function CharacterArray(value As String) As Variant
Dim cnt As Long
Dim result As Variant
Dim someVal As String
For cnt = 1 To Len(value)
someVal = Mid(value, cnt, 1)
If someVal Like WorksheetFunction.Rept("[^a-zA-Z0-9.]", 1) Then
If IsEmpty(result) Then
ReDim result(1)
Else
ReDim Preserve result(UBound(result) + 1)
End If
result(UBound(result)) = Mid(value, cnt, 1)
End If
Next cnt
CharacterArray = result
End Function
实际上,此解决方案最大的“问题”是您必须找到一种方法将A1 范围内的值拆分为一个数组。这是通过以下 3 行完成的,它们从新数组中删除新行:
For cnt = 1 To Len(value)
someVal = Mid(value, cnt, 1)
If someVal Like WorksheetFunction.Rept("[^a-zA-Z0-9.]", 1) Then
一旦你有了一个包含你需要的值的漂亮数组,你只需要像这样比较循环中的当前值和前一个值:
If resultArray(cnt) = resultArray(cnt - 1) Then
如果它们相同,则将spaces 增加 1:
spaces = spaces & " "