Visual Basic Excel宏
我想在excel中有一个小宏。宏应该从A1中取一个双倍的数字,将这个数字乘以5,然后返回A1,但我总是收到错误消息等 我的代码到现在为止: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()
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选择
表示最后选择的内容。它也可以是一个形状。那么如果美国