Excel 需要帮助制作删除超过7个字符的单元格的宏吗

Excel 需要帮助制作删除超过7个字符的单元格的宏吗,excel,vba,Excel,Vba,我是Excel新手,如果单元格包含超过7个字符,我很难找到宏来删除行。我知道我应该使用=len(a1)来获得长度,但是这种语言对我来说真的很古老 如果有人能帮我做宏,我将非常感激。假设数据在A列中,请尝试此操作: Sub DeleteRows() Dim r As Integer Let r = Range("A65536").End(xlUp).Row Application.ScreenUpdating = False Do Until r = 0

我是Excel新手,如果单元格包含超过7个字符,我很难找到宏来删除行。我知道我应该使用=len(a1)来获得长度,但是这种语言对我来说真的很古老


如果有人能帮我做宏,我将非常感激。

假设数据在A列中,请尝试此操作:

Sub DeleteRows()

    Dim r As Integer

    Let r = Range("A65536").End(xlUp).Row
    Application.ScreenUpdating = False
    Do Until r = 0
        If Len(Cells(r, 1)) > 7 Then Cells(r, 1).EntireRow.Delete
        Let r = r - 1
    Loop
    Let r = Empty
    Application.ScreenUpdating = True

End Sub    

只是为了好玩,我想我会给你另一个解决办法。我试过了,效果很好

Sub DeleteAbove7()

    Dim b1 As Boolean
    Dim i As Integer
    Dim r1 As Range
    Dim v1 As Variant

    v1 = Application.Transpose(ActiveSheet.Range("A1:A" _
         & Cells(Application.Rows.Count, 1).End(xlUp).Row).Value2)

    b1 = False
    For i = LBound(v1) To UBound(v1)
        If Len(v1(i)) > 7 Then
            If b1 Then
                Set r1 = Union(r1, Cells(i, 1))
            Else
                Set r1 = Cells(i, 1)
                b1 = True
            End If
        End If
    Next i

    r1.EntireRow.Delete

    'ActiveSheet.Range("B1:B" & UBound(v1)) = Application.Transpose(v1)

    Set r1 = Nothing
    Set v1 = Nothing

End Sub

超过哪个范围?你试过什么吗?您已经构建了什么?您是否只查看特定列?或者任何列?我只有一个列,在所有的范围内(或者说100k)。不,没有工作。当我的单元格向上移动时,我看到它做了一些事情,但是仍然有和以前一样多的7个以上字符的单词。你能确认这些单词在A列中,并且不是由公式推导出来的吗?此外,您还可以尝试注释屏幕上更新宏的行(行的开头有一个“)@tony,r是一个整数,因此不需要Let或=Empty语句。(您可以使用Let,只是可选的)。谢谢您,兰斯-我知道Let是可选的,但没有意识到整数项不需要=Empty。我建议您使用Range(“A”&rows.count)。end(xlUp)。Row。硬编码行数不是一种好的做法,因为它与Excel版本等不同。第二个代码为+1。你应该删除第一个,因为第二个是最重要的。正确使用rows.count,long而不是integer…这是完美的。行。我想用一个For-Each来做,但是你不能向后做,因此需要额外的过程。仅供参考,你不需要担心r1和v1设置为零。在子脚本的末尾,所有的局部变量都被释放(垃圾收集)。酷,我不知道。出于某种原因,我认为你总是必须这么做。我不记得是从哪里学的,也许是专业的Excel开发。在那里,他只是说显式终止对象是一种很好的做法,但他没有说这实际上是必要的。他使用的例子是一个全局变量。不管怎样,TMI,谢谢你的提示!
Sub DeleteAbove7()

    Dim b1 As Boolean
    Dim i As Integer
    Dim r1 As Range
    Dim v1 As Variant

    v1 = Application.Transpose(ActiveSheet.Range("A1:A" _
         & Cells(Application.Rows.Count, 1).End(xlUp).Row).Value2)

    b1 = False
    For i = LBound(v1) To UBound(v1)
        If Len(v1(i)) > 7 Then
            If b1 Then
                Set r1 = Union(r1, Cells(i, 1))
            Else
                Set r1 = Cells(i, 1)
                b1 = True
            End If
        End If
    Next i

    r1.EntireRow.Delete

    'ActiveSheet.Range("B1:B" & UBound(v1)) = Application.Transpose(v1)

    Set r1 = Nothing
    Set v1 = Nothing

End Sub