使用vba中的公式比较单元格,并在另一个单元格中input结果

我将使用VBA中的公式与数据列进行比较,如果find匹配,则将一些数据从一个表格input到另一个表格。 我在第一行使用了一个公式,这个工作我得到了预期的结果,我想自动化它,因为这将是报告中其他自动化的一部分。 我有一些代码,它进入一个列标题,然后将sumif函数应用到整个列,但我得到的结果一直下来,这是第一行的结果。

Sub ImportCosting() Dim z As Workbook Dim x As Workbook Set x = Workbooks.Open("C:\Documents\Reports\MEP.xlsx") With Workbooks("MEP") Worksheets("DynamicReport").Range("P5").Value = "Budget" Worksheets("DynamicReport").Range("Q5").Value = "Forecast" End With Set z = Workbooks.Open("C:\Documents\Reports\Budget.xlsx") With x.Worksheets("DynamicReport") lastRow = .Cells(Rows.Count, 5).End(xlUp).Row For Each rng In .Range("P6:P" & lastRow) rng.Formula = "=SUMIF('[Budget.xlsx]DynamicReport'!$C:$C,$B6,'[Budget.xlsx]DynamicReport'!H:H)" rng.Value = rng.Value Next rng End With End sub 

希望我已经正确地解释了这个问题。 任何人都可以告诉我哪里出了问题,以及如何得到它,所以sumif函数应用于每一行,而不是重复第一行的结果。

谢谢

我不确定,但我想你想把B6换成rng.row

我猜你在rng的每个单元格里都会得到相同的结果,因为你把B6作为总和的标准,所以把它改成B列中相应的行号,这样你就可以得到想要的结果。

改变这个:

 rng.Formula = "=SUMIF('[Budget.xlsx]DynamicReport'!$C:$C,$B6,'[Budget.xlsx]DynamicReport'!H:H)" 

对此

 rng.Formula = "=SUMIF('[Budget.xlsx]DynamicReport'!$C:$C,$B" & rng.Row & ",'[Budget.xlsx]DynamicReport'!H:H)" 

请尝试下面

 Sub ImportCosting() Dim z As Workbook Dim x As Workbook Set x = Workbooks.Open("C:\Documents\Reports\MEP.xlsx") With Workbooks("Bank.xlsx") Worksheets("DynamicReport").Range("P5").Value = "Budget" Worksheets("DynamicReport").Range("Q5").Value = "Forecast" End With Set z = Workbooks.Open("C:\Documents\Reports\Budget.xlsx") With x.Worksheets("DynamicReport") lastRow = .Cells(Rows.Count, 5).End(xlUp).Row '"E" For Each Rng In .Range("P6:P" & lastRow) Rng.Formula = "=SUMIF([Budget.xlsx]DynamicReport!$C:$C,[Budget.xlsx]DynamicReport!$B$" & Rng.Row & ",[Budget.xlsx]DynamicReport!H:H)" 'Rng.Value = Application.WorksheetFunction.SumIf(z.Worksheets("DynamicReport").Range("C:C"), z.Worksheets("DynamicReport").Range("B" & Rng.row), z.Worksheets("DynamicReport").Range("H:H")) Rng.Value = Rng.Value Next Rng End With End Sub