これ何て呼びますか

以下のようにA列とB列に数値が並んでいる時に、A列の指定した数値の線形補間したB列の値を出力したいです。
例えば20を指定したらA列の15と25の中間なのでB列20と30の中間になる25を出力したいです。
指定した数値がデータにある場合は対応するその数値をそのまま出力したいです(線形補間不要)
データはA列は昇順ですがB列は昇順になっていません。
わかる方お願いします。

A B
10 50
12 40
15 20
25 30
30 40
35 60

質問者からの補足コメント

  • うれしい

    説明不足すみません。あるセルに値を手入力して指定、結果もどこかのセルに入力されればOKです。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/11/18 20:33

A 回答 (2件)

標準モジュールに登録してください。


C1に例えば20を指定してください。結果はD1に表示されます。

Option Explicit
Public Sub 線形補間()
Dim maxrow As Long
Dim wrow As Long
Dim maxVal As Variant
Dim minVal As Variant
Dim givVal As Variant
Dim p0 As Long '補間開始行
Dim p1 As Long '補間終了行
Dim X As Variant '補間開始からの増分比
Dim ws As Worksheet
Set ws = ActiveSheet
maxrow = ws.Cells(Rows.Count, "A").End(xlUp).Row
minVal = ws.Cells(1, "A").Value
maxVal = ws.Cells(maxrow, "A").Value
givVal = ws.Cells(1, "C").Value
If givVal < minVal Or givVal > maxVal Then
MsgBox ("指定値が範囲外")
Exit Sub
End If
For wrow = 1 To maxrow
If ws.Cells(wrow, "A").Value <= givVal Then
p0 = wrow
End If
If ws.Cells(wrow, "A").Value >= givVal Then
p1 = wrow
Exit For
End If
Next
'補間不要の場合
If ws.Cells(p1, "A").Value = givVal Then
ws.Cells(1, "D").Value = ws.Cells(p1, "B").Value
Exit Sub
End If
X = (givVal - ws.Cells(p0, "A").Value) / (ws.Cells(p1, "A").Value - ws.Cells(p0, "A").Value)
ws.Cells(1, "D").Value = ws.Cells(p0, "B").Value + (ws.Cells(p1, "B").Value - ws.Cells(p0, "B").Value) * X
End Sub
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます。大変助かりました。

お礼日時:2020/11/18 23:03

どうやって「例えば20を指定」しますか。


また、結果はどこへ出しますか。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!