TREND関数はつぎの通りです。TREND(既知のy,既知のx,新しいx,定数)
ここで既知のyに無視したい値が、下記のように入っている場合、これを無視させるにはどのような方法がありますか。
x y
1 1
2 4
3 6
4 #N/A
5 10
この場合、通常だと #VALUE というエラーが返されてしまいす。
途中にエラー値と空白があっても、行を詰めて計算するユーザー定義関数を作ってみました。
使い方は同じです。ただし、配列数式などの複雑な利用はできないです。
Function myTREND(r1 As Range, r2 As Range, r3 As Range, Optional f As Boolean = True) As Double Dim i As Integer Dim str1 As String Dim str2 As String For i = 1 To r1.Count If Not IsError(r1(i)) Then If r1(i).Value <> "" Then str1 = str1 & r1(i) & "," str2 = str2 & r2(i) & "," End If End If Next str1 = Left(str1, Len(str1) - 1) str2 = Left(str2, Len(str2) - 1) myTREND = Evaluate("TREND({" & str1 & "},{" & str2 & "}," & r3.Value & "," & f & ")")(1) End Function
その#N/Aになってる箇所を なんらかの値に変えてやらないとダメです。
=IF(ISNA(セルの内容),0)
という感じに。
#N/Aのエラーが出るということは なんらかの数式が入っているものと思われます。
セルの内容には その数式を 入れたらいいですね。
ありがとうございます。
途中にエラー値と空白があっても、行を詰めて計算するユーザー定義関数を作ってみました。
使い方は同じです。ただし、配列数式などの複雑な利用はできないです。
Function myTREND(r1 As Range, r2 As Range, r3 As Range, Optional f As Boolean = True) As Double Dim i As Integer Dim str1 As String Dim str2 As String For i = 1 To r1.Count If Not IsError(r1(i)) Then If r1(i).Value <> "" Then str1 = str1 & r1(i) & "," str2 = str2 & r2(i) & "," End If End If Next str1 = Left(str1, Len(str1) - 1) str2 = Left(str2, Len(str2) - 1) myTREND = Evaluate("TREND({" & str1 & "},{" & str2 & "}," & r3.Value & "," & f & ")")(1) End Function
感動しました!
感動しました!