在vba excel中修正公式

我想创build一个macros来检查列的所有单元格,如果一个单元格的前两个字符是“BB”,那么我希望macros从单元格中提取三个字符,并将其粘贴到下一列,但相应的行。 但是if语句后面的公式不起作用。 这是我从那以后所做的:

Sub test() Dim lmid As String Dim srange, SelData, ExtBbFor As String Dim lastrow As Long Dim i, icount As Integer lastrow = ActiveSheet.Range("B30000").End(xlUp).Row srange = "G1:G" & lastrow SelData = "A1:G" & lastrow Range(srange).Formula = "=mid(E1,1,3)" For i = 1 To lastrow If InStr(1, LCase(Range("E" & i)), "bb") <> 0 Then Range("G" & i).Formula = "=mid("E & i", 4, 3)" End If Next i End Sub 

提前致谢

试试下面。 它会工作

 Range("G" & i).Value = Mid(Range("E" & i), 4, 3) 

如果单元格不限于7,那么你需要如下

 Range("G" & i).Value = "=Mid(E" & i & ", 3, " & Len(E & "& i & ") & ")" 

它会从第三个字符提取到单元格中的最后一个字符。

你的语法错了,你试图连接string,我想你的意思是使用:

 Range("G" & i).Formula = "=MID(E" & i & ",4,3)" 

根据你的代码,我认为这将做同样的事情,而不必循环或声明任何variables:

 Sub test() With Range("G1:G" & Cells(Rows.Count, 2).End(xlUp).Row) .FormulaR1C1 = "=IF(UPPER(LEFT(RC[-2],2))=""BB"",MID(RC[-2],4,3),"""")" .Value = .Value End With End Sub