質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

30729閲覧

VBA StDev関数について

Alice0225

総合スコア206

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2015/09/29 01:51

編集2015/09/29 01:56

Excel VBAで偏差値を算出するプログラムを作成しています。
その中の標準偏差の算出についてなのですが、
現在は以下のように

VBA

1For i = 1 To 100 2 標準偏差 = WorksheetFunction.StDev(Range(Cells(1, i), Cells(100, i))) 3 (省略) 4Next i

ワークシートのセルを範囲指定して算出を行っています。

これを2次元配列を用いた算出方法に変えたいのですがどのようにすればいいのでしょうか。
(そもそもStDev関数に2次元配列を用いれるのでしょうか…?)

皆様のお力をお借りできれば幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tak1wa

2015/09/29 01:56

仰っている2次元配列とはどういうイメージですか?StDevの引数のRangeの話でしょうか?やりたいことのイメージを記載して頂けると
Alice0225

2015/09/29 02:01

>>Tak1waさん 既存のセルの値を用いたStDev関数を、2次元配列の値を用いたStDev関数に書き換えたいのです。 2次元配列はStDevの引数として使用したいのですが実現可能なのでしょうか…?
guest

回答2

0

2次元配列のデータとは、例えば...
9,9,8
7,8,7
9,8,9
という感じのデータを考えられていますか?

rangeは何行あっても大丈夫なので、excel 2010であれば
stdev.p(a1:a3, b1:b3, c1:c3)のように指定可能です。

質問の「2次元配列のデータ」と回答が合っていればいいんですが。

投稿2015/09/29 02:20

Jake

総合スコア289

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Alice0225

2015/09/29 02:26

質問がわかりにくい書き方で申し訳ありません。 2次元配列をそのままStDev関数の引数として使いたかったのです。
Jake

2015/09/29 02:47

そちらでしたか~。 「2次元配列をそのまま使う」事が目的ではなくて、2次元配列のデータをとにかくstdevにかけるのが目的であれば、for文で: For y = yMin To yMax For x = xMin To xMax z[cnt] = hoge[x,y] cnt=cnt+1 Next x Next y のようにして1次元にしてしまうのもアリっちゃーアリです。 1次元になってしまえば後は普通にstdev(z)でOKですね。 (計算コストに見合うかは別ですが。)
Alice0225

2015/09/29 08:39

やはり2次元配列をそのまま引数にするのは不可なのですね。 ご回答ありがとうございましたm(_ _)m
guest

0

ベストアンサー

こんにちは。
二次元配列を用いるのであれば指定するだけで済むでしょう。
ただ二次元配列を指定した結果どのような値を期待していますか?
おそらく試した感じだと一次元でも多次元でもひとつの集合とみなされるだけですけど。

なお、STDEVは将来的に使えなくなる可能性がありますのでSTDEV.S関数に代用したほうが無難です。

VBA

1 Dim arg1(8) As Integer 2 arg1(0) = 11 3 arg1(1) = 22 4 arg1(2) = 33 5 arg1(3) = 44 6 arg1(4) = 55 7 arg1(5) = 66 8 arg1(6) = 77 9 arg1(7) = 88 10 arg1(8) = 99 11 Cells(1, 1) = WorksheetFunction.StDev_S(arg1) 12 13 Dim arg2(2, 2) As Integer 14 arg2(0, 0) = 11 15 arg2(0, 1) = 22 16 arg2(0, 2) = 33 17 arg2(1, 0) = 44 18 arg2(1, 1) = 55 19 arg2(1, 2) = 66 20 arg2(2, 0) = 77 21 arg2(2, 1) = 88 22 arg2(2, 2) = 99 23 Cells(1, 2) = WorksheetFunction.StDev_S(arg2)

投稿2015/09/29 02:16

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Alice0225

2015/09/29 02:25 編集

ご回答頂き、ありがとうございます。 StDev_sを用いたほうが良いのですね。勉強になります。 >Dim arg2(2, 2) As Integer > arg2(0, 0) = 11 > arg2(0, 1) = 22 > arg2(0, 2) = 33 > arg2(1, 0) = 44 > arg2(1, 1) = 55 > arg2(1, 2) = 66 > arg2(2, 0) = 77 > arg2(2, 1) = 88 > arg2(2, 2) = 99 > Cells(1, 2) = WorksheetFunction.StDev_S(arg2) 提示頂いた上記コードに関して、 arg2(1から100まで,5番目固定)のような指定をすることはできませんか? 当方の質問・補足回答が稚拙な為お手数おかけし申し訳ございません。 イメージとしては 標準偏差 = WorksheetFunction.StDev_s(配列(1, i):配列(100, i)) のようなことがしたいのです。
Tak1wa

2015/09/29 03:25

出来ません。StDev_Sの仕様ではなくVBAの配列仕様の範囲を超えていると思います。ReDimでどうにかやれるかもしれないですが、制限も多いので原始的に、Cellに一度張り付けてRangeで指定するか、For文で回すかになるでしょう。
Alice0225

2015/09/29 08:37

やはりその方法しかないのですね。 元々、「配列→セルに書き出す→標準偏差算出」で行っていたのですが簡単にそのまま配列使えたりしないかな…と思ったのですが残念です。 ご回答頂きありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問