如果单元格包含一个(或多个)Chr(10)字符但没有其他字符,如何删除它?

时间:2017-01-12 14:50:02

标签: vba excel-vba excel

我有一个小脚本可以完成我需要它做的事情,但我担心在某个时候单元格中会有超过4个字符,我不想删除它。我想采用的逻辑如下:

如果BB1:BB10中的任何单元格仅包含Chr(10),则将单元格的内容向上移动一个单元格。像这样的东西

Public Sub CheckHisMethod()
    Dim i As Integer
    i = 1
    For i = 10 To 1 Step -1
        If Excel.ActiveSheet.Range("BB" & i).Value = Chr(10) Then        ' or =vblf or =chr$(10)
            Excel.ActiveSheet.Range("BB" & i).Delete Shift:=xlUp
        End If
    Next i
    MsgBox "Done"
End Sub

但是......我不想从每个单元格中删除Chr(10),我只想删除单元格,如果单元格只包含Chr(10),则将单元格向上移动一个单元格。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

请尝试以下方法。它会删除所有CHR(10),然后检查结果字符串的长度是否为0,表示单元格中的所有字符都是CHR(10)

Public Sub CheckHisMethod()
    Dim i As Integer
    i = 1
    For i = 10 To 1 Step -1
        If Len(Replace(Excel.ActiveSheet.Range("BB" & i).Value,Chr(10),"")) = 0 Then        ' or =vblf or =chr$(10)
            Excel.ActiveSheet.Range("BB" & i).Delete Shift:=xlUp
        End If
    Next i
    MsgBox "Done"
End Sub

答案 1 :(得分:1)

我亲自使用正则表达式 - 它可能比其他字符串操作快得多:

'Add a reference to Microsoft VBScript Regular Expressions 5.5
Public Sub CheckHisMethod()
    Dim i As Integer
    With New RegExp
        .Pattern = "^[\n]+$"
        .MultiLine = True
        For i = 10 To 1 Step -1
            If .Test(Excel.ActiveSheet.Range("BB" & i).Value) Then
                Excel.ActiveSheet.Range("BB" & i).Delete Shift:=xlUp
            End If
        Next i
    End With
    MsgBox "Done"
End Sub