【问题标题】:Use VBA to remove leading and trailing blank spaces but keeping blanks within a string使用 VBA 删除前导和尾随空格,但在字符串中保留空格
【发布时间】:2023-03-07 04:04:01
【问题描述】:

我正在尝试清理和格式化从会计系统获得的一些数据集,并且我已经能够创建 VBA 代码以在特定列范围内使用 TRIM 或 CLEAN 函数。

问题是我需要在字符串中保留空格(可以是 2、3 或更多空格)但仍然删除前导/尾随空格,并且提到的函数将内部空格减少到 1。这不起作用对我来说,因为数据被用作在流程的进一步步骤中匹配其他信息的关键。请记住,前导/尾随空格可能是空格键的结果,任何其他显示为空格甚至包含换行符的字符,所以再一次,我希望所有这些删除但内部空格。字符串可以由字母数字字符组成。

我在 Private Sub 中使用它(代码是通过单击放置在工作表中的按钮来执行的)。

Dim rng1a As Range
Dim Area1a As Range
Set rng1a = Range("F2:F35001")

  For Each Area1a In rng1a.Areas
    Area1a.NumberFormat = "@"
    Area1a.Value = Evaluate("IF(ROW(" & Area1a.Address & "),CLEAN(TRIM(" & Area1a.Address & ")))")
  Next Area1a

示例(在 F2:F35001 范围内):

Original:  Sample  Text   for Review.     *(there are blanks after the string)
Result:Sample Text for Review.
Desired:Sample  Text   for Review.

我进行了几周的研究,但未能找到一种解决方案,既能保持内部空白“原样”,又能尽可能避免论坛中出现重复问题。提前感谢您的帮助。

【问题讨论】:

  • 欢迎来到本站!查看tourhow-to-ask page 了解更多关于提出问题以吸引高质量答案的信息。您可以edit your question 提供更多信息。
  • 您能否更好地说明您拥有的数据、您当前使用的代码发生了什么以及您希望发生什么?像`data 01`应该是data 01?如果空格是一个问题,请用更明显的字符替换,如!

标签: excel vba


【解决方案1】:

你可以用正则表达式做到这一点:

Option Explicit
Function trimWhiteSpace(s As String) As String
    Dim RE As Object

Set RE = CreateObject("vbscript.regexp")
With RE
    .Global = True
    .MultiLine = True
    .Pattern = "^\s*(\S.*\S)\s*"
    trimWhiteSpace = .Replace(s, "$1")
End With
End Function

正则表达式的解释

修剪前导和尾随空格

^\s*(\S.*\S)\s*

选项:区分大小写; ^$ 匹配换行符

$1

使用RegexBuddy创建

另一方面,如果您想避免使用正则表达式,并且您唯一的前导/尾随“空白”字符是 spacetablinefeedAND如果唯一的“内部”空白字符是space,您可以使用:

Function trimWhiteSpace(s As String) As String
    trimWhiteSpace = Trim(Replace(Replace([a1], vbLf, ""), vbTab, ""))
End Function

请注意,VBA Trim 函数(与工作表函数不同)仅删除前导和尾随空格,而内部空格保持不变。但如果您在需要保留的字符串中有tab,这将不起作用。

以上任何一个都可以合并到您的宏中。

【讨论】:

    【解决方案2】:

    您是否尝试过使用 LTRIM 函数删除前导空格,然后使用 RTRIM 删除尾部空格,从而使内部空格保持不变?

    根据您的描述,您不希望字符串中间出现 TAB 字符或回车符,因此您可以对它们进行替换:

    strSource = Replace(strSource, vbTab, "")
    strSource = Replace(strSource, vbCrLf, " ")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多