VBA修剪函数Excel与工作表函数的等效

VBA修剪函数Excel与工作表函数的等效,vba,excel,trim,Vba,Excel,Trim,我知道修剪函数作为工作表函数和作为VBA函数返回不同的结果: 工作表函数用于删除文本字符串中的所有空格,但单词之间的单个空格除外 而VBA函数只删除前导空格和尾随空格。 有没有一种方法可以在没有自定义VBA函数的情况下,通过工作表函数模拟VBA行为 工作表函数用于删除文本字符串中的所有空格,但单词之间的单个空格除外 不,这不是完全正确的:工作表修剪函数不会删除不间断空格字符。要删除不间断空格字符,可以使用另一个名为CLEAN的函数 如果要在VBA中使用工作表函数Trim,则可以这样使用它 App

我知道修剪函数作为工作表函数和作为VBA函数返回不同的结果:

工作表函数用于删除文本字符串中的所有空格,但单词之间的单个空格除外 而VBA函数只删除前导空格和尾随空格。 有没有一种方法可以在没有自定义VBA函数的情况下,通过工作表函数模拟VBA行为

工作表函数用于删除文本字符串中的所有空格,但单词之间的单个空格除外

不,这不是完全正确的:工作表修剪函数不会删除不间断空格字符。要删除不间断空格字符,可以使用另一个名为CLEAN的函数

如果要在VBA中使用工作表函数Trim,则可以这样使用它

Application.WorksheetFunction.Trim(Range("A1").Value)
在Excel工作表中,可以使用=修剪

工作表函数用于删除文本字符串中的所有空格,但单词之间的单个空格除外

不,这不是完全正确的:工作表修剪函数不会删除不间断空格字符。要删除不间断空格字符,可以使用另一个名为CLEAN的函数

如果要在VBA中使用工作表函数Trim,则可以这样使用它

Application.WorksheetFunction.Trim(Range("A1").Value)

在Excel工作表中,您可以使用=TRIM

在VBA中编写一个可在工作表中引用的函数

例如:

Public Function MyTrim(text As String) As String    
    MyTrim = Trim(text)    
End Function
然后在工作表中,假设要修剪的文本位于单元格A1中:

=MyTrim(A1)

您可以用VBA编写一个函数,以便在工作表中引用

例如:

Public Function MyTrim(text As String) As String    
    MyTrim = Trim(text)    
End Function
然后在工作表中,假设要修剪的文本位于单元格A1中:

=MyTrim(A1)

仅使用工作表函数,您可以对A1中的文本字符串尝试此操作:

=REPLACE(LEFT(A1,MATCH(2,1/(MID(A1,MMULT(ROW(INDIRECT("1:"&LEN(A1))),1),1)<>" "))),1,FIND(LEFT(TRIM(A1)),A1)-1,"")
由于缺少字符串反转工作表函数,查找最后一个非空格字符的位置并不简单

如果您不想使用VBA,则更简单的方法是使用数据|文本到包含以下选项的列:

固定宽度 无中断线 目的地:B1
这也会删除前导空格和尾随空格。

仅使用工作表函数,您可以对A1中的文本字符串尝试此操作:

=REPLACE(LEFT(A1,MATCH(2,1/(MID(A1,MMULT(ROW(INDIRECT("1:"&LEN(A1))),1),1)<>" "))),1,FIND(LEFT(TRIM(A1)),A1)-1,"")
由于缺少字符串反转工作表函数,查找最后一个非空格字符的位置并不简单

如果您不想使用VBA,则更简单的方法是使用数据|文本到包含以下选项的列:

固定宽度 无中断线 目的地:B1

这也会删除前导空格和尾随空格。

谢谢,但我需要的是一个只删除前导空格和尾随空格的工作表函数。知道吗?我想我可能知道你指的是什么。您是否碰巧提到了单元格中有一个由Alt+Enter创建的空格的情况?不,Siddharth,我有这样一个字符串:包含一个或多个空格的字符串。excel单元格中TRIMstring的结果将是包含一个或多个空格的字符串。VBA TRIM函数将返回带有一个或多个空格的字符串…很抱歉,但两个结果字符串在我看来是相同的?你有样品让我明白你的意思吗?如果您愿意,您可以上传一个excel文件,其中的字符串位于单元格A1中,这样我们就可以了解您的意思了?谢谢,但我需要的是一个工作表函数,它只删除前导和尾随空格。知道吗?我想我可能知道你指的是什么。您是否碰巧提到了单元格中有一个由Alt+Enter创建的空格的情况?不,Siddharth,我有这样一个字符串:包含一个或多个空格的字符串。excel单元格中TRIMstring的结果将是包含一个或多个空格的字符串。VBA TRIM函数将返回带有一个或多个空格的字符串…很抱歉,但两个结果字符串在我看来是相同的?你有样品让我明白你的意思吗?如果您愿意,您可以上传一个excel文件,其中的字符串位于单元格A1中,这样我们就可以了解您的意思了?谢谢Pete,但我正在寻找一个不使用自定义VBA函数的解决方案。雷格斯温:这是怎么被否决的?在我发布这个答案后,没有自定义VBA函数被编辑到问题上…@peteakey-我已经删除了我的反对票,因为澄清了Tanks Pete,但我正在寻找一个没有使用自定义VBA函数的解决方案。雷格斯温:这是怎么被否决的?在我发布这个答案后,Without custom VBA函数被编辑到了问题上…@PeteOakey-我已经删除了我的否决票,因为澄清+1很好!起初我认为MMULT是多余的,但仔细检查后,它就不再需要数组条目了。这是你的意图吗?@andyholaday:谢谢,是的,这正是你的意图。令人惊讶的是,尽管有额外的函数调用,MMULT版本的重新计算速度是Excel 2010中通过复制许多单元格测试的等效数组公式的两倍多——尽管在Excel 2003中似乎没有任何差异。+1很好!起初我认为MMULT是多余的,但经过仔细检查,它不再需要
数组项。这是你的意图吗?@andyholaday:谢谢,是的,这正是你的意图。令人惊讶的是,尽管有额外的函数调用,但MMULT版本的重新计算速度是Excel 2010中通过复制许多单元格测试的等效数组公式的两倍多——尽管在Excel 2003中似乎没有任何差异。