版Excelでも、グラフ配色をマトモ・自由にカスタマイズしてみたくなります。Excelのチャート配色を操作するRubyスクリプトを書いてみました。作ったのは、RubyからAppleScriptを経由して、Excelを操作するスクリプトです。rb-appscriptと、(RubyからAppleScriptを使う)rb-appscriptをインストールします。順番で)次のように呼びます。0.5すると、エクセルのアクティブチャートの配色が自動的に調整されます。下に貼り付けたチャートは、左が「実に不自然なエクセルのデフォルト配色のチャート」で、右が上記のスクリプトで配色をマトモにしたエクセルのチャートです。作ったスクリプトは、1エクセルに接続し、2エクセルのデフォルト配色パレットを(テンプレートファイルから)読み込んだ上で、3軸操作をし、4調整したい色に一番近いパレット(インデクス)をチャートの各領域に対して設定する、という動作を行います。Sheme(テーマ・スキーム)の色を設定することができそうになかったので、とりあえず調整したい色に近いインデックスカラーを選び・塗りつぶす、というようにしてみました。チャート配色をマトモ・自由自在に調整するためのRubyスクリプトを書いてみました。いうオライリー本と同じように、適度に規則正しい配置やルールを感じさせるグリッド上に各種素材を配置しようとする状況下では、エクセルのインターフェースが重宝されることが多い(それ以外の代替候補に未だ決め手がない)ような気がします。...なんてことを考えていたら、「Excel方眼紙」への逆風も吹いてます。繰り広げられていました。大事なのは、道具をどんな風に使うべきか/べきでないかなんてことではなくて、道具を使うのも・その道具を介して何かを作り出すのも全てオマエ自身だ!!一体何を、今江が作り出すことができるのかが大事なんだぁ!!!という熱い雄叫(おたけ)びです。わかってない!!いいか!!?ペンに使われるな!!!ペンは使うものだ!!!ちょっと面白いな...と思うのは、Excelで「美文書」を作ろうとする人もいれば、LaTeXで「美文書」を作りたくなる人もいたりして...時に言い争いをしていたりするけれど、どちらも「道具の使い方」で一喜一憂していたりする...ということです。)...色んなことがあるなぁ、と思わされますね。B:ところで、エクセルで計算してないか、これ?A:...あ、あぁ。B:確か、大のエクセル嫌いだったよな?いつの間にか、エクセルを使うようになってたのか?A:...毎年(夏が近づく)この時期は「エクセル(表計算ソフトウェア)で編微分方程式のシミュレーションを学ぶ」という講座運営を手伝っていてな、エクセルの使い方を思い出すために、普段使わないエクセルを使うようにしてるんだよ...。1年に1回しか使わないから、使い方よくわからなかったりするんだけどな...。使い方覚える前に、すぐバージョンが変わって、インターフェースも驚くくらい丸っきり様変わりしていたりして、大変なんだよ...。B:(オマエも)変わってないなと思ったが、変わっていたところもあるもんだな。A:...まぁ、そんなもんかもしれないな。たとえるなら、おっぱいがヤング率次第で変わるところもあれば、変わらないところもある、それと同じってことさ!B:多様性があって、変わらないところもあれば・変わるところもある。それこそが、粘弾性の「おっぱい」ならぬ人間というものなのかもしれないな。Excelでルックアップテーブル(入力値と出力値の対応表を使い、入力値から出力値を返す機能)を使いハマった方がいました。その状態を再現してみたのが、下に貼り付けた画面です。(画面右にある)「入力値Table(Index)と出力値Table(Value)を対応付ける対応表」を使い、LOOKUP関数およびVLOOKUP関数により、画面左上部にある入力値(Index)から値出力をさせてみたところです。見るとわかるように、入力値(Index)には1.8とタイプされていて、(対応表は入力・出力の組み合わせとして同じ値が入っているので)返ってくるのも1.8かと思いきや、出力されているのは1.7という結果です。エクセルの「バグ」なのでしょうか?これは、浮動小数点演算の結果によるものです。対応表は1に0.1を繰り返し足すことで作ってあるのですが、10進法の0.1は2進法の分数で表現される浮動小数点では正確に表すことができないため、この「対応表に”1.8”と表示されている値」は、本当は1.8とイコールな値ではないのです。エクセルのLOOKUP関数は1.8とイコールな箇所を見つけることができず、1.7を返すわけです。ちなみに、エクセルのブックオプション(計算方法)にある「表示桁数で計算する」というオプションにチェックを入れると、こうした現象は(たいていの場合は)出なくなります。いうと、表示している程度に丸められてしまうため、「本当は1.8とイコールな値ではないもの」も1.8に丸められてしまうからです。いうわけで、エクセル(に限らず)表示されてる値は「ホント」の値とイコールだとは限りません!?というのが、今日の教訓でした。・・・あるいは、単純明快で無いことをエクセルでやってはイケマセンというのが、本当の今日の教訓かもしれません。Excelで”-1^2′′の計算結果が1で、”0-1^2′′は-1になるヒミツ!?を書きました。この話題、遙か昔から定番ですが、とても面白いと思います。1-2-3にならったに違いない!」と言われることも多いのですが、残念ながらそうではありません。"-1"ではなくて"1"になるのが「なぜだろう?」というtweetを興味深く読み、そこから辿り着いた20年前のメーリングリスト記事が面白かったので、簡単なメモ書きをしてみます。メモ書きなので、面白い記事へのポインタと(その記事に対する)わずかな感想を書いただけの日記記事です。Exponentiation"のタイトルにもなっているように、Excelという一種のプログラミング環境上での、"negation"と"subtraction"という異なる2演算子の計算順序の違いを区別する必要があります。=-A1^2は"=(-A1)^2"と計算されるけれど、=1-A1^2は"=1-(A1^2)"と計算されるというように、前者の"negation"と後者の"subtraction"が異なる演算子として区別され・違う演算順序が適用されるという話です。Petersonがメールで書いている文面がとても参考になります。それは、"negation"のような単項演算子は”exponent”のような二項演算子に優先して演算されるものだったから、それをただ踏襲すると、こんな計算順序になるよね、というものです。1-2-3との互換性を重視した」わけではないけれど、プログラミング言語の過去経緯を踏まえて考える話だよね、というものです。-2^2"と書いてから、そのファイルをtest.vbsという名前で保存して、もしもダブルクリックしたならば、(マイナス4ではなくて)"4"という答えが書かれたメッセージボックスを私たちは目にするよね。この例でもわかるように、エクセルの「ダメな話」として眺めるのではなくて、コンピューター科学の「興味深い話」として眺めるべき話じゃないか?というコメントが、とても参考になると思います。Hirabayashi)ムダサイエンティスト(他称)。