如何在列-VBA的单元格中的单词之前删除空白字符

时间:2018-04-05 20:39:48

标签: excel vba

所以目前在B列中,有些单元格在它们之前没有空格,但也有单元格。

例如:单元格B1只是“市场:”但是单元格B4,B5,B6,B10,B14等会有“_____总:”(__表示空格)

在“Total:”之前我需要写什么来删除5个空格?

我目前有:

    mos = Range("B:B")

    For Each x In mos
        xv = x.Value
        If Left(xv, 1) = "" Then xv = Right(xv, Len(xv) - 1)

    Next xv

这给了我一个错误。

请告诉我应该怎么做。

谢谢!

3 个答案:

答案 0 :(得分:2)

  1. 使用Trim$功能。 Trim函数删除多余的尾随和前导空格。 Trim$是一个类型化的函数,速度更快。
  2. 如下所示,使用Intersect表示只处理必要的行数而不是整个列B.
  3. 明确。将Option Explicit放在代码的顶部以强制变量声明并声明变量。并完全符合您正在使用的工作表。
  4. 如另一个答案中所述,有一些变体,例如LTrim$只是从左边(字符串的开头)和RTrim$删除,只是为了从右边(字符串的结尾)删除。
  5. 代码:

    Option Explicit
    Public Sub test()
    
        Dim mos As Range
        Dim x As Range
    
        With ActiveSheet                             'change to appropriate worksheetname
    
            Set mos = .Range("B:B")
    
            For Each x In Intersect(mos, .UsedRange)
                x = Trim$(x)
            Next x
    
        End With
    
    End Sub
    

    加成:

    有很多现有的函数写入“清理”字符串,删除所有“额外”的空格字符,即只留下单个内部空格。

    这是Henry Habermacher

    之一
    Public Function removeObsoleteWhiteSpace _
      (FromString As Variant) As Variant
      If IsNull(FromString) Then 'handle Null values
        removeObsoleteWhiteSpace = Null
        Exit Function
      End If
      Dim strTemp As String
      strTemp = Replace(FromString, vbCr, " ")
      strTemp = Replace(strTemp, vbLf, " ")
      strTemp = Replace(strTemp, vbTab, " ")
      strTemp = Replace(strTemp, vbVerticalTab, " ")
      strTemp = Replace(strTemp, vbBack, " ")
      strTemp = Replace(strTemp, vbNullChar, " ")
      While InStr(strTemp, "  ") > 0
        strTemp = Replace(strTemp, "  ", " ")
      Wend
      strTemp = Trim(strTemp)
      removeObsoleteWhiteSpace = strTemp
    End Function
    

    示例电话:

    Public Sub testing()
    
        Debug.Print removeObsoleteWhiteSpace("  my string    with a few      spaces    ")
    
    End Sub
    

答案 1 :(得分:1)

抱歉,没有意识到你的循环只是为了删除空格。

这就是我修剪空间的方式:

Sub trim()
Dim mos As Range

    Set mos = Range("B:B")
    mos.Value = Application.trim(mos)

End Sub

答案 2 :(得分:1)

为避免循环,您可以使用:

With Range("B1", Cells(Rows.Count, 2).End(xlUp))
    .Value = Evaluate("IF(" & .Address & "="""","""",TRIM(" & .Address & "))")
End With

也可以写成:

Replace()

Range("B1", Cells(Rows.Count, 2).End(xlUp)).Replace what:=" ", replacement:="", lookat:=xlPart 方法:

LTrim()

当然所有上述解决方案都假设您在每个单元格内容的开头只有额外的空格,或者它们将 trim (前两个解决方案)或消除(第三个)解决方案)其他空间

如果你真的需要消除前导空格(第一个非空白字符前面的空格)而保留所有其他空格,那么你必须循环并使用Dim cell As Range For Each cell In Range("B1", Cells(Rows.Count, 2).End(xlUp)) cell.Value = LTrim(cell.Value) Next VBA函数:

array.find