|
▼ちくたく さん:
こんばんは、
稚拙なコードですが、アップしてみます。
Option Explicit
Type tmpType
Value As Double
Row As Long
End Type
Sub 配列で処理()
Dim i As Long
Dim j As Long
Dim k As Long
Dim Sabun As Double
Dim varData As Variant
Dim Point As tmpType
'選択範囲を配列で受ける
varData = Selection.Value
' j は列単位のループ
For j = LBound(varData, 2) To UBound(varData, 2)
' i は行単位のループ
For i = LBound(varData, 1) To UBound(varData, 1)
If varData(i, j) <> "" Then
'ポイントの行が初期化されていなかった場合、差分を取る
If Point.Row <> 0 Then
Sabun = (varData(i, j) - Point.Value) / (i - Point.Row)
'空白行に補完
For k = Point.Row + 1 To i - 1
varData(k, j) = Point.Value + Sabun * (k - Point.Row)
Next
End If
'セルに入っている値と行をポイントにする
Point.Value = varData(i, j)
Point.Row = i
End If
Next i
'右列にポイント移動…行を初期化
Point.Row = 0
Next j
'配列の値をセルに戻す
Selection.Value = varData
End Sub
Type ステートメントを使って処理を行ってみました。
|
|