vba excel可变行数的拖动公式

时间:2013-07-29 12:26:23

标签: vb.net excel

我有一个excel表,我使用VB程序填充。输出表可以具有可变数量的行但具有6列(A:F)。现在我希望列G具有列A中所有行的hex2dec。这是一个示例:假设列A有400行(A1:A400)然后我希望G1:G400具有值HEX2DEC(A1:A400)。但这只是行可以变化的一个例子。到目前为止我有这个代码:

Sub DataMod()

Dim i As Long, R3 As Long
R3 = 1

For i = 1 To sheet.UsedRange.Rows.Count
sheet.Cells(i, 7).Formula = "=HEX2DEC" & sheet.Cells(R3, 1)
R3 = R3 + 1
Next i

End Sub

但它不起作用。

2 个答案:

答案 0 :(得分:1)

试试这个:

Sub DataMod()

   ' Get the number of rows used in Column A:
   Dim NumRows as Long
   NumRows = Range("A1").End(xlDown).Row

   ' Put the formulas in Column G all at once:
   Range("G1:G" & NumRows).FormulaR1C1 = "=Hex2Dec(RC1)"    

End Sub

答案 1 :(得分:1)

查看您的HEX2DEC公式字符串

  • 它不包含必要的()
  • Cells()将返回目标单元格的值,而不是其地址(即结果为=HEX2DEC(1234)而不是=HEX2DEC(A1) - 这可能是也可能不是问题
  • 您可以使用变量i代替R3,它们都以相同的增量从相同的起点开始增量

我建议使用FormulaR1C1,你没有变种

Sub DataMod()
Dim C As Range

    For Each C In ActiveSheet.UsedRange.Columns(1).Cells
        C(1, 7).FormulaR1C1 = "=HEX2DEC(RC[-6])"
    Next C

End Sub

UsedRange的危险在于它可能包含任何标题行,因此您可能希望通过在触发Sub()并使用Selection对象之前手动选择输入范围来解决此问题,例如< / p>

For Each C In Selection.Columns(1).Cells