B セル間の集計
GeoGebraの表計算ビューにあるツールグループのうち,集計に関するものです。
総和/平均
次のような総和と平均を求めてみましょう。
GeoGebraの総和/平均ツールでは,選択した範囲のすぐ下のセルに計算結果ができます。
したがって,ひとつ飛ばしたところに平均を入れるということはツールではできません。
そこで,先に平均を求めて移動することにします。
まず計算範囲を指定します。マウスドラッグか,Shift+カーソルキーで範囲指定ができるのはExcelなどと同様です。
(下図右)
平均ツールをクリックすると平均が計算されます。(下図中)
2つのセルを選択して移動します。移動はキーボードで Ctrl+X,Ctrl+Vでできます。(下図右)
今度は総和ツールで合計を求めれば上図のようになります。
なお,選択範囲に数値でない値(たとえば文字列)が入っている場合は結果が0になりますので要注意です。
Cinderellaでは,総和は列ごとの和をsum() で簡単に求められます。
平均を求める関数はないので,データ数をカウントして割算をします。
データ数のカウント方法はいくつかありますが,ここでは要素が空でないかどうかで判断してカウントすることにします。数値以外の文字が混在する場合は,数かどうかで判断してカウントすることになります。
data=[["",12,8],["",23,21],["",14,15],["",6,13]];
sum=apply(1..length(data_1),0); // 総和を入れるリストを用意
average=sum; // 平均を入れるリストを用意。sumと同じ
sum_1="合計";
average_1="平均";
repeat(length(data_1)-1,s,start->2,
sum_s=sum(column(data,s)); // s列目を取り出したリストを作る。
average_s=sum_s/length(column(data,s));
);
data=append(data,sum);
data=append(data,average);
drawtable([0,0],data,width->55,align->"right");
sum() 関数は選択範囲に数値でない要素がある場合,文字列か未定義であれば無視します。それ以外の,たとえば配列だったりすると結果は未定義になります。
したがって,数値だけの合計,平均を求めるのであれば repeat() ループの中を次のようにします。
repeat(length(data_1)-1,s,start->2,
col=column(data,s);
sm=0;
co=0;
repeat(length(col),t,
if(isreal(col_t),sm=sm+col_t;co=co+1);
);
sum_s=sm;
average_s=sm/co;
);
カウント
空でないセルの数を数えます。表計算ソフトの countif() に相当します。
次の表で,B1からC4までを選択しておき,カウントツールをクリックすると,カウント結果が次の行にできます。
count() と異なるのは,条件付きでのカウントではないということです。
Cinderellaでは,前項で行ったとおりです。
data=[["",12,8],["",23,21],["","",15],["",6,13]];
count=apply(1..length(data_1),0);
count_1="カウント";
repeat(length(data_1)-1,s,start->2,
col=column(data,s);
repeat(length(col),t,
if(isreal(col_t),count_s=count_s+1);
);
);
data=append(data,count);
drawtable([0,0],data,width->60,align->"right");
最大値/最小値
合計・平均のときと同じように作ります。
範囲を選択し,先に最小値ツールをクリックして最小値を求め,下に移動した後最大値を求めます。
Cinderellaでは,max(),min()という関数を用います。列ごとに最大・最小を求めてリストの末尾に追加します。
data=[["",12,8],["",23,21],["",14,15],["",6,13]];
maximum=apply(1..length(data_1),0);
minimum=maximum;
maximum_1="最大値";
minimum_1="最小値";
repeat(length(data_1)-1,s,start->2,
col=column(data,s);
maximum_s=max(col);
minimum_s=min(col);
);
data=append(data,maximum);
data=append(data,minimum);
drawtable([0,0],data,width->60,align->"right");
なお,範囲内に数値以外のものが含まれている場合,GeoGebraでは未定義値になります。Cinderellaでは,文字列か空であれば無視して結果を出します。