使用vba获取特定文件的中值
我刚开始使用VBA,我找不到一个解决方案来获得第一列上每个id的中值: 所以原始文件是A列和B列。 结果是D&E列 第一步是查找A列(ID)的出现情况 然后计算结果的中位数(B列) 然后在D列和E列中写入每次发生的结果 非常感谢你的帮助 编辑 找到我的答案感谢@Michal Turczyn的帮助: 警告,数据必须先按列A排序(否则此代码将不起作用)使用vba获取特定文件的中值,vba,excel,Vba,Excel,我刚开始使用VBA,我找不到一个解决方案来获得第一列上每个id的中值: 所以原始文件是A列和B列。 结果是D&E列 第一步是查找A列(ID)的出现情况 然后计算结果的中位数(B列) 然后在D列和E列中写入每次发生的结果 非常感谢你的帮助 编辑 找到我的答案感谢@Michal Turczyn的帮助: 警告,数据必须先按列A排序(否则此代码将不起作用) 无需VBA即可实现,只需在E1列中粘贴以下公式即可: =中间值(如果(A:A=D1,B:B))接受时,不要按Enter键,使用Ctrl+Shift
无需VBA即可实现,只需在E1列中粘贴以下公式即可:
=中间值(如果(A:A=D1,B:B))
接受时,不要按Enter键,使用Ctrl+Shift+Enter键并将其向下拖动
如果要使用VBA,请执行以下代码:
Option Explicit
Sub CalcMedian()
Dim i As Long, id As Long, lastRow As Long, j As Long, k As Long, numbers() As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To 3
ReDim numbers(lastRow) As Long
k = 0
id = Cells(i, 4).Value
For j = 1 To lastRow
If Cells(j, 1).Value = id Then
numbers(k) = Cells(j, 2).Value
k = k + 1
End If
Next
ReDim Preserve numbers(k - 1) As Long
Cells(i, 5).Value = WorksheetFunction.Median(numbers)
Next
End Sub
这将是一个数组公式,CTRL+SHIFT+Enter为什么需要是数组公式?你应该在没有人的情况下工作吗?中位数已经需要一个数组。好的,谢谢你的技巧,但我想用VBA来做,因为我同时在做一个教程,这对我来说很难。了解vba中的表格。例如,在我计算中间值之前,我想先在一个表中存储值。谢谢你的帮助,但是,首先,你的结果给我4 6(而不是3.5 4.15 6)。其次,如果你想先填写D列,你有什么窍门吗?因为如果D列存在,您的代码可以工作,但在我的真实文件中,A列中可能有45000个ID(在VBA中就太棒了)。不管怎样,谢谢你的代码,我还在写。我知道先按A列排序会更容易,然后在A列的值仍然相同的情况下,在表中添加B列的值作为中位数?但我无法找到如何更改表的大小,因为这取决于A列中出现的次数
Option Explicit
Sub CalcMedian()
Dim i As Long, id As Long, lastRow As Long, j As Long, k As Long, numbers() As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To 3
ReDim numbers(lastRow) As Long
k = 0
id = Cells(i, 4).Value
For j = 1 To lastRow
If Cells(j, 1).Value = id Then
numbers(k) = Cells(j, 2).Value
k = k + 1
End If
Next
ReDim Preserve numbers(k - 1) As Long
Cells(i, 5).Value = WorksheetFunction.Median(numbers)
Next
End Sub