在具有不同偏移量的公式中递增单元格引用 - Excel 宏

Incrementing cell reference in a formula with varying Offsets - Excel Macro

我正在尝试创建一个 excel 宏,它涉及在两个工作簿(比如 wb1 和 wb2)之间复制数据。

在 wb2 中,我想将某个公式分配给特定列的一系列单元格。所以公式中引用的wb1的单元格要自增

F1(wb2) = COUNTIF(range in wb1,contidion)*A1(wb1)*B1(wb1)
F5(wb2) = COUNTIF(range in wb1,condition)*A2(wb1)*B2(wb1)
.
.
.
F50(wb2)= COUNTIF(range in wb1,condition)*A10(wb1)*B10(wb1)

我如何使用 excel 宏实现此目的?

将一个工作簿中的值复制到另一个工作簿中并不太困难,但我不清楚您为什么指示目标单元格(例如 wb2 上的 F5)已经有值。如果要将值复制到这些目标单元格,它将替换那里已有的数据。这是一个进行复制的宏。此代码假定 book1 和 book2 已经打开。代码从book1中的第一个作品sheet复制数据,并把它放在book2的第一个sheet中。

Sub copy_cells()
    Dim wb1 As Workbook
    Dim wb2 As Workbook
    Dim row As Integer
    
    Set wb1 = Workbooks("book1.xlsm")
    Set wb2 = Workbooks("book2.xlsm")
 
    For row = 1 To 10
        wb2.Worksheets(1).Cells(row * 5, "F").Value = wb1.Worksheets(1).Cells(row, "D").Value
    Next
 
End Sub

这是一个简单的事情,可以组成字符串来为每个单元格构建公式。下面的代码将在 wb2 中构建这些公式:

F5: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A1*[Book1.xlsm]Sheet1!B1
F10: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A2*[Book1.xlsm]Sheet1!B2
F15: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A3*[Book1.xlsm]Sheet1!B3
F20: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A4*[Book1.xlsm]Sheet1!B4
F25: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A5*[Book1.xlsm]Sheet1!B5
F30: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A6*[Book1.xlsm]Sheet1!B6
F35: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A7*[Book1.xlsm]Sheet1!B7
F40: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A8*[Book1.xlsm]Sheet1!B8
F45: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A9*[Book1.xlsm]Sheet1!B9
F50: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A10*[Book1.xlsm]Sheet1!B10

代码如下:

Sub copy_cells()
    Dim wb1 As Workbook
    Dim wb2 As Workbook
    Dim row As Integer
    
    Set wb1 = Workbooks("book1.xlsm")
    Set wb2 = Workbooks("book2.xlsm")
 
    For row = 1 To 10
        wb2.Worksheets(1).Cells(row * 5, "F").Formula = "=COUNTIF([Book1.xlsm]Sheet1!D1:D25,"">5"")*[Book1.xlsm]Sheet1!A" & row & "*[Book1.xlsm]Sheet1!B" & row
    Next
 
End Sub