如果我将其添加到单元格中并向下复制,则=LEFT(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".",""))))-1)
用于删除last
.
(可能有多个字符)右边所有字符的公式将起作用。
我不知道如何将公式添加到vba
如果只有一个,我有vba .
(待评估的细胞是在列A和输出是列E)当我添加代码TA的模块c.Formula = "=LEFT(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".",""))))-1)"
它突出在红色和误差Invalid Character
与|
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)"
上面的代码将公式应用于整个范围。公式将针对每一行进行调整,例如for的公式E2
将为=LEFT(A2,...)
,而for的公式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)"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句