【问题标题】:How to determine break points to define ranges of cells - VBA BEGINNER如何确定断点以定义单元格范围 - VBA BEGINNER
【发布时间】:2017-01-10 15:33:57
【问题描述】:

我正在尝试编写一个程序,该程序将使用定义为 BREAK_A、BREAK_B 和 BREAK_C 的变量之间的一系列单元格计算平均值 - 其中这些断点之间的范围将根据用户输入而有所不同 -因此计算平均值的范围会有所不同。

需要注意的是,A1 和 A10 永远不能成为断点的位置。

Excel 电子表格示例:

A1 = 11
A2 = 24
A3 = 15
A4 = BREAK_C
A5 = 17
A6 = BREAK_B
A7 = 6
A8 = 33
A9 = BREAK_A
A10 = 12

尝试使用一些伪代码:

Public Sub Sort()

DIM BREAK_A AS NUM
DIM BREAK_B AS NUM
DIM BREAK_C AS NUM

DIM RANGE1 AS VARIANT
DIM RANGE2 AS VARIANT
DIM RANGE3 AS VARIANT
DIM FULL_RANGE AS VARIANT

 FIND CELL NUMBERS OF(BREAK_A, BREAK_B, BREAK_C) 
 SORT CELL NUMBERS IN ASCENDING ORDER

RANGE1 = "A1: LOWEST CELL NUMBER OF BREAK"
RANGE2 = "LOWEST CELL NUMBER OF BREAK +1 : NEXT HIGHEST CELL NUMBER OF BREAK"
RANGE3 = "NEXT HIGHEST CELL NUMBER OF BREAK +1 : END"

我的问题是 BREAK 点会根据用户输入填充不同的单元格位置。我想编写一个程序来定义计算平均值的单元格范围 - 取决于断点的位置。

另外,有时 BREAK 可能不存在 - 所以我不能总是使用 BREAK_A、BREAK_B、BREAK_C 作为我范围的终点,因为您可能会遇到只应考虑 BREAK_A 和 BREAK_C 而 BREAK_B 不存在的情况.

对于这个例子,我要计算 =AVG(A1:A3, A5, A7:A8, A10)

我们将不胜感激在产生想法方面的任何帮助。我是 VBA 新手,已经好几天没能解决这个问题了..

【问题讨论】:

  • 所以你想平均每个不包含BREAK_?的单元格?工作表函数 Average 将自行忽略文本:=AVERAGE(A1:A10) 将返回 16.857。还是您想要基于休息时间的 4 个不同的平均值?
  • @ScottCraner 我需要除 BREAKS 之外的所有数字的平均值 - 但是,break 值也是用户定义的数字。我应该说得更清楚。

标签: vba excel


【解决方案1】:

你可以试试下面的代码

Sub Test()

lstrng = ActiveSheet.Range("A65000").End(xlUp).Row
Startrng = 1
For i = 1 To lstrng


    If Range("A" & i).Value = "Break" Then
        Endrng = i - 1
        Range("A" & i).Value =  WorksheetFunction.Average(Range(Cells(Startrng, 1), Cells(Endrng, 1)))
        Startrng = i + 1
    End If

Next
End Sub

【讨论】:

  • 我应该更清楚地表明 BREAK 只是为了展示我想要完成的事情。 BREAK 变量实际上是用户定义的数字,因此它不会在电子表格中显示为 BREAK,而是一个数字。但是,这些 BREAK 值被声明为变量。
  • 我能不能把这个语句改成:If Range("A" & i).Value = "Break1" or "Break2" etc?
猜你喜欢
  • 2021-12-02
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多