Excelmacros用平均值replace丢失的数据

我有一个范围的数据,从一个types范围variables保存的vba提示。 我试图通过这个范围,并为每个空单元格,取而代之的是其列的平均值。

我可以很好地replace空单元格,但它正在得到我正在努力的每个列的平均值。 有一个简单的方法吗?

我宁愿不为每一列做一个循环,每一行循环,然后使用total / numberOfNonEmptyCells来计算它,因为这需要相当长的一段时间(而且我显然在这里做错了,因为我得到了错误的值)…但我相信这不是唯一的或正确的方法来做到这一点。

有什么方式说:

对于每一列
从范围中获取列我
获取该列的平均值。
把它放在一个数组中。

然后有一个循环,通过用这个值replace空单元格?

或者,更好的方法是在空单元格中join一个公式
= AVERAGE(Column from Range)
我试过这个使用AVERAGE(Range.Columns,1) ,它没有工作,因为它是types列我相信平均不起作用。

做这个最简单的方法我会标记为答案。 它需要使用一个macros,而不仅仅是手动input公式,因为它是在很多工作表上的大量数据。

谢谢。

这将在每个列中select一个范围,用非空白单元格中的平均值填充空白单元格。

它解决了您的速度问题,通过最大限度地减less对环路中的信元的访问(在大约5,000,000个信元上testing,花费大约10秒钟)(在更复杂的代码的情况下可能进一步改进)

保留任何公式

 Sub FillInAverage() Dim rng As Range Dim col As Range Dim a As Variant Dim dat As Variant Dim i As Long Set rng = Selection For Each col In rng.Columns a = Application.WorksheetFunction.Average(col) dat = col.Formula For i = 1 To UBound(dat, 1) If Len(dat(i, 1)) = 0 Then dat(i, 1) = a End If Next col.Formula = dat Next End Sub 

说,通过的范围是abc

 notBlanks = abc.Rows.Count - WorksheetFunction.CountBlank(abc.Columns(i)) avg = WorksheetFunction.Sum(abc.Columns(i)) / notBlanks 

您可以使用公式根据您的要求仅处理空单元格
(注意 – 这个方法假设单元格是真的空的,即不包含评估为“”等的公式)。

此代码将A1:A10000中的任何非空白数字单元格平均,然后填充A1:A10000中的空白。 然后B1:B10000等等

 Sub FillBlanks() Dim rng1 As Range Dim rng2 As Range Set rng1 = Range("A1:D10000") On Error Resume Next For Each rng2 In rng1.Columns rng2.SpecialCells(xlCellTypeBlanks).Value = Application.WorksheetFunction.Average(rng2.Columns(1)) Next End Sub