Visual Basic Excel宏

时间:2012-04-14 11:17:58

标签: excel excel-vba vba

我想在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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 below来计算行数并减少内存使用量。

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

答案 2 :(得分:1)

你实际上并不需要一个宏 - 虽然如果你想使用VBA,你可以完全避免耗时的循环

<强> 1 Manual Method using Paste Special - Multiply

来自walkenbach

将值的范围增加5倍:

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

    <强> 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
    

答案 3 :(得分:0)

为什么不通过乘以你选择的数字来使它更通用:

Sub MultiplyByFive()
    Dim cl As Range

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

这样就可以避免65536硬编码。