【问题标题】:Eliminate blank spaces in VBA消除VBA中的空格
【发布时间】:2020-07-29 18:23:04
【问题描述】:

我有一个从系统导出的标准工作表,当单元格没有信息时,系统会用空格填充它。 我使用一个变量来接收单元格值,然后检查是否有任何信息。 当有时,我使用 Trim 消除字符串两侧的空格,但是,当单元格中没有信息时,变量会收到一串空格,Trim 不起作用。 例子: 带有信息的单元格 - “1A90”。使用修剪 - “1A90” 没有信息的单元格 - “”。使用修剪-“”。 我想将结果转换为空或“”。 有人可以帮帮我吗?

【问题讨论】:

  • 总是有助于显示您现有的代码? Len(Trim(" ")) 返回0 所以也许这些不仅仅是空格?是从 Web 应用程序导出的吗?有时您会从 Web 导出中获得 Chr(160)(不间断空格字符),而不是空格。
  • TpContr = Trim(Cells(var, 11).value) 返回“”。如果我使用 len,它会返回 10。
  • 循环遍历问题单元格的值,并 debug.print 每个字符及其 ASCII 码 - 这将帮助您找出问题。
  • 对不起@TimWilliams,这是第一次提出问题,我仍然不知道如何在 cmets 中使用标签。
  • 您可以使用反引号来格式化小代码段,但如果您想添加多行,请编辑您的问题并将代码放在那里。

标签: excel vba trim


【解决方案1】:

选择要清理的范围并运行此子例程。

Sub CleanTrimCells_Evaluate()
SOURCE: www.TheSpreadsheetGuru.com/the-code-vault

Dim rng As Range
Dim Area As Range

'Weed out any formulas from selection
  If Selection.Cells.Count = 1 Then
    Set rng = Selection
  Else
    Set rng = Selection.SpecialCells(xlCellTypeConstants)
  End If

'Trim and Clean cell values
  For Each Area In rng.Areas
    Area.Value = Evaluate("IF(ROW(" & Area.Address & "),CLEAN(TRIM(" & Area.Address & ")))")
  Next Area
  
End Sub

【讨论】:

  • 这是否也会删除像 Chr(160) 这样的字符? AFAIK CLEAN 不会删除它们
  • 以上代码不会按原样删除 Chr(160),您可以在 Area.Value = Evaluate("IF ... 语句之前的 "Area" 循环中添加这一行 Cells.Replace Chr(160), ""
【解决方案2】:

我不知道这是否是最佳答案,但它确实有效。

Function limpa_espacos(texto As String)
For i = 1 To Len(texto)
    
    If Asc(Mid(texto, i, 1)) = 160 Then
        var_texto = ""
    Else
        var_texto = Mid(texto, i, 1)
    End If
    
     limpo = limpo & var_texto
Next i

limpa_espacos = limpo

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多