excel - 找到两个单元格之间的最大值,但不包括单元格
问题描述
我是 VBA 的初学者,并且一直在广泛使用循环来自动化数据集上的一些工作。我有一组日期,这些日期之间是空单元格。我已经用 TRUE 值填充了空单元格,现在想找到两个连续的 TRUE 值之间的最大值,但显然不包括这些单元格,然后我想用这个来遍历我的整个数据集。
我的问题是我似乎无法找到一种方法来创建一个找到正确上限和下限的宏,然后找到这之间的最大值,然后将结果返回到另一列中,另一列在另一列下
例如,我想获取第二个和第三个 TRUE 之间的数据,找到最大值,然后将这个最大值粘贴到 D2 中。然后我想去第三个和第四个 True 并做同样的事情。所以最后我应该有一列最大日期
excel 在记录宏功能上绘制的 max 函数引用了关于您要粘贴最大值的位置的上限和下限,但是由于单元格数量在边界之间发生变化,我无法列出最大值 -有些会达不到其他的,会超越。
我的想法是开发一个找到第一个 TRUE 的宏,寻找下一个 TRUE,然后计算出这两者之间的最大值,但不包括这两者。然后我将 Range("D1").value = max("first true:second true") 存入 y 值。继续下一个循环,它会找到第三个 TRUE 并输出第二个和第三个之间的最大值,同样不包括这两个单元格,并且 Range("D2").value = max("second true:third true" )。
我只是不知道如何使 max 函数像这样工作。我也不知道如何通过 TRUE 列表进行路由,以便我总是在正确的位置
解决方案
我建议:
- 将范围读入 VBA 数组
- 如果这个链接仍然很好,那么已故的 Chip Pearson 关于VBA中的数组和范围的精彩讨论会很有帮助。
- 遍历范围并在每个实例之后收集最大日期
TRUE
到一个Dictionary
对象(一个方便的存储集合)。 - 通过字典输出结果。
- 该函数可以构建为输出垂直或水平数组
- 请参阅有关此的注释。
- 根据您的 Excel 版本,它可能只是将值作为数组输出,或者您可能必须将其作为数组函数输入到范围中,或者使用 INDEX 函数来访问每个元素。
- 您也可以将其转换为一个宏,该宏将在预定范围内输出结果,但当然,代价是容易使其动态化。
Option Explicit
Function maxDateList(rg As Range)
Dim Arr As Variant
Dim D As Object
Dim I As Long
Dim KEY As Long
Dim V As Variant
'read range into vba array for speedy processing:
'This is always a 2D array
Arr = rg
'loop through the range, saving the max date into
'our dictionary object, and changing dictionary
'entries on each instance of TRUE
Set D = CreateObject("Scripting.Dictionary")
For I = 1 To UBound(Arr)
If Arr(I, 1) = True Then KEY = I
If IsDate(Arr(I, 1)) Then
If Not D.Exists(KEY) Then
D.Add KEY:=KEY, Item:=Arr(I, 1)
Else
If Arr(I, 1) > D(KEY) Then D(KEY) = Arr(I, 1)
End If
End If
Next I
'Output the results as an array
'use 2d array for vertical output
' 1d array for horizontal output
I = 0
ReDim Arr(1 To D.Count, 1 To 1)
For Each V In D
I = I + 1
Arr(I, 1) = D(V)
Next V
'output the results
maxDateList = Arr
End Function
推荐阅读
- python - 为什么python3命令显示找不到它的错误
- python-3.x - 如何在 docker 更改容器的默认 python 版本?
- sql - 在r中循环sql
- angular - Angular IE11 返回 CORS 错误但数据仍然返回
- sas - SAS中的非完整proc箱线图
- javascript - 带有传单的 Heatmap.js。最大值未按预期工作
- typescript - WebGL 参数类型
- flask - Flask 和 neomodel:ModelDefinitionMismatch
- python - 替换 Pandas 中的列值
- javascript - 如何在 REACT 中为导入的组件设置默认值