如何使用VBA在Excel中自动填充单元格?

4

我有一些数据在第一列,紧随其后的是一些计算字段,我想使用与第一行相同的规则自动填充其余行。

输入/计算数据的总行数和列数已知,我希望有一个适用于这些数据的工作示例:

  |  A  |  B  |    C   |    D   |      E     |
----------------------------------------------
1 |  3  |  1  | =A1+B1 | =A1*B1 | =sum(C1:D1)|
2 |  4  |  4  |        |        |            |
3 |  5  | 23  |        |        |            |
4 | 42  |  4  |        |        |            |
5 |  7  |  4  |        |        |            |

真实数据通常有10K+行和30+列。当我尝试手动操作时,有时会出现错误提示选择区域过大。我之所以提到这一点是因为通用解决方法可能无法使用VBA,但如果我知道如何自动填充此示例,我将根据需要逐列执行。Excel的版本是2000,这不是我的错 :)

4个回答

6
sub copydown()
    Range("c1:e" & Range("a" & activesheet.rows.count).End(xlUp).Row).FillDown
end sub

这看起来很有前途,但我明天得在工作中试一下才能确定。 - Lipis
3
在Excel 2003之后的版本中,工作表中可能会有多达一百万个行,因此可能会使用 Range("c1:e" & Range("a" & activesheet.rows.count).End(xlUp).Row).FillDown - Our Man in Bananas
@Philip:确实更好。+1 - iDevlop

1

虽然很基础,但它应该能给你提供一些构建的东西,并且它可以在Excel 2003中运行(我拥有的最老版本)。

Option Explicit

Public Sub CopyFormulaeExample()

    On Error GoTo Handle_Exception

    Dim lastRow As Long
    Dim wrkSheet As Excel.Worksheet

    'Book and sheet names hard-coded for this example
    Set wrkSheet = Application.Workbooks("Book1").Worksheets("Sheet1")

    'Get the index of the last row used
    lastRow = wrkSheet.UsedRange.End(xlDown).Row

    'Copy the cells containing the formulae; also hard-coded for this example
    Range("C1:E1").Select
    Selection.Copy
    'Paste the selection to the range of interest
    Range("C2:E" + CStr(lastRow)).PasteSpecial xlPasteAll

    'Alternative approach
    Range("C1:E1").Copy Range("C2:E" + CStr(lastRow))

    'Release memory and exit method
    Set wrkSheet = Nothing
    Exit Sub

Handle_Exception:

    Set wrkSheet = Nothing
    MsgBox "An error has been found: " + Err.Description

End Sub

这看起来也很不错,我也会尝试一下。 - Lipis
完全没有问题。但要注意硬编码的“a65000”,我可能错了,但我认为这在所有情况下都不起作用。在2003年,最大行数为65,536(而不是65,000),而在2007年,则超过一百万。 - d..
谢谢d。我知道我的最后一行在哪里,所以我不必担心它。最后,我不得不使用一个for循环来处理列,因为在实际文档中我遇到了“选择过大”的问题。 - Lipis

1

使用复制向下(Ctrl-D)功能。

选择单元格c1-e1,然后一直向下选择(如果您有10,000行数据,则所选单元格范围为c1-e10000)。

按下Ctrl-D。

这将把单元格内容(您的公式)复制到其下面的所有单元格中。

http://www.google.com/search?q=using+excel+ctrl-d


您的原始帖子没有说明您是如何手动完成的,因此我尝试为您提供一种替代方案,不需要在每个文档修订中包含VBA代码。很抱歉我的建议没有帮助到您。 - Curtis Patrick

-2
以下是我做的方式,当时就是这样 :)
Ctrl+C
<--
Ctrl+Shift+Down
-->
Ctrl+Shift+Up
Ctrl+V

在我看来,这似乎是最有效的方法。你可以将其封装成宏,并分配一个方便的键绑定。


我知道如何用许多不同的方法解决这个问题...但通常不是我来处理这些文件。我想要一个通用的解决方案,并提供使用VBA代码的工作示例,使用硬编码值来处理行/列。 - Lipis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接