首页 > 解决方案 > 如何在 excel vba 中为用户定义的范围执行操作?

问题描述

我有一系列具有值的单元格,即

在此处输入图像描述

我想要一个for循环,它对A列(1)中的第一个值、B列(3)中的相邻值和C列(74)中的相邻值进行平均。我需要用户使用 msgbox 选择这个范围。

到目前为止,我可以在宏记录的帮助下编写代码:

Sub averager()
    Dim ran As Range, average As Variant, cell1 As Variant, cell2 As Variant
    Dim i As Variant

    Set ran = Application.InputBox(Prompt:="Enter range values: ", Type:=8)

    For i = 0 To i = 8
        ran.Offset(0, 13).Select
        ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-13]:RC[-11])"
        average = WorksheetFunction.average(ran.Text)
    Next i
End Sub

但是,此代码不执行循环,它仅返回我选择的偏移位置的第一个三次的平均值。

循环如何对所有值执行操作?

标签: excelvbafor-loopaverage

解决方案


  1. Cancel在用户按下按钮的情况下捕获错误。
  2. 您不需要循环,您可以一次将公式写入多个单元格。

Option Explicit

Public Sub Averager()        
    Dim ValueRange As Range
    On Error Resume Next 'if user presses cancel this throws an error
    Set ValueRange = Application.InputBox(Prompt:="Select range values: ", Type:=8)
    On Error GoTo 0

    If Not ValueRange Is Nothing Then
        ValueRange.Offset(ColumnOffset:=6).Resize(ColumnSize:=1).FormulaR1C1 = "=AVERAGE(RC[-6]:RC[-4])"
    End If
End Sub

推荐阅读