Excel VBA - 在每个单元格中循环遍历范围并设置公式

时间:2011-07-11 07:47:25

标签: excel excel-vba excel-formula vba

我有一个工作簿,其中有一个包含大量数据的工作表。 我的目标是创建一个宏,在单独的工作表中插入公式以复制第一个工作表中的数据。让我们调用第一张“Numbers1”和第二张“TidyNumbers1”。

在工作表“TidyNumbers1”中,我想循环遍历从A列到M和第1到60行的每个单元格。所以我有一个到目前为止看起来像这样的宏:

   Sub updateFormulasForNamedRange()
    Dim row, col, fieldCount As Integer
    colCount = 13
    RowCount = 60

    For col = 1 To colCount
        For row = 1 To RowCount
            Dim strColCharacter

            If col > 26 Then
                strColCharacter = Chr(Int((row - 1) / 26) + 64) & Chr(((row - 1) Mod 26) + 65)
            Else
                strColCharacter = Chr(row + 64)
            End If

            Worksheets("TidyNumbers1").Cells(row, col).Formula = "=IF(Numbers1!E" & col & "<>0;Numbers1!" & strColCharacter & row & ";"")"
        Next row
    Next col

End Sub

但是对于A列,第2行,该公式应该是这样的:

IF(Numbers1!E2<>0;Numbers1!A2;"")"

第A栏第3行的公式应如下所示:

IF(Numbers1!E3<>0;Numbers1!A3;"")"

B列中的公式,第2行应如下所示:

IF(Numbers1!E2<>0;Numbers1!B2;"")"

换句话说,公式查看列E中的值,行%是否为0,如果满足条件则复制它​​。

但是,我看到我需要用字母翻译我的整数变量Row,因为公式可能需要“A”而不是1.另外,如果我得到1004错误(应用程序定义或对象定义错误)只是尝试使用:

Worksheets("Numbers1").Cells(row, col).Formula = "=IF(Numbers1!E" & row & "<>0;Numbers1!" & col & row & ";"")"

我清楚地看到整数行应该翻译成字母,如果可能的话。或者,如果有人有任何其他可能有用的建议。此外,1004错误我不清楚为什么会发生。我可以定义一个字符串变量并为它设置完全相同的值,并且没有错误。所以这可能是我猜的那个公式吧?

2 个答案:

答案 0 :(得分:1)

以下是我以前的帖子,其中包含将列号转换为字母的功能,反之亦然:

VBA Finding the next column based on an input value

编辑:你的1004错误:尝试这样的事情:

  =IF(Numbers1!E" & row & "<>0,Numbers1!A" & row & ","""")"

(使用;代替,""使用基本字符串中的一个引号, 2使用"""" 引号)。

答案 1 :(得分:1)

使用Cells.Address函数获取单元格地址会不会更容易?

例如:

MsgBox Cells(1, 5).Address

显示“$ E $ 1”

最好的问候