、これは単純な数学です。
Option Explicit
Sub missingGazePoints()
Dim blnk As Range
With Worksheets("Sheet3")
For Each blnk In .Columns("X:Y").SpecialCells(xlCellTypeBlanks)
blnk = blnk.End(xlUp).Value2 + _
(blnk.End(xlDown).Value2 - blnk.End(xlUp).Value2)/_
(blnk.End(xlDown).Row - blnk.End(xlUp).Row)
Next blnk
End With
End Sub
私はすべての欠落した点を線形に埋めています。すべての不足している点に対して静的平均を使用していません。
補遺:繰り返しのワークシート参照を持つ行をループ
が物事を遅くしようとしている配列での作業。クラッシュの可能性があります。すべての値(空白を含む)を2次元のバリアント配列に格納し、ワークシートに値を返す前にメモリ内のすべての処理を実行すると、処理が高速化されます。
Sub qwuirwqwq()
Dim rsz As Long, x As Long, y As Long
Dim vals As Variant, bd As Double, ed As Double
On Error GoTo bm_Safe_Exit 'uncomment this line when you have finished debugging
appTGGL bTGGL:=False 'uncomment this line when you have finished debugging
With Worksheets("Sheet3")
With .Cells(2, "X").Resize(Application.Min(.Cells(.Rows.Count, "X").End(xlUp).Row - 1, _
.Cells(.Rows.Count, "Y").End(xlUp).Row - 1), 2)
vals = .Cells.Value2
For x = LBound(vals, 1) + 1 To UBound(vals, 1)
If vals(x, 1) = vbNullString Then
y = x + 1
Do While vals(y, 1) = vbNullString
y = y + 1
Loop
vals(x, 1) = vals(x - 1, 1) + _
(vals(y, 1) - vals(x - 1, 1))/(y - x + 1)
End If
If vals(x, 2) = vbNullString Then
y = x + 1
Do While vals(y, 2) = vbNullString
y = y + 1
Loop
vals(x, 2) = vals(x - 1, 2) + _
(vals(y, 2) - vals(x - 1, 2))/(y - x + 1)
End If
Next x
.Cells = vals
ReDim vals(0)
End With
End With
bm_Safe_Exit:
appTGGL
End Sub
Public Sub appTGGL(Optional bTGGL As Boolean = True)
Application.ScreenUpdating = bTGGL
Application.EnableEvents = bTGGL
Application.DisplayAlerts = bTGGL
Application.Calculation = IIf(bTGGL, xlCalculationAutomatic, xlCalculationManual)
Debug.Print Timer
End Sub
注一時的に処理するまでの税処理が完了した様々な環境設定を一時停止する「ヘルパー」appTGGL Subプロシージャ。
ブックを.XLSMではなく.XLSBとして保存することで、いくつかの利点(実行速度、ファイルサイズの縮小)を得ることもできます。
は、私がI5と8Gbsとタブレットの0.6秒〜16,000空白セルと30万行に対して後者メモリベースのルーチンを実行したを¹しました。それは正解です。ゼロ点6秒。
ありがとうございました。私は30000+の行を持っているが、それは本当に遅いですが、それはトリックを行います。計算の時間のような後エクセルはついに墜落した。 :)また、線形計算のおかげで、実際にはそれがさらに良いです。 今、20行以上の空白を連続して除外できるかどうかを判断しようとしています。 – Algeron
2次元バリアント配列でこれを行うことを考えて、すべての処理がメモリ上にあるようにします。これは、数千行以上のループ処理に最適なソリューションです。 – Jeeped
中間では、[VBAベストプラクティス - マクロ実行時のプロパティを無効にする](http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/5925/switch-off-properties-during)を参照してください。 -macro-execution)を実行します。 – Jeeped