首页 > 解决方案 > vba 删除逗号而不删除删除线

问题描述

如何在不删除删除线格式的情况下删除逗号

示例:C418、C419、C420、C421、C422、C423、C424
预期结果:C418 C419 C420 C421 C422 C423 C424
最终结果:C418、C419 C420 C421 C422 C423 C424

我正在检查该单元格是否包含删除线。通过使用该功能,我能够检测到它。但是一旦我尝试使用替换功能删除逗号并用空格替换逗号。删除线的格式将被删除,导致功能无法工作,从而导致不同的结果。

我想使用空格分隔符与另一个单元格匹配,以便之后可以拆分单元格值

If HasStrikethrough(BOMCk.Sheets("Filtered RO BOM").Range("B" & LCB)) = True Then
BOMCk.Sheets("Filtered RO BOM").Range("B" & LCB).Value = Replace(BOMCk.Sheets("Filtered RO BOM").Range("B" & LCB).Value, ",", "")
BOMCk.Sheets("Filtered RO BOM").Range("G" & LCB).Value = "strike-off"

ElseIf HasStrikethrough(BOMCk.Sheets("Filtered RO BOM").Range("B" & LCB)) = False Then
BOMCk.Sheets("Filtered RO BOM").Range("B" & LCB).Value = Replace(BOMCk.Sheets("Filtered RO BOM").Range("B" & LCB).Value, ",", "")

End If

Function HasStrikethrough(rng As Range) As Boolean
    Dim i As Long
    With rng(1)
        For i = 1 To .Characters.Count
            If .Characters(i, 1).Font.StrikeThrough Then
                HasStrikethrough = True
                Exit For
            End If
        Next i
    End With
End Function

标签: excelvba

解决方案


Range.Characters 仅在单元格值为 255 个字符或更少时才有效。

Range.Characters(i, 1).Delete将删除逗号。删除时请确保从最后一个位置迭代到第一个位置。

Sub RemoveCommas(ByVal Target As Range)
    If Target.Characters.Count > 255 Then
        MsgBox "Range.Characters only works with String with 255 or less Characters", vbCritical, "String too long"
        Exit Sub
    End If
   Dim n As Long
   For n = Target.Characters.Count To 1 Step -1
        If Target.Characters(n, 1).Text = "," Then Target.Characters(n, 1).Delete
   Next
End Sub

推荐阅读