• ベストアンサー

配列の統計系の関数

教えてください。 なんと書けばいいかわかりませんので、添付画像をご覧下さい。 Aのような配列があるとき、BやCを作りたく思っております。 B(値のあるのもだけを抜粋したもの) C(日付に伴って値を抜粋したもの) ========== これって、関数でできるものでしょうか? もしできれば関数で できなくば、マクロでおしえていただけないでしょうか? どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

回答No3です。 EF列をF列の数字順(多い順)に並べることも 関数でできるのですか? その場合にはC4セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(A$4:A4,A4)=1,SUMIF(A:A,A4,B:B)+1/A4,"") その後にE4セルには次の式を入力し下方にオートフィルドラッグします。 =IF(ROW(A1)>COUNT(C:C),"",INDEX(A:A,MATCH(LARGE(C:C,ROW(A1)),C:C,0))) F4セルは前回と同様に次の式を入力して下方にオートフィルドラッグします。 なお、E列については表示形式を日付にします。 また、Fのデータが同じ場合には古い日付が上段の行に表示されるようになっています。

deepimpact
質問者

お礼

すごすぎる! これまで苦労してた、ピポットや 並べ替え作業をやる必要がなくなりました! 神!(笑) 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

分かり易くしかも計算を重くしないためには作業列を作って対応します。 C4セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(A$4:A4,A4)=1,A4,"") E4セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>COUNT(C:C),"",SMALL(C:C,ROW(A1))) F4セルには次の式を入力して下方にオートフィルドラッグします。 =IF(E4="","",SUMIF(A:A,E4,B:B)) H4セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)=1,MIN(A:A),IF(MIN(A:A)+ROW(A1)-1<=MAX(A:A),MIN(A:A)+ROW(A1)-1,"")) I4セルには次の式を入力して下方にオートフィルドラッグします。 =IF(H4="","",SUMIF(A:A,H4,B:B)) なお、C,EおよびH列についてのセルの表示形式は時刻にします。 なお、A列などではA1セルからA3セルの間では文字列の入力はあっても数値のデータは入力されていないものとしています。

deepimpact
質問者

補足

すばらしい! 関数でできるとおもってなかったのでびっくりしました。 もしかしてなんですが、 EF列を F列の数字順(多い順)に並べることも 関数でできるのですか?

全文を見る
すると、全ての回答が全文表示されます。
  • chiune
  • ベストアンサー率24% (30/124)
回答No.2

CについてはNo.1のご回答が最善かと。 Bは、ピボットテーブルではダメなんでしょうか。

deepimpact
質問者

お礼

そうなんです。 データが山ほどあるんで、 ピポットでひとつひとつやるのが、つらくて…

全文を見る
すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

Bについてはデータメニュー(データタブ)の統合などを使った方が簡単に結果を得られますが,結局は関数じゃないとイヤなんでしょうから D4: =IF(ROW(D1)>COUNT(1/FREQUENCY(A:A,A:A)),"",INDEX(A:A,SMALL(IF(ISNUMBER(1/FREQUENCY($A$4:$A$20,$A$4:$A$20)),ROW($A$4:$A$20)),ROW(D1)))) をコントロールキーとシフトキーを押しながらEnterで入力,日付の書式を付けて以下コピー E4: =SUMIF(A:A,D4,B:B) 以下コピー。 Cについては G4: =MIN(A:A) G5: =G4+1 以下コピー H4: =SUMIF(A:A,G4,B:B) 以下コピー。

deepimpact
質問者

お礼

ありがとうございました!

deepimpact
質問者

補足

すばらしい! ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • sumif関数とif関数と配列の使い方

    例えば、下記のように9行×3列のデータがあり、1列目が123かつ2列目がcであるものについて3列目を合計したいのですが(つまり300+600で900を算出する)、1セルに値を算出する方法があれば教えてください。 sumif関数とif関数と配列を使えばできそうな気がするんですが、やり方がよくわかりません。よろしくお願いします。 123  a  100 123  b  200 123  c  300 456  a  1000 456  b  2000 456  c  3000 123  a  400 123  b  500 123  c  600

  • 配列を関数の戻り値に使う

    こんばんわ。 PHP5で配列を関数の戻り値として返す方法がわからず今回投稿させていただきました。 配列は1次元で 1,2,3 の値が a という配列に格納されています。 呼び出された関数(testメソッド)で a配列を返し、bで受けようとするのですが、bの値には NULL となっています。 返す際に return $a; としており、 $b=$obj-〉test(); で、aをbで受けようと考えております。 配列を返す場合は普通にretuneで返すだけではダメなのでしょうか。 解決方法がお分りの方がいらっしゃいましたらご教授のほうおねがいします。

    • ベストアンサー
    • PHP
  • 関数に配列を渡して値を変える

    関数に配列を渡して値を書き換えたいのですが、文字配列である char b[10]="abc"; の書き換えが綺麗にできません。 どのように書いたら綺麗にできますか? void hen(int *a, char *b,char **c){ *a=7; b[0]='d'; b[1]='e'; b[2]='f'; //こういう書き方なら渡せるけれどb[10]="def"; 見たいな書き方で一行で値を渡す方法はないものかな? *c="jkl"; } void main (void){ int a=5; char b[10]="abc"; char *c="ghi"; hen(&a,b,&c); printf("%d %s %s\n",a,b,c); }

  • VBAの一次元配列から二次元配列へ

    A列にa1~a100まで数字が入ってます。 それを、b1~b5,c1~c5,…省略 u1~u5までに、データを 5行ずつ移したいのです。 b1にはa1、b2にはa2の値を、u5にはa100の値を入れたいのです。 マクロの自動記録?を使うとできることはできるのですが…。 一次配列→二次配列で、出来ると聞いたことがあるのですが。 ※VBAは全くの初心者です。 コードに説明もつけてくださるとすごく助かります。 どうかよろしくお願いいたします。

  • 配列の並び替え

    下のように5つの配列がA~E列まであって、2、3行目にデータが入っています。このときに、2行目の値が3行目の値より小さい配列で、かつ、2行目の値が小さい順に並べる。その後に、3行目より、2行目の値の方が大きい配列を3行目の値が大きい順に並べるマクロコードを教えてください。   A B C D E←列      1  1 2 3 4 5←配列番号 2  4 9 8 6 2 3  1 5 7 10 3      ↑ 行    ↓     A B C D E 1  5 4 3 2 1 2  2 6 8 9 4 3  3 10 7 5 1

  • エクセルVBAでワークシート関数のようにしたい

     例えば、セルA1に日付を入力して、セルB1に関数WEEKDAYが入力されていると、すぐセルA1の値を返してくれますが、これと同じことをVBAで再現したいのですが、可能でしょうか?  マクロやVBAでWEEKDAYを記述しても、「ツール」→「マクロ」→「マクロ」か「VBA」でやらないとA1の値をB1に返せないので、A1に日付を入力した瞬間、B1に値を返したいのですが、よろしくお願いします。

  • 配列数式を用いたINDEX関数について教えてください

    INDEX関数について教えてください。 先日来、配列数式について教えていただいている者です。 相場の始値を表示させる式で、INDEX関数を使うと良いと教えていただきました。その際、同じ日にち内でデータを拾う形で質問し、回答していただきましたが、その後、自分で、異なる日にちも含めて表示させようとしたところ、「0」の表示となってしまいました。 式は日にちを変えただけなのに、なぜエラーとなってしまうのかがどうしても分かりません。どうか教えてくださいm(_ _)m 表を添付しましたが、式が小さくてみずらいかと思いますので、下記に表示させていただきます。 【2008/1/4の式】   INDEX($C$2:$C$13,MATCH(MIN(IF(($A$2:$A$13="2008/1/4"*1)*($C$2:$C$13<>0),$B$2:$B$13,"")),$B$2:$B$13)) 【2008/1/7の式】 INDEX($C$2:$C$13,MATCH(MIN(IF(($A$2:$A$13="2008/1/7"*1)*($C$2:$C$13<>0),$B$2:$B$13,"")),$B$2:$B$13))

  • 多次元配列を、1次元の配列にする関数を書いてください。

    以下のように、多次元配列の配列をペチャンコにする関数(array_flatten)ってどうかきますか? <?php $arr[0] = 'a'; $arr[1][0] = 'b'; $arr[1][1][0] = 'c'; $arr[1][1][1][0] = 'd'; $arr[1][1][1][1][0] = 'e'; $arr[1][1][1][2] = 'f'; $arr[1][1][2] = 'g'; $arr[1][2] = 'h'; $arr[2] = 'i'; function array_flatten($arg){   処理; } $new_arr = array_flatten($arr); print_r($new_arr); ?> ↓ Array (   [0] => a   [1] => b   [2] => c   [3] => d   [4] => e   [5] => f   [6] => g   [7] => h   [8] => i ) ※関数のなかで、ペチャンコの配列を格納するための新しい配列を宣言すると、 同関数を再帰的に呼び出したら、その配列が初期化されますよね?

    • ベストアンサー
    • PHP
  • 関数から呼び出される別の関数でも同じ配列を使うには

    配列をグローバル変数化して、使おうとしています。 <?php $strMoji=array("a","b","c","d","e","f","g","h","i"); $result=fun_disp(2); function fun_disp($i){ global $strMoji; echo $strMoji[$i]; return true; } ?> とすれば、$strMoji[$i];には、c が入っていると表示されました。 ところが、 <?php $result=fun_example(8); function fun_example($j){ echo $j; $strMoji=array("a","b","c","d","e","f","g","h","i"); $result=fun_disp(2); } function fun_disp($i){ global $strMoji; echo $strMoji[$i]; return true; } ?> とすると、$strMoji[$i]; が表示されなくなりました。 やりたいことは、「ある関数内で使っている配列を、その中から呼び出される 別の関数でも使いたい」ということです。 しかし、方法が分からないでいます。どのように書けばいいのでしょうか? ※関数に、2を投げたり8を投げたりしていますが、この値は適当です。

    • ベストアンサー
    • PHP
  • エクセル統計関数の解釈に関して

    よろしくお願いいたします.以下はエクセルの関数ヘルプの抜粋です =TTEST(A2:A10,B2:B10,2,1) スチューデントの t 検定の対をなすデータの、側分布に従う確率を求めます (0.196016) . この確率という意味がわかりません. 下記の値があったとして,今までの統計では自由度と危険率5%の交点の値,たとえば危険率5%,自由度10の値 2.228 と比較するための値をTテストで求めることがTテストだと考えて計算しましたが,この関数では比較するための数値にはなりません. 例を挙げると [3.2 4.1 4.0 3.7 3.0 3.2 3.5 2.9 5.1 4.0 ]ここまでA集団 [3.6 4.3 4.5 5.0 3.9 3.8 3.3 3.8 5.3  3.5]ここまでB集団 この値を関数TTESTで計算すると 0.0306位の値になります. いままでは式 t=(|Aの平均-Bの平均|)/ (((Aの標準偏差)^2/(Aの人数-1))+((Bの標準偏差)^2/(Bの人数-1)))^(1/2) の式から求められた値1.454がTテストだと思っていました.全く数値が違うのですがTTEST関数で求められた数値はいったい何の数値なんでしょうか? 関数ででてきた数値は何かしら今まで自分が考えていた数値に関係があると思うのですが,どう関係しているのでしょうか? 長々と稚拙な書き方で申し訳ありませんが,どなたか理解されている方がおられましたら,解説をお願いいたします.

専門家に質問してみよう