Excel について質問です。


TREND関数はつぎの通りです。TREND(既知のy,既知のx,新しいx,定数)

ここで既知のyに無視したい値が、下記のように入っている場合、これを無視させるにはどのような方法がありますか。


x y
1 1
2 4
3 6
4 #N/A
5 10

この場合、通常だと #VALUE というエラーが返されてしまいす。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2011/04/14 22:04:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:SALINGER No.2

回答回数3454ベストアンサー獲得回数969

ポイント100pt

途中にエラー値と空白があっても、行を詰めて計算するユーザー定義関数を作ってみました。

使い方は同じです。ただし、配列数式などの複雑な利用はできないです。


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
id:domodomodomo

感動しました!

2011/04/14 22:03:37

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント10pt

その#N/Aになってる箇所を なんらかの値に変えてやらないとダメです。

=IF(ISNA(セルの内容),0)

という感じに。

#N/Aのエラーが出るということは なんらかの数式が入っているものと思われます。

セルの内容には その数式を 入れたらいいですね。

id:domodomodomo

ありがとうございます。

2011/04/14 22:03:47
id:SALINGER No.2

回答回数3454ベストアンサー獲得回数969ここでベストアンサー

ポイント100pt

途中にエラー値と空白があっても、行を詰めて計算するユーザー定義関数を作ってみました。

使い方は同じです。ただし、配列数式などの複雑な利用はできないです。


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
id:domodomodomo

感動しました!

2011/04/14 22:03:37
  • id:taknt
    =IF(ISNA(セルの内容),0)

    これは
    =IF(ISNA(セルの内容),0,セルの内容)

    にしたほうがいいですね。

    って ま、xも一緒に無視しないと 意味がないのかもしれないけど。
  • id:domodomodomo
    ご回答いただき、ありがとうございます。

    > って ま、xも一緒に無視しないと 意味がないのかもしれないけど。

    そうですね。(0,0)を登録することになるので予測値に影響がでてしまいます。

    そういう形で無視できたら、一番楽なんですけどね。
  • id:domodomodomo
    # メモ
    r2, 既知のxにdate型がはいるときは

    CStr(CLng(r2(j))) という形で値を取り出さないと#VALUEエラーが返されます。

    r2(j) で値を取得した時点でシリアルに変換してくれたら楽なのに。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません