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



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

我基本上想告诉用户选择两个相同长度的单元格范围并将它们相乘以返回一个值。出于我使用它的目的,我正在根据市场价格和股票数量计算股票的市场价值。

我已经设置好了,但我不知道我该怎么做才能相乘或返回值

子计算MV((

调暗范围将 Rng2 调暗为范围

设置 Rng = 应用程序.选择设置 rng = application.inputbox("选择所有市场值", "MV 计算器", 类型:=8(

调暗 rng3 作为范围

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

对于每个 Rng2 在 Rng 中

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

提前谢谢。

首先,由于您的范围需要具有相同的大小,因此您需要实施检查以要求用户"重试",如果范围彼此不相等,或者其中一个范围超过 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

最新更新