2017-08-22 6 views
1

私はウェブサイトから収集した数字を含む長いエクセルファイルを持っています。ソースからのエラーのために、セルの1%未満がゼロを含む。したがって、それらのセルを更新して、それらを最も近い値で補間したいと考えています。ゼロセルの長さは、単一の時間であるため、最も近い非ゼロ値の平均を取ることができます。しかし、いくつかの場所は1より長いので、私は線形補間を使用する必要があります。大きなエクセルシートでゼロセルを補間する方法は?

サンプル抽出されたデータ

+---+------+------+------+------+------+------+------+------+---+---+---+---+---+---+---+---+------+------+------+------+------+------+------+------+------+ 
| | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | 
+---+------+------+------+------+------+------+------+------+---+---+---+---+---+---+---+---+------+------+------+------+------+------+------+------+------+ 
| 1 | 4058 | 4048 | 4049 | 4082 | 4090 | 4115 | 4118 | 4109 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3990 | 4058 | 4064 | 4053 | 4057 | 4093 | 4123 | 4137 | 4133 | 
+---+------+------+------+------+------+------+------+------+---+---+---+---+---+---+---+---+------+------+------+------+------+------+------+------+------+ 
+0

。 –

+0

私はmatlabにデータをインポートし、NaNとしてゼロを変換してから、単にfillmissing()関数を使います。 – sosruko

答えて

1

は、ここでそのような何かを行う可能性があり、非常に一般的なスクリプトです。これは、正の値のみと10行でテストされているので、あなたは間違いなく多くのコーナーケースに適合する必要があります - しかし、それは正しい方向にあなたを指している必要があります:私はおそらく、このためにVBAを使用します

Sub Interpolate() 
    Dim valueToTop As Integer 

    For Row = 1 To 10 
     valueToTop = -1 
     valueToBottom = -1 

     If Cells(Row, 1).Value = 0 Then 
      RowToTop = Row - 1 
      Do While RowToTop > 0 
       If Cells(RowToTop, 1).Value > 0 Then 
        valueToTop = Cells(RowToTop, 1) 
        Exit Do 
       End If 
       RowToTop = RowToTop - 1 
      Loop 
      Debug.Print valueToTop 
      Debug.Print RowToTop 


      RowToBottom = Row + 1 
      Do While RowToBottom > 0 
       If Cells(RowToBottom, 1).Value > 0 Then 
        valueToBottom = Cells(RowToBottom, 1) 
        Exit Do 
       End If 
       RowToBottom = RowToBottom + 1 
      Loop 
      Debug.Print valueToBottom 
      Debug.Print RowToBottom 

      Cells(Row, 2).Value = valueToTop + (Row - RowToTop) * (valueToBottom - valueToTop)/(RowToBottom - RowToTop) 


     End If 



    Next Row 
End Sub 
関連する問題