hirax.net::Keywords::「表計算」のブログ



2009-07-25[n年前へ]

エクセルの計算プロセスの詳細 

 Microsoft Excelにおける計算プロセスの詳細

エクセルにおける循環参照時の計算順序 

 表計算ソフトのエクセルを使えるようになりたいと考えた。そこで、(これまで近づかないようにしていた)エクセルを使ってみることにした。まずは、エクセルの計算順序について調べてみた。もう少し具体的に書くと、計算の順番が「セル配置」に依存するのはどのような場合かを調べてみた。

 まず、最初にわかったのは「循環参照がない場合」には、(各セルの)計算順序は「セル配置」に依存しないということである(エクセルの計算プロセスの詳細)。また、「手動計算」や「反復計算」を行うようなオプション設定にしていたとしても、循環参照さえなければ(各セルの)計算順序は「セル配置」に依存しなかった。

 その一方で、循環参照があると、(各セルの)計算順序は「セル配置」に依存するようになる。具体的には、左上から横1行を計算したあと、その下の1行を計算し、さらにその下の1行を計算する…という具合である。

 だから、「反復計算」を1回だけ「手動計算」で行うような設定にし、
B1に2
A1に=B2
C1も=B2
B2は=B1
B1にA1-C1
という風に入力し、F9を押して手動計算させると、次々と値が変わり、6回周期の動きを示す。しかもA1とC1はいつも同じ値だが、その差分をとっているはずのB1は、ゼロになる瞬間もあるが、2とか-2とかゼロでない値にもなる。

 これは、循環参照が行われている場合に、反復計算オプションを付けた際の「各セルの計算順序」が前述のようだからである。当たり前の話のようだが、少し面白い。

2009-08-24[n年前へ]

(恥を忍んで)RC形式でエクセルを使うスクリプトを書いた 

 エクセルは便利だが、LEGOブロックのようなものだ。舞うを掴んだ手を動かし、ワークシートの上で泥臭い作業をしているうちに、いつしか何らかの機能を持ったものができあがる。時間はかかるが、確かに何かができあがる。しかし、どうしようもなく、再利用しづらく、行き当たりばったり感が否めない。

 かといって、スクリプト言語で作業をしようとすると、何らかの機能を実現する「ライブラリ」を探したり、あるいは、教科書を広げ関数機能を実装する手間が必要になったりする。もちろん、サラサラとコードを書きおろすことができる人は別だが、エクセルもスクリプト言語も色々な解析手法自体も苦手な人間には、そういった作業がどうしても必要になると同時に、何ともシンドく感じてしまう。

 今日、データ解析をするRubyスクリプトを書くときに「(CSVファイルを介して)エクセルの機能」を使った瞬間には、さすがに「これは情けないな」と自分でも思った。どういうことかというと、たとえて言うならば、配列の標準偏差を計算するために、こんなスクリプト(a.rbと名付けておこう)を書いたわけである。

num=100
num.times{ datum << rand()*100 }
puts 'STDEV,=STDEV(R[1]C:R['+(num+1).to_s+']C)'
datum.each{ |v|  puts ','+v.to_s }
 そして、
ruby a.ruby > a.csv
a.csv
とすることで、(たとえば)100個の配列の標準偏差を計算したのだ。つまり、「何らかの機能を実現する関数を実装・探す」のが面倒くさくて、エクセルにその作業をさせるスクリプトを書きなぐったのである。・・・実に情けないとしか言いようがない話だ。

 ・・・ちなみに、こんな風に黒魔術師”マイクロソフト エクセル”の力に頼ったスクリプトを書くときには、セルの位置指定方法は「RC形式」にしておくのが、楽でいい。もちろん、こんな情けなく・小汚い作業はしないのが一番なのは、言うまでもない当たり前のコンコンチキなのである。当たり前だのクラッカーなのである。

2009-08-25[n年前へ]

Excel2007で学ぶ画像処理の基礎 

 「Excel2007で学ぶ画像処理の基礎

 前回、Excel2007で画像表示ではエクセル2007を使って、セルに画像の画素を割り当てて、画像を表示する方法を紹介しました。
 今回は、このファイルを応用して画像処理をエクセルで試せるようにしてみました。

2009-09-13[n年前へ]

エクセルで「ランダム・ウォーク」アニメーション 

 「Excelでランダム・ウォークを計算させ、アニメーションさせる」と結構気持ちが良いものです。下の動画は、Excelで50個の粒子をランダム・ウォークさせている動画です。動画が始まって数秒した辺りから、計算が始まり、粒子がブルブル振動しながら拡散していきます。



この計算・グラフ表示は、(マクロ機能は使わずに)Excelの反復計算機能を用い、反復計算の回数は1回、計算タイミングは手動し、F9キーを押しっぱなしにすることで、行っています。Excelファイルは、RandomWalk.xls(35kB)としてダウンロードできるようにしてあるので、それで実際に試すことができるようになっています(反復計算の設定は上記通りにしておいてください)。

 計算の中身は、各粒子のX,Y座標を示すセルに対し、(単純に書くと)「自分のセル=自分のセル+乱数(-0.5~0.5)」と入力してあるので、反復計算を1回するたびに、各セルの値が少しランダムに動いていく・・・という具合です。

 最左上のセルは、計算内容をリセットするためのフラグです。0を入力して、F9を一回押すと、計算内容がリセットされます。ランダムウォークの計算をする時には、この最左上セルに1を入力し、F9を押せば(押し続ければ)刻々と計算が実行され、グラフ上でランダムウォークのアニメーションを眺めることができます。最左上のセルの値を「各粒子のX,Y座標を示すセル」にかけているので、(反復計算を行った後でも)計算内容のリセットを行うことができる、というわけです。

 Excel作業につかれたとき、粒子たちに「ランダム・ウォーク」をさせ、プルプル震えながら動いていくようすを眺めてみると、何だか少し疲れがとれるかもしれません。

エクセルで「ランダム・ウォーク」アニメーション








■Powered by yagm.net