有公式可以删除最后一个字符(可能会多一个)右边的所有字符vba的问题
公式=LEFT(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".",""))))-1)
to删除last
右侧的所有字符.
(可能会有更多的一个),如果我把它添加到一个单元格,并复制下来的作品。
我无法弄清楚如何将公式添加到vba
如果只有一个,我有vba .
(要评估的单元格在A列,输出到E列)当我添加代码模块时c.Formula = "=LEFT(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".",""))))-1)"
它突出显示红色,错误Invalid Character
with |
highligthed
谢谢
Sub NotWorking() Dim c As range Dim Lastrow As Long With Sheets("sheet1") Lastrow = .range("C" & .Rows.Count).End(xlUp).Row For Each c In .range("E2:E" & Lastrow) c.Formula = "=LEFT(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".",""))))-1)" Next .range("E1").Value = "Source" End With End Sub
第一个提示:
当你在VBA中使用公式中的引号时,你应该使用双重qoutes。 例如
代替
Range("E1").Formula="=IF(A1="test",1,2)"
你应该使用
Range("E1").Formula="=IF(A1=""test"",1,2)"
第二个提示:
应用公式时无需使用循环。 有一个更有效的方法来做到这一点。
接下来你的代码
For Each c In .range("E2:E" & Lastrow) c.Formula = "=LEFT(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".",""))))-1)" Next
给出E2
: =LEFT(A2,...)
公式,再给出E3
公式=LEFT(A2,...)
(注意在两个公式A2
)。 我想,这不是你所期望的。 改用这个:
.Range("E2:E" & Lastrow).Formula="=LEFT(A2,FIND(""|"",SUBSTITUTE(A2,""."",""|"",LEN(A2)-LEN(SUBSTITUTE(A2,""."",""""))))-1)"
以上代码将公式应用于整个范围。 公式将针对每一行进行调整,例如E2
公式将是=LEFT(A2,...)
,而E3
公式将是=LEFT(A3,...)
等等。
但是,如果您需要对整列E
(对于E2
: =LEFT(A2,...)
和对于E3
再=LEFT(A2,...)
)具有相同的公式 ,请使用绝对/混合引用$
符号):
.Range("E2:E" & Lastrow).Formula="=LEFT(A$2,FIND(""|"",SUBSTITUTE(A$2,""."",""|"",LEN(A$2)-LEN(SUBSTITUTE(A$2,""."",""""))))-1)"
除了@Simoco所做的点之外,你需要调整单元格引用以获得相同的效果,复制一个范围给你,因为Excel会自动为你调整(除非你使用绝对引用$
),而VBA赢得了“吨。
最简单的方法是使用单元格引用的R1C1
版本。
尝试这个
Sub Working() Dim rng As Range With Sheets("sheet1") Set rng = Range(.Cells(2, 5), .Cells(.Rows.Count, 3).End(xlUp).Offset(, 2)) End With rng.FormulaR1C1 = "=LEFT(RC1,FIND(""|"",SUBSTITUTE(RC1,""."",""|"",LEN(RC1)-LEN(SUBSTITUTE(RC1,""."",""""))))-1)" End Sub