簡體   English   中英

如何刪除-VBA列的單元格中單詞之前的空白字符

[英]How to delete blank characters before word in the cell for the column -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

這給了我一個錯誤。

請讓我知道我該怎么辦。

謝謝!

  1. 使用Trim$函數。 Trim功能消除了多余的尾隨和前導空白。 Trim$是類型函數,速度更快。
  2. 如下所述,使用Intersect意味着僅處理必要數量的行,而不是整個B列。
  3. 要明確。 Option Explicit放在代碼的頂部,以強制聲明變量並聲明變量。 並完全確定要使用的工作表。
  4. 如另一個答案中所述,有一些變體,例如LTrim$只是從左側(字符串的開始)刪除,而RTrim$只是從右側(字符串的結尾)刪除。

碼:

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

抱歉,沒有意識到您的循環只是刪除空格。

這是我修剪空間的方式:

Sub trim()
Dim mos As Range

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

End Sub

為了避免循環,可以使用:

Dim myAddress As String
myAddress = "B1:B" & Cells(Rows.Count, 2).End(xlUp).Row
Range(myAddress) = Evaluate("IF(" & myAddress & "="""","""",TRIM(" & myAddress & "))")

也可以寫成:

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() VBA函數:

Dim cell As Range
For Each cell In Range("B1", Cells(Rows.Count, 2).End(xlUp))
    cell.Value = LTrim(cell.Value)
Next

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM