VBA子程序填写公式栏

我有一个当前的小组,我以某种方式组织数据,甚至在工作表的第一行中input一个公式,但我遇到的问题是希望它能够调整多远,以填补公式基于相邻列的空/非空状态。 例如,每次运行一个报表时,我都会得到一个不可预知的数量的返回logging,这些logging会填充A列中的行,但是,由于我想从返回的logging中提取string到不同的列中,因此我必须input公式在接下来的三列(B,C和D)中每次迭代。 有没有办法插入一行来评估列A中不是空白的行数,然后填写列B,C和D中的公式到最后一行? (我知道,一旦在第一行input信息,表格会自动执行此操作,但由于逻辑原因,我不能使用表格)。

我填写公式B列2中的公式的当前代码是:

Range("B2").Select ActiveCell.FormulaR1C1 = "=MID(RC[-1],FIND(""By:"",RC[-1])+3,22)" 

谢谢!

你实际需要的公式是

 =IF(A2="","",MID(A2,FIND("By:",A2)+3,22)) 

代替

 =MID(A2,FIND("By:",A2)+3,22) '"=MID(RC[-1],FIND(""By:"",RC[-1])+3,22)" 

这将检查单元格A是否有任何内容,然后“ 相应

此外,Excel还允许您一次input范围内的公式。 所以如果你想要公式进入单元格, A1:A10 ,那么你可以使用这个

 Range("A1:A10").Formula = "=IF(A2="","",MID(A2,FIND("By:",A2)+3,22))" 

现在我们如何确定10 ? 即最后一行。 简单

 Sub Sample() Dim ws As Worksheet Dim lRow As Long '~~> Change the name of the sheet as applicable Set ws = ThisWorkbook.Sheets("Sheet1") With ws '~~> Find Last Row in Col A lRow = .Range("A" & .Rows.Count).End(xlUp).Row .Range("B2:B" & lRow).Formula = "=IF(A2="""","""",MID(A2,FIND(""By:"",A2)+3,22))" End With End Sub 

有关如何查找最后一行的更多信息

您可以使用它来根据列A填充列B:D.

 Range("B2:D" & Range("A" & Rows.Count).End(xlUp).Row).Formula = _ "=MID($A2,FIND(""By:"",$A2)+3,22)"