我有一个工作簿,其中有一个包含大量数据的工作表。 我的目标是创建一个宏,在单独的工作表中插入公式以复制第一个工作表中的数据。让我们调用第一张“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错误我不清楚为什么会发生。我可以定义一个字符串变量并为它设置完全相同的值,并且没有错误。所以这可能是我猜的那个公式吧?
答案 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”
最好的问候