[[20161014135101]] 『エクセルのVBAでTTESTがエラーになる』(ルルダニエル) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エクセルのVBAでTTESTがエラーになる』(ルルダニエル)

下記のTTESTが「WorksheetFunctionクラスのTTestプロパティを取得できません」でエラーになってしまう

hairetu1 = Range(Cells(i + j, ts1), Cells(i + j, te1))
hairetu2 = Range(Cells(i + j, ts2), Cells(i + j, te2))
Range("CN8") = WorksheetFunction.TTest(hairetu1, hairetu2, 2, 2)

 Cells(8, i + j) = WorksheetFunction.TTest(Range(Cells(i + j, ts1), Cells(i + j, te1)), Range(Cells(i + j, ts2), Cells(i + j, te2)), 2, 2)

ワークシートで直接入れるとちゃんと計算してくれます。=TTEST(BQ2:BQ6,BQ7:BQ34,2,2)
どうしてでしょうか?
配列を設定使って試してみましたが同じでした。
なお、下記のように直接設定しても「:」でエラーになってしまいます。
Range("CN8") = TTest(BP2:BP6,BP7:BP34,2,2)
以上、よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 TTestなんてワークシート関数がないからじゃないですか?

 単に↓としたらどうなりますか?

 Range("CN8") = TTest(hairetu1, hairetu2, 2, 2) 

(半平太) 2016/10/14(金) 15:48


 半平太さん

 ヘルプから。
 >Excel 開発者用リファレンス 
 >WorksheetFunction.TTest メソッド 
 >スチューデントの t 分布に従う確率を返します。
 >TTest メソッドを利用すると、2 つの標本が平均値の等しい母集団から取り出されたものであるかどうかを確率的に予測することができます。
 だそうです。

 自分も同じ間違い書きこんであわてて消したんですが(苦笑
(ねむねむ) 2016/10/14(金) 15:50

 ねむねむさん

 ご指摘有難うございます。

 自分でもよく使うプロシージャ名なので、先入観で回答を入れてしまいました。

 ルルダニエルさん 大変失礼いたしました。m(__)m

(半平太) 2016/10/14(金) 16:02


cellsの縦横が逆なんじゃない?
(日捲り熊五郎) 2016/10/14(金) 16:12

  すると、これらが「BQ2:BQ6」「BQ7:BQ34」を本当に指しているか確認するのが第一歩かと思いますが、すでに確認ずみですか?
        ↓
  Debug.Print Range(Cells(i + j, ts1), Cells(i + j, te1)).Address
  Debug.Print Range(Cells(i + j, ts2), Cells(i + j, te2)).Address

 少なくとも、上は同じ行のデータを拾ってきているのですから、
 この数式と別の範囲であり、おかしいと言えるまでの検証になっていないですよ?
  ↓
 =TTEST(BQ2:BQ6,BQ7:BQ34,2,2) 

(半平太) 2016/10/14(金) 16:32


 これ、Excel2010のバグだったりしませんかね? ほとんど使われない命令なので、放置されているとか?

 試しに、Excel2000で以下を実行すると、成功します。同じ元データでも、2010だとご提示のエラーに。
 ? worksheetFunction.TTest(range("BQ2:BQ6"), range("BQ7:BQ34"), 2, 2)

 Excel2013以降をお持ちの方がいれば、どうなるか試してみて欲しいですね。
 (BQ列に通番で良いので、34行目まで値を埋めておく)
(???) 2016/10/14(金) 16:49

 ちょっと気になるのが
 ヘルプにこのような記述があること。

 >重要  この関数は 1 つまたは複数の新しい関数に置き換えられ、精度が向上していたり、関数の名前が用途をより適切に示すものに変更されていたりします。
 >この関数は、以前のバージョンの Excel との互換性を維持するために引き続き使用できます。
 >ただし、下位互換性が必要ない場合、新しい関数の名前はその機能をより正確に表しているため、今後は新しい関数を使用することを検討してください。

 >新しい関数の詳細については、T_Test メソッドを参照してください。

 WorksheetFunction.T_Test 
 を使った場合はどうなるだろうか?

 追記
 T_TEST関数は2010で追加された関数となっている。
(ねむねむ) 2016/10/14(金) 16:54

  > 試しに、Excel2000で以下を実行すると、成功します。同じ元データでも、2010だとご提示のエラーに。
  > ? worksheetFunction.TTest(range("BQ2:BQ6"), range("BQ7:BQ34"), 2, 2)
  > Excel2013以降をお持ちの方がいれば、どうなるか試してみて欲しいですね。

  これで同じブックで検証しましたが、エラーなしです。(マシンは64Bit、XLは32ビット、O/S Win10)
   ↓
 Sub trial()
     Range("BQ1:BQ100") = [row(a1:a100)]

     Range("BR1").ClearContents
     Range("BR1") = WorksheetFunction.TTest(Range("BQ2:BQ6"), Range("BQ7:BQ34"), 2, 2)
 End Sub

 Sub tria2()
     Dim ary1, ary2

     Range("BQ1:BQ100") = [row(a1:a100)]

     ary1 = Range("BQ2:BQ6").Value
     ary2 = Range("BQ7:BQ34").Value

     Range("BR1").ClearContents
     Range("BR1") = WorksheetFunction.TTest(ary1, ary2, 2, 2)
 End Sub

  trialおよびtria2 いずれのバージョンもエラーなし。

  <XL2013  結果図>   XL2010 結果図>
   行  _BQ_  ___BR___     行  _BQ_  ___BR___
    1     1  0.000114      1     1  0.000114
    2     2                2     2          
    3     3                3     3          
    4     4                4     4          

(半平太) 2016/10/14(金) 17:34


半平太さん、ありがとうございます。2010でも2013でも、正常動作するようですね。

私の方でも、Excel2010を一旦全て閉じてから、新規ブックで同じことをしたところ、エラーが出なくなりました。(データは全て数値で埋めていたはずなのに、何が違うのだろう?) ルルダニエルさんも、まっさらなブックで試してみてください。

気になるのは、データ中に空欄が含まれると、同様のエラーになる事でしょうか。対象のセル範囲内のデータを確認してみてください。
(???) 2016/10/14(金) 17:49


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.