提问人:kca062 提问时间:6/8/2023 更新时间:6/8/2023 访问量:73
在VBA中使用Excel频率工作表函数进行直方图
Using Excel Frequency Worksheet Function in VBA for Histograms
问:
我正在尝试使用 VBA 生成直方图(直方图将被归类为簇状柱形图以具有可自定义的轴标题)。我目前正在使用 excel 工作表函数频率来生成每个箱中的计数。在实际的工作表中,这没有问题,但是当它传输到VBA中时,它有一个错误,因为类型不匹配。
我有一些编码经验,但不是很多。我在网上读到的一件事是,有时当你在一个范围内对单元格进行分组时,它们会被归类为一个数组,这可能就是为什么它是类型不匹配的原因?我可能会看到的另一个问题是 excel 公式溢出,是否像第 3 行那样在单个单元格中设置公式有效?如果需要,我可以附加整个代码,但它是半长的,这让我专注于我遇到的问题是什么?
我的公式代码行很长,因为它有点动态。数据数组中的行数是静态的(始终为 22 行)。但是,根据基于 excel 中某些单元格输入的所选 bin 范围,“bins 数组”的长度可能会发生变化。
谢谢!
Dim binCount As Integer
binCount = WorksheetFunction.Frequency(ws3.Range(Cells(2, emptycol + 1), Cells(23, emptycol + 1)), ws3.Range(Cells(2, emptycol + 3), Cells(num_bins, emptycol + 3)))
ws3.Cells(2, emptycol + 4).Value = binCount
答:
2赞
BigBen
6/8/2023
#1
WorksheetFunction.Frequency
返回一个从 1 开始的数组。改变:
Dim binCount As Integer
自
Dim binCount As Variant 'or just Dim binCount
然后在将此数组写入工作表时使用 and。Ubound
Resize
旁注:
- 您需要在通话前对工作表进行限定。
Cells
- 其他变量可能在这里有所帮助:
With ws3
Dim dataRange As Range
Set dataRange = .Range(.Cells(2, emptycol + 1), .Cells(23, emptycol + 1))
Dim binsRange As Range
Set binsRange = .Range(.Cells(2, emptycol + 3), .Cells(num_bins, emptycol + 3))
End With
Dim binCount As Variant
binCount = WorksheetFunction.Frequency(dataRange.Value, binsRange.Value)
ws3.Cells(2, emptycol + 4).Resize(Ubound(binCount)).Value = binCount
评论
0赞
kca062
6/8/2023
谢谢!如果我想在实际工作表中显示 binCount,我将如何将其从 .价值?
0赞
BigBen
6/8/2023
查看我刚刚发布的编辑。
0赞
kca062
6/8/2023
太棒了,非常感谢!如果我想实际显示公式而不是值,当您的粘贴是动态的时,这是否有效?
0赞
BigBen
6/8/2023
我不确定你的意思,但如果你想要一个公式,那么也许.ws3.Cells(2, emptycol + 4).Formula2 = "=FREQUENCY(...)
评论