0

我想在excel中有一个小宏。宏应该从 A1 中获取一个双数并将这个数字乘以 5 并将其返回到 A1 但我总是收到错误消息等。

到目前为止我的代码:

Function multiply()
Dim a As Long
For a = 1 To 65563
cell(a,3) = cell(a,3).Value * 5
next a
End Function

我以前没有使用过 VBA。

4

4 回答 4

3

这可以满足您的要求,但它是一个子项,因为您无法使用函数编辑工作表值

 Public Sub multiply()
    On Error GoTo err
    Dim val As Long
    val = ActiveSheet.Cells(1, 1).Value
    ActiveSheet.Cells(1, 1).Value = val * 5
    Exit Sub
 err:
 End Sub
于 2012-04-14T11:41:56.407 回答
1

你不需要使用函数,只需使用这些潜艇:

您可以在下面对所有 *列 A *值进行多重播放:

Sub example()
For a = 1 To 65563
Cells(a, 1).Value = Cells(a, 1).Value * 5
Next a
End Sub

考虑到 65563 CELLS 不是一个好主意,我建议您使用下面的 sub 来计算行数并减少内存使用量。

Sub example2()

Dim countrows As Long
   countrows = Range("A" & Rows.Count).End(xlUp).Row
For a = 1 To countrows
Cells(a, 1).Value = Cells(a, 1).Value * 5
Next a
End Sub
于 2012-04-14T11:59:41.710 回答
1

您实际上并不需要宏 - 尽管如果您确实想使用 VBA,您可以完全避免耗时的循环

1 Manual Method using Paste Special - Multiply

沃肯巴赫

要将值范围增加 5 倍:

  1. 在任何空白单元格中输入 5。
  2. 选择单元格并选择编辑、复制。
  3. 选择值的范围(在您的示例中为 A 列),然后选择“编辑”、“选择性粘贴”。
  4. 选择乘法选项,然后单击确定。
  5. 删除包含 5 的单元格

2 Code using Paste Special - Multiply

使用来自vbax的 Zack Barresse 的代码- 稍作修改

此代码使用用户输入的乘数更新所选范围

Sub psMultiply()
    ' http://www.vbaexpress.com/kb/getarticle.php?kb_id=47
    Dim y As Long 'The multiplier value, user-defined
    Dim x As Range 'Just a blank cell for variable
    Dim z As Range 'Selection to work with
    Set z = Selection
    y = Application.InputBox("Enter selection multiplier:", _
    Title:="Selection multiplier", Default:=10, Type:=1)
    Set x = Cells(Rows.Count, "A").End(xlUp).Offset(1)
    If y = 0 Then Exit Sub 'Cancel button will = 0, hence cancel
    If x <> "" Then
        Exit Sub
    Else: x.Value = y
        x.Copy
        z.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply
        Application.CutCopyMode = False 'Kill copy mode
    End If
    x.ClearContents 'Back to normal
End Sub
于 2012-04-15T04:50:12.870 回答
0

为什么不通过仅乘以您选择的数字使其更通用一点:

Sub MultiplyByFive()
    Dim cl As Range

    For Each cl In Selection
        cl = cl * 5
    Next cl
End Sub

这样可以避免65536硬编码。

于 2012-04-14T15:02:50.100 回答