Visual Basic Excel宏

Visual Basic Excel宏,excel,vba,Excel,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。这可以满足您的要求,但它是一个子系统,因为您无法使用函数编辑工作表值 Public Sub multiply()

我想在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。

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

 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

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

 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

您不需要使用函数,只需使用以下子函数:

在下面,您可以将所有*列A*值进行倍增:

考虑到65563个单元格不是一个好主意,我建议您使用下面的子窗口来计算行数并减少内存使用

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

您不需要使用函数,只需使用以下子函数:

在下面,您可以将所有*列A*值进行倍增:

考虑到65563个单元格不是一个好主意,我建议您使用下面的子窗口来计算行数并减少内存使用

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

为什么不把你选择的数字相乘,让它更通用一些呢

Sub MultiplyByFive()
    Dim cl As Range

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

这样可以避免硬编码。

为什么不将所选数字相乘,使其更通用一些:

Sub MultiplyByFive()
    Dim cl As Range

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

通过这种方式,您可以避免硬编码。

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

1使用特殊粘贴的手动方法-乘法

要将值的范围增加5倍,请执行以下操作:

  • 在任何空白单元格中输入5
  • 选择单元格,然后选择“编辑、复制”
  • 选择值的范围(示例中的A列),然后选择“编辑,粘贴特殊”
  • 选择“倍增”选项并单击“确定”
  • 删除包含5的单元格
  • 2使用特殊粘贴的代码-乘法

    使用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
    
    Sub-psMultiply()
    ' http://www.vbaexpress.com/kb/getarticle.php?kb_id=47
    将y调整为“乘数值”,用户定义
    Dim x作为范围“只是变量的空白单元格
    将z调暗为要使用的范围选择
    设置z=选择
    y=Application.InputBox(“输入选择乘数:”_
    标题:=“选择乘数”,默认值:=10,类型:=1)
    设置x=单元格(行数,“A”)。结束(xlUp)。偏移量(1)
    如果y=0,则退出子菜单“取消”按钮将=0,因此取消
    如果x为“”,则
    出口接头
    其他:x.值=y
    x、 抄袭
    z、 粘贴特殊粘贴:=xlPasteAll,操作:=xlMultiply
    Application.CutCopyMode=False“终止复制模式”
    如果结束
    x、 ClearContents'恢复正常
    端接头
    
    您实际上不需要宏来执行此操作-尽管如果您确实想使用VBA,您可以完全避免耗时的循环

    1使用特殊粘贴的手动方法-乘法

    要将值的范围增加5倍,请执行以下操作:

  • 在任何空白单元格中输入5
  • 选择单元格,然后选择“编辑、复制”
  • 选择值的范围(示例中的A列),然后选择“编辑,粘贴特殊”
  • 选择“倍增”选项并单击“确定”
  • 删除包含5的单元格
  • 2使用特殊粘贴的代码-乘法

    使用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
    
    Sub-psMultiply()
    ' http://www.vbaexpress.com/kb/getarticle.php?kb_id=47
    将y调整为“乘数值”,用户定义
    Dim x作为范围“只是变量的空白单元格
    将z调暗为要使用的范围选择
    设置z=选择
    y=Application.InputBox(“输入选择乘数:”_
    标题:=“选择乘数”,默认值:=10,类型:=1)
    设置x=单元格(行数,“A”)。结束(xlUp)。偏移量(1)
    如果y=0,则退出子菜单“取消”按钮将=0,因此取消
    如果x为“”,则
    出口接头
    其他:x.值=y
    x、 抄袭
    z、 粘贴特殊粘贴:=xlPasteAll,操作:=xlMultiply
    Application.CutCopyMode=False“终止复制模式”
    如果结束
    x、 ClearContents'恢复正常
    端接头
    
    非常感谢。我可以用你的“sub”覆盖我的实际函数吗?或者我必须用另一种方式实现它吗?删除整个函数,复制并粘贴这些代码,将光标放在你想要执行的每个sub上,然后执行代码。请记住,您的值必须在A列中。如果这些值在不同的列中,请使用其他列编辑A。+1。建议使用
    Sub
    而不是
    函数
    并避免使用“硬编码”值:)非常感谢。我可以用你的“sub”覆盖我的实际函数吗?或者我必须用另一种方式实现它吗?删除整个函数,复制并粘贴这些代码,将光标放在你想要执行的每个sub上,然后执行代码。请记住,您的值必须在A列中。如果这些值在不同的列中,请使用其他列编辑A。+1。建议使用
    Sub
    而不是
    函数
    ,并避免使用“硬编码”值:)+1:)但有一项错误处理建议。在
    err:
    中放置一个消息框,以显示错误消息,否则错误处理毫无意义,因为用户将不知道代码是否存在于以下两种情况之间:)+1:)但是有一个关于错误处理的建议。在
    err:
    中放置一个消息框以显示错误消息,否则错误处理毫无意义,因为用户不知道代码是否存在于两者之间:)我不建议使用
    Selection
    不幸的是,Excel不够聪明,无法理解
    Selection
    是什么:)@SiddharthRout-有趣。你能举例说明你的意思吗?当然可以。根据Excel
    选择
    表示最后选择的内容。它也可以是一个形状。那么如果美国