Arrays 使用Application.Selection和Application.InputBox将两列相乘

Arrays 使用Application.Selection和Application.InputBox将两列相乘,arrays,function,excel,vba,Arrays,Function,Excel,Vba,对VBA非常陌生,希望了解更多。我正在尝试一些我可以在电子表格中使用公式轻松完成的事情,但我想学习如何编写代码 我基本上是想告诉用户选择两个长度相同的单元格区域,然后将它们相乘以返回一个值。出于我使用它的目的,我在计算股票的市场价值,给出市场价格和股票数量 我已经设置好了,但我不知道如何将它们相乘或返回值 子计算EMV() 变暗Rng As范围 变暗Rng2 As范围 设置Rng=应用程序。选择 设置Rng=Application.InputBox(“选择所有市场价值”,“MV计算器”,类型:=

对VBA非常陌生,希望了解更多。我正在尝试一些我可以在电子表格中使用公式轻松完成的事情,但我想学习如何编写代码

我基本上是想告诉用户选择两个长度相同的单元格区域,然后将它们相乘以返回一个值。出于我使用它的目的,我在计算股票的市场价值,给出市场价格和股票数量

我已经设置好了,但我不知道如何将它们相乘或返回值

子计算EMV()

变暗Rng As范围 变暗Rng2 As范围

设置Rng=应用程序。选择 设置Rng=Application.InputBox(“选择所有市场价值”,“MV计算器”,类型:=8)

变暗rng3 As范围

设置rng3=应用程序。选择 设置rng3=Application.InputBox(“选择所有市场价值”,“MV计算器”,类型:=8)

对于Rng中的每个Rng2

我是否缺少一些大的(基本上)东西,比如数组或者我需要编写一个函数


提前感谢。

首先,由于您的范围需要相同的大小,因此如果两个范围不相等,或者其中一个范围的宽度超过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))
调试。打印结果
接下来我
端接头

我应该提到的是,我试图为每个单元格*单元格乘法返回一个值。对于初学者的问题,我深表歉意,但是“下一步出错恢复”到底意味着什么?这是一种错误处理。请看这里: