Arrays 使用Application.Selection和Application.InputBox将两列相乘
对VBA非常陌生,希望了解更多。我正在尝试一些我可以在电子表格中使用公式轻松完成的事情,但我想学习如何编写代码 我基本上是想告诉用户选择两个长度相同的单元格区域,然后将它们相乘以返回一个值。出于我使用它的目的,我在计算股票的市场价值,给出市场价格和股票数量 我已经设置好了,但我不知道如何将它们相乘或返回值 子计算EMV() 变暗Rng As范围 变暗Rng2 As范围 设置Rng=应用程序。选择 设置Rng=Application.InputBox(“选择所有市场价值”,“MV计算器”,类型:=8) 变暗rng3 As范围 设置rng3=应用程序。选择 设置rng3=Application.InputBox(“选择所有市场价值”,“MV计算器”,类型:=8) 对于Rng中的每个Rng2 我是否缺少一些大的(基本上)东西,比如数组或者我需要编写一个函数Arrays 使用Application.Selection和Application.InputBox将两列相乘,arrays,function,excel,vba,Arrays,Function,Excel,Vba,对VBA非常陌生,希望了解更多。我正在尝试一些我可以在电子表格中使用公式轻松完成的事情,但我想学习如何编写代码 我基本上是想告诉用户选择两个长度相同的单元格区域,然后将它们相乘以返回一个值。出于我使用它的目的,我在计算股票的市场价值,给出市场价格和股票数量 我已经设置好了,但我不知道如何将它们相乘或返回值 子计算EMV() 变暗Rng As范围 变暗Rng2 As范围 设置Rng=应用程序。选择 设置Rng=Application.InputBox(“选择所有市场价值”,“MV计算器”,类型:=
提前感谢。首先,由于您的范围需要相同的大小,因此如果两个范围不相等,或者其中一个范围的宽度超过1列,您需要执行检查,要求用户“重试” 然后需要使用
For
循环对每个单元格进行乘法。这是我的密码。目前,它只将值返回到“调试/立即”窗口(在VBA中按Ctrl+G以查看它),因为我不知道您希望这些值实际去哪里,但这应该可以让您开始
Sub CalculateMV()
On Error Resume Next
Dim Rng1 As Range, Rng2 As Range
Dim RowCount As Long, i As Long
Dim Result As Double
Lbl_TryAgain1:
Set Rng1 = Application.InputBox("Select All Market Values, 1st Range", "MV Calculator", Type:=8)
If Rng1.Columns.Count > 1 Then
MsgBox "Each range must have a maximum of one column. Please try again.", vbExclamation
Set Rng1 = Nothing
GoTo Lbl_TryAgain1
End If
Lbl_TryAgain2:
Set Rng2 = Application.InputBox("Select All Market Values, 2nd Range", "MV Calculator", Type:=8)
If Rng2.Columns.Count > 1 Then
MsgBox "Each range must have a maximum of one column. Please try again.", vbExclamation
Set Rng2 = Nothing
GoTo Lbl_TryAgain2
ElseIf Rng1.Rows.Count <> Rng2.Rows.Count Then
MsgBox "Each range must have the same number of rows. Please try again.", vbExclamation
Set Rng2 = Nothing
GoTo Lbl_TryAgain2
End If
RowCount = Rng1.Rows.Count
For i = 1 To RowCount
Result = Val(Rng1.Cells(i, 1)) * Val(Rng2.Cells(i, 1))
Debug.Print Result
Next i
End Sub
子计算emv()
出错时继续下一步
变暗Rng1为范围,Rng2为范围
我和你一样长,我也一样长
结果是双倍的
Lbl_TryAgain1:
设置Rng1=Application.InputBox(“选择所有市场值,第一个范围”,“MV计算器”,类型:=8)
如果Rng1.Columns.Count>1,则
MsgBox“每个范围最多只能有一列。请重试。”,请使用感叹号
设置Rng1=无
GoTo Lbl_TryAgain1
如果结束
Lbl_TryAgain2:
设置Rng2=Application.InputBox(“选择所有市场价值,第二个范围”,“MV计算器”,类型:=8)
如果Rng2.Columns.Count>1,则
MsgBox“每个范围最多只能有一列。请重试。”,请使用感叹号
设置Rng2=无
GoTo Lbl_TryAgain2
ElseIf Rng1.Rows.Count Rng2.Rows.Count然后
MsgBox“每个区域必须有相同数量的行。请重试。”,请使用感叹号
设置Rng2=无
GoTo Lbl_TryAgain2
如果结束
RowCount=Rng1.Rows.Count
对于i=1的行计数
结果=Val(Rng1.Cells(i,1))*Val(Rng2.Cells(i,1))
调试。打印结果
接下来我
端接头
我应该提到的是,我试图为每个单元格*单元格乘法返回一个值。对于初学者的问题,我深表歉意,但是“下一步出错恢复”到底意味着什么?这是一种错误处理。请看这里: