有公式可以删除最后一个字符(可能会多一个)右边的所有字符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