如何在 Excel 宏中使用 for 循环

如何在 Excel 宏中使用 for 循环

我对 Excel 完全陌生,但我想制作一个宏,在其中可以填写两列以及行的起始和结束号码,它会这样做:

=(A1*B1+A2*B2+A3*B3...)/((SUM of column B)/N))

其中N是行数。

我该如何在 Excel 中实现这个功能?

答案1

首先,如果您使用标准单元格地址,事情就会变得简单得多!

一般来说,单元格是通过“A1”地址来引用的,但在虚拟专用网络(Visual Basic for Applications)也可以使用 [行,列] 坐标来引用它们。例如Cell(1, 2)“B1”。


您可以使用以下任一方式计算值公式或自定义虚拟专用网络(宏)。公式通常是更简单的选择 - 但使用公式肯定有好处虚拟专用网络在某些情况下。

使用公式

示例数据的布局如下:

示例数据布局。

柱子A都填有要相乘的数字。

单元格“C2”包含用于计算该值的公式。

=(SUMPRODUCT(A:A;B:B)/SUM(B:B))/(COUNTA(B:B)-1)
  • SUMPRODUCT将列的值相乘A对每一行进行求和。
  • SUM将列中找到的所有数字相加
  • COUNTA计算列中非空单元格的数量(我们必须扣除标题)。

查找 Microsoft Office 上的功能支持页面了解更多信息。

使用 VBA

您可以使用以下方法实现相同的目的(甚至更多!)虚拟专用网络

打开维基百科(Visual Basic 编辑器)使用Alt+F11开发人员选项卡

创建一个新的标准代码模块。

在此处输入图片描述

将以下代码粘贴到模块中。您可以对其进行调整以更好地满足您的需求。

Option Explicit

Sub Test()
    Dim targetSheet As Worksheet
    Dim valueColumnA As Long
    Dim valueColumnB As Long
    Dim headerSize As Long
    Dim lastRow As Long
    Dim currentRow As Long
    Dim value As Double

    '''---Config---'''
    Set targetSheet = ThisWorkbook.Sheets(1)
    valueColumnA = 1
    valueColumnB = 2
    headerSize = 1
    lastRow = targetSheet.Cells(targetSheet.Rows.Count, "A").End(xlUp).Row

    '''---Logic---'''
    'Multiply the columns for each row and sum them up
    For currentRow = headerSize + 1 To lastRow
        value = value _
            + targetSheet.Cells(currentRow, valueColumnA).value _
            * targetSheet.Cells(currentRow, valueColumnB).value
    Next

    'Divide by sum of numbers found in valueColumnB
    value = value / Application.WorksheetFunction.Sum( _
        targetSheet.Columns(valueColumnB))

    'Divide by number of rows
    value = value / (lastRow - headerSize)

    Debug.Print value
End Sub

堆栈溢出有很多关于虚拟专用网络

相关内容