2010-04-24[n年前へ]
■続 エクセルにおける循環参照時の計算順序
「エクセルにおける循環参照時の計算順序」で書いたような反復計算がおこなわれるのは、あくまで「循環参照」がされているセルに対してである。この「循環参照がされているセルに対して」ということは、えてして忘れてしまいやすい。つまり、シートの一部に「循環参照」がされているセルがあれば、シート全体が反復再計算されるのだ、という勘違いをしてしまいやすいように思う。
反復計算がされるのは、あくまで「循環参照」がされているセルだけ、である。「循環参照」がされているセル群だけが反復計算の対象になり、それらのセル群の(前回計算結果との)変化量が所定値以下になるまで、それらのセル群に対して再計算を(前回記事のような順番で)行うことになる。
シート上で「循環参照がされていないセル」に関しては、再計算されることはなく、初回の計算時の値がそのまま使われる。だから、たとえば、どこかのセルに乱数値を返すようなものが含まれていたとしても、つまり、計算ごとに明らかに変化するようなセルが含まれていたとしても、(循環参照がされていない限りは)そのセルの値は初回の計算で決まり、変化することはない。考えてみれば、当たり前の話だが、油断するとその当たり前を忘れてしまう。
えてして、反復計算が行われる時には、シート全体が再計算されるという勘違いが頭の中に忍び込むことがある。そして、その間違った先入観のもとに、エクセルでプロトタイピングをしたりすると、思ったような計算がされず、ラピッド・プロトタイピング、すなわち、素早くたたき台を作とうと思ったはずなのに、多量の時間を費やす羽目になってしまったりする。
エクセルの基本的な機能だけを、しかし、その基本的な機能を深く解説した本を読んでみたい。
2010-06-17[n年前へ]
■エクセルのグラフを立体(赤青メガネ)出力してみよう!?
先日、「3D AVS Player用アナグリフ・ビュアー」を作りました。それは、左右の視差画像出力を行っているアプリケーションのウィンドウを勝手にコピー&画像合成することで、アナグリフ(赤青メガネ)出力を行うだけのソフトウェアです。つまり、左右の視差画像出力を行っていさえいれば、3D AVS Playerでなくても良いわけです。
そこで、今日は同じデータに対して異なる視点から描画した2つのグラフを並べたMicrosoft Excelのウィンドウを、前回作ったソフトウェアで強引にアナグリフ立体画像にしてみることにしました。そのようすが、下(と右上)のスクリーンショットになります。
そろそろ、表計算ソフトのエクセルも立体動画表示機能を備えても良い頃合いであるような気もします。そういうわけで、そんなアドインソフトウェアを作るために、今日はこんなラフスケッチをしてみた、というわけです。近く、エクセルお気楽簡単三次元アドインを作ることができたらいいな、と思っています。
2010-06-21[n年前へ]
■RubyでExcelの複数のグラフをグルグル回すには?
RubyでExcelの複数のグラフをグルグル回したければ、たとえばこんなコードを書くことになります。適当にExcelでグラフを作りさえすれば、それらのグラフを同じように一括してグルグル回すことができます。ここに挙げた"Rotation"と、あとは、"Elevation"を操作してやりさえすれば、色々な眺め方ができると思います。
require 'win32ole' excel=WIN32OLE.connect("Excel.Application") 30.step(180,5) do |rot| excel.ActiveSheet.ChartObjects.each do |chartObject| chartObject.Chart.Rotation=rot end sleep(0.05) end
■エクセルのグラフをマウスでグリグリ動かしながら赤青メガネで飛び出す立体動画で眺めよう!?
マイクロソフトのエクセルでチャート(グラフ)を作り、そのチャートをコピーして同じチャートをふたつ横に並べさえすれば、それを外部からマウス操作で自由自在に動かしつつ・アナグリフ立体動画として眺めることができるソフトを作ってみました。その動作のようすが、下のようになります。三次元グラフをマウスでグリグリ動かしつつ(しかも複数グラフを同時に)、さらに、赤青メガネ(アナグリフ)立体画像として眺めることができてきるのがわかると思います。
この上の動画では、画面上半分にエクセルの画面があり、左下に作成したソフトが表示している(赤青メガネ用の)立体画面があります。赤青メガネ用立体表示祖をしている画面の部分でマウス操作をすれば、立体グラフを自由自在に動かすことができる、というわけです。
エクセルでは、残念ながら、あまり三次元的に意味のあるチャートを作ることはできません。たとえば、下のグラフはExcel 2010で作った三次元チャートですが、今一つ立体チャートのワクワク感を楽しむことができるようなものではないように思います。
しかし、どんな道具も使う人次第ということもあるわけですから、うまくエクセルを使いこなせばきっと面白い立体的なチャートを作り出すことができるように思います。面白く・新鮮な立体グラフを、簡易な立体ディスプレイであるアナグリフ表示でリアルタイムに色々眺めることができれば、きっと面白いのではないでしょうか。
今日作ったソフトは、ここに置いておきます。エクセルのグラフを外部から操作するソースコードのポイントは、近く、適当にまとめて公開しておきます。
2010-06-22[n年前へ]
■C++で(開いている)エクセルのチャートをグリグリ動かしてみよう!?
昨日は、RubyでWin32Oleを使いMicrosoft Excelのチャートを操作するコードを書いたので、今日はC++(Borland C++ Builder)でExcelの三次元チャートをグリグリ動かすためのコードを書いたときのエッセンスをここに書き写してみることにします。こういったコードは書き方を一回眺めれば、あとは比較的簡単に書くことができたりするものですから、ここにメモしておくことにします。下の例は、すでに開かれているエクセルのワークシート上にあるチャートに対して処理をする場合のものになります。
#include <Comobj.hpp> Varient excel=GetActiveOleObject( "Excel.Application"); Varient sheet=excel.OlePropertyGet( "ActiveSheet"); Varient chart=sheet.OlePropertyGet( "ChartObjects",1).OlePropertyGet( "Chart"); int rotation=chart.OlePropertyGet( "Rotation"); int elevation=chart.OlePropertyGet( "Elevation"); chart.OlePropertySet( "Rotation",rotation) chart.OlePropertySet( "Elevation",elevation); excel=Unassigned;