【发布时间】:2018-05-30 07:16:52
【问题描述】:
我对 VBA 还是很陌生,但一直在使用 Excel。我创建了一个公式,它完全符合我的需要:在单元格中找到倒数第 N 个单词(主要是倒数第 2 个或倒数第 3 个)。我认为我的主要问题是如何将公式应用于一系列单元格而不覆盖单元格以及如何在 VBA 中使用 excel 公式。我使用的Excel公式如下
=TRIM(LEFT(RIGHT(" "&SUBSTITUTE(TRIM(A1)," ",REPT(" ",60)),180),60))
这可能不是最有说服力的方式,但它在 Excel 中运行良好。将数字 180 更改为 60 将给出最后一个单词,120 将给出最后一个单词,依此类推。但是在 VBA 中,它给出了第一个语法错误,当我让它在没有参数的情况下运行并且只使用 TRIM(A1) 时,它会覆盖单元格。我使用的代码如下(仅引用A1进行测试):
reportsheet.Range("A1").Formula = "=TRIM(LEFT(RIGHT(" " & SUBSTITUTE(TRIM(A1)," " ,REPT(" ",60)),180),60))"
我的宏从 Sheet1 搜索并提取特定数据到 Sheet2。现在我想将这个(或类似的)公式应用于它提取到 Sheet2 的数据。我尝试了很多不同的东西,从使用 VBA 自己的修剪到制作完全自定义的函数。似乎都不起作用,我认为这是对 Excel 公式和 VBA 如何协同工作的误解。
此外,我正在尝试找到一种方法来查找单元格中唯一的数字并删除其他所有内容。对此的任何帮助也将不胜感激。
编辑:抱歉,我提供的代码有误,在这两种情况下它都应该引用 A1。
【问题讨论】:
-
尝试在 VBA 公式字符串中用单引号更改双引号。
-
您在 vba 中的语法发生了变化。你必须用“”'替换你的正常函数中的“,否则vba认为你的字符串结束了,而不是你真的想写下一个”。所以试试这个:reportsheet.Range("A1").Formula = "=TRIM(LEFT(RIGHT("" "" & SUBSTITUTE(TRIM(A20),"" "" ,REPT("" "",60)) ,180),60))""
-
谢谢你们。但是,它仍然会覆盖单元格的内容,而不是应用公式。我还有什么遗漏的吗?
-
哪个单元格的内容?
A20应保持不变,A1应显示您提取的单词。 -
真的很抱歉,我搞错了。我正在测试的代码在这两种情况下都有 A1。
标签: vba excel excel-formula