トップ 最新 追記

十日日記


2006-11-04

Link 右クリックで特殊貼付

ジェルジェットプリンターG7570が再び故障した。6月と同じエラー番号はERR-999で、返ってきた伝票には維持ユニット故障とある。ちなみに修理は引取修理で、費用は17,800円。慈しんで使っているつもりなのだが、愛情が足りないのだろうか。とりあえずプリントサーバーR-9500U2を購入してネットワーク環境下で使えるようにし、機能を増強してみた。機嫌を直してくれればよいのだが。

本題に入る。Excel 2000のワークシート作業で振る舞いが気に入らない点に「貼り付け」がある。

第一。Excel 2000以降では、外部アプリのデータはhtml形式で貼り付けされる初期設定になっている。たとえばWebページのテーブルからデータをコピーして貼り付けると、そのテーブルの背景色やフォント情報まで貼り付いてしまうのだ。かといってテキスト形式で貼り付けると、今度は1つのセルに1行まるごと貼り付く。私がほしいのは「書式を抜いた表形式のデータ」なのだが、これには2ステップ踏まなくてはならない。面倒なことだ。

第二。Excel内部でのコピー・ペーストでは、数式・書式・値すべて一緒くたに貼り付けるのが初期設定になっている。ドラッグによるフィル操作でもそうだ。しかし完成されたワークシート内で数値を変更する場合には、値だけ貼り付けたい。この場合は、「形式を選択して貼り付け...」を選択してダイアログを出してから「値を貼り付け」を選ぶ。このステップも面倒だ。

右クリックで特殊貼付そんなわけで、右クリックメニューに「貼り付け」だけでなく「値を貼り付け」「書式を貼り付け」を追加するマクロを用意した。アドインとして登録すると、起動時から動作する。ファイルの透明性を高めるため、インストールは手動で行なう。興味のある人はご利用いただきたい。私は便利に使っている。

本当のところは「シートの保護」の項目の中に「書式の保護」があれば便利なのだが……と思って調べてみると、Excel 2002には同機能が存在するらしい。

Tags: Excel

2006-11-05

Link IFERROR関数を実装する

先週は予定が立て込んだ1週間だった。週末、緊張の糸が切れた途端に免疫力が低下し、ヘルペスを発症した。からだは正直だ。現在、4時間ごとにアシクロビルのカプセルを飲んでいる。カプセルはドイツ語(Kapsel)からの輸入らしいが、戦前に入ってきた単語なのだろうか。

さて、見栄えも考慮してExcelのワークシートを作成する場合、エラー表示を抑制するための工夫を凝らすことがある。方法としては2種類あって、(1)条件付き書式を用いる、(2)IF関数を用いる――のいずれかを用いるのが定番だ。エラー判定には、上記のどちらにもISERROR関数を使う。

基本的には(1)のほうが便利だ。(2)の方法は「=IF(ISERROR(任意の数式),"",任意の数式)」という書きかたをする。見てのとおり、同じ数式を二度書かなくてはならない。引数を多くとるVLOOKUPを使った場合など、修正は面倒になる。構文として見ても、エラー表示部がサンドイッチされていて美しくない。

とはいっても、数式だけで済むという利点をとって(1)ではなく(2)の方法を選ぶことはある。そこで、任意の関数とエラー出力との2つを引数にとる関数があって、たとえば先の例なら「=FUNC(任意の数式,"")」とできればスッキリすると思わないだろうか。実はExcel 2007では「IFERROR関数」として、まさに所望する関数が実装されているのだ。Excelも少しずつ進歩している。

同じ機能を現行のExcelで実現するには、VBAでユーザー関数を定義すればいい。そのための下調べをしていたら、なんとマイクロソフト自身がExcel 97-2003用のIFERROR関数の実装例を公開していた(「Excelでの数式エラーを隠すサンプル」)。いつページが移動するとも限らないので、関数定義の部分を下に引用しておく。簡単な関数だが、実用性は高い。

Function IfError(formula As Variant, show As String)

    On Error GoTo ErrorHandler
    If IsError(formula) Then
        IfError = show
        Else
            IfError = formula
    End If
    Exit Function

    ErrorHandler:
        Resume Next

End Function
Tags: Excel

2006-11-09

Link 科学の経済

統計学でリスクと向き合う 統計学の入門書の中で私がいちばんよいと思っているのは、宮川公男『基本統計学』(有斐閣、1999年、第3版)である。よいところは何点かあるが、たとえば平均・分散を紹介したあとで即座に回帰分析に移るのは実践的だと思う。その宮川先生がエッセイ集を出しているのを最近知り、宮川公男『統計学でリスクと向き合う』(東洋経済新報社、2003年)を購入した。

本書は、統計学入門書の章立てに従って話題を配列している。ただし分布の話はあまりなく、仮説検定に重点が置かれている。仮説検定論における誤りは第1種・第2種に分けられるのだが、具体例を数章に分けて何度も繰り返し説いているのだ。特に、自らの癌の再手術を受けるべきか否かで医師の診断を検定するくだり(第26章、第27章)は、文字通り命がけの決断である。

日経225の銘柄入替問題や囲碁のハンディ(コミ5目半から6目半への変更)など、具体例が本書の売りになっている。調和平均を導入する際に速さの平均を出すのは常套手段だが、そこで数字を80km/hと20km/hとにしているのは見事だ。私なんかは40km/hと60km/hとにして、速さの平均は50km/hではなくて48km/hだと持っていくのだが、これだと差が小さくてインパクトがない。ところが80km/hと20km/hとの調和平均は32km/hだから、算術平均との違いが実感できる。ちなみに「ドルコスト平均法」を実行すると1本あたりの購入価格が下がるという話は、正確には調和平均になるということだ。速さよりはなじみにくいが、経済関係には使える例だろう。

また、この本で私は初めて「科学の経済」という言葉を知った。ここでの「経済」は「思考の経済」「規模の経済」といった術語で使われる意味である。本書の例に従うと、(a)碁石を白黒10個ずつデタラメに並べた場合、(b)実際の対局で20手まで並べた場合とでは、囲碁をまったく知らぬ者にとっては違いがないものの、棋士ならば(b)の図を見ただけで石が打たれた順番までほとんどわかる。つまり体系的な知識を獲得することで、少ないデータの断片から多くの情報を得ることができる、という話だ。

本書で加えてほしかった話題としては、対数目盛がある。幾何平均や複利のついでに入れられたらよかった。数値が定率で上昇する場合(つまり指数関数になる場合)は、直線目盛では基準時から離れた時点の変化が読み取りにくくなる。そこで使われるのが対数目盛で、定率での変化を直線で表わすことができる。その昔、Yahoo!ファイナンス日本版のチャートには対数目盛で表示する機能がなく、米国との差を感じたものだ。実は現在でも、対数目盛が標準になっている米国版に対して日本版は直線目盛をデフォルトとしている。

残念なのは、章の終わりに設けられている読者からの投書だ。いかにも東洋経済らしく、「A社副社長T氏」とか「N銀行頭取K氏」とか「K大学名誉教授T氏」といった御仁の与太話が並んでいる。本書の品格は、これらの部分によって若干損なわれてしまった。

Tags:

2006-11-12

Link 小篆とファミリー幻想

ポスターを見るともなしに見ていたときのこと、漢字の「しんにょう」が気になりはじめた。このまえ白川静が亡くなったときに追悼文が新聞紙面を賑わしたが、そのなかに「道」という字は異種族の首をさらした云々という話が出ていたのも脳裏にあったのかもしれない。通・進・運・過……と考えていって、「しんにょう」は道とか場所に関係する部首だったのかと今ごろになって意識した。

しんにょうの元になった字は「ちゃく」という字で、文字コードとしてEUC-JPを用いたこのページでは記すことができないけれども、彳と止とを組み合わせた文字らしい。篆書を見ると、たしかにそうだ。

その篆書(小篆)を眺めているうちに、フォントがほしくなった。日本のものをいくつか検討したのだが、あまりそそらない。結局購入したのは「方正小篆体」という中文書体である。文字規格が大陸のものなので目的の漢字を見つけるのに苦労する(先に宋体で目的の文字を探して方正小篆体に変更する)が、ワンポイントとして気に入っている。小篆は現代では数文字の装飾にしか使わないから、もっと堂々とした書風のものがあるとよいだろう。

篆書Windows Vistaでは和文書体環境にも変化がある。たとえばMeiryoは、Boldウェイトを備えた初の和文書体かもしれない。文字をずらして重ねることで実現した貧者のボールドではなく、専用に設計されたボールドで画面表示される。個人的な好みはともかく、ボールドフォントファイルが用意されたのは記念すべきことだ。

しかし懸念もある。他の和文書体で発生する問題は解決されないままだ。和文書体にはボールドを使わずに別ウェイトのフォントを選択すべしといくら唱えても、巷では平気でボールドが使われている。そもそもInternet Explorerも貧者のボールドで表示しているのだ。

私が渇望している機能は、コントロールパネルでフォントのファミリー属性が設定できることだ。これを仮に「Family Organiser」と名づけよう。合成フォントのファミリー版みたいなものである。もっとも、たとえ新たにファミリーを生成しても和文TrueTypeフォントではファミリー属性は実質的な意味を持たないようで、「ボールド」を押すと専用のフォントに切り替わるというのは妄想にしかならない。Adobe系のソフトでは同一ファミリーの書体はまとめて表示されるが、和文TrueTypeフォントではそのようにはならないことが現実を物語っている。

Tags: PC

2006-11-15

Link 使用場所を限定する #01

前にも書いたことがあるが、Excel VBAを利用したDBアプリを作っている。ADOでSQL Server 2000に接続し、データを読み書きする。Excel VBAはVB6ベースであり前時代的ではあるが、扱う言語がVBAとSQLとの2つで済むので開発効率がよい。Webベースでやるとすると、任意のスクリプト言語+SQL+HTML+CSS+JavaScriptを扱わなければならず、その上テンプレートエンジンやフレームワークの独自仕様を理解せねばならない。1人での作業が破綻するのは目に見えている。

SQL Serverを使用したので、データソースとして直接URLを記すだけで外部からのDBアクセスが可能になる。SQL ServerはTCP 1433・UDP 1434の両ポートを使用するので、ルーターで予め開けておく必要がある。また、Slammerワームに感染したくなければSP5に更新しておくこと。ExcelやMSDEとの連携や機種依存文字の利用を考えるとSQL Serverは便利で、もっと早く導入しておけばよかった。

次なる課題は、Excelファイルが利用できる環境を制限することだ。Excelファイルからネット上のDBサーバーにアクセスできる以上、そのファイルを持ち去られると危険なことになる。パスワードは人から漏れる可能性があるし、たかが知れている。もっと物理的な制限はないかと検討し、グローバルIPアドレスを利用することにした。

想定されている使用場所は、別の目的のために全カ所でDynamic DNSが導入されている。よって、自らの(正確にはルーターに与えられている)IPアドレスがDynamic DNSに登録されているIPアドレスと一致するかどうかをチェックする機構を備えればよい。以上の結論に行き着いたのが10日ほど前のことで、そこからExcelでのインターネットアクセスについて調査をはじめた。

Windowsには、管理のための様々なカラクリが用意されている。たとえばWindows Management Instrumentation(WMI)を知ったのは11月4日のことだ。WMIについてはWMI FunWMIをいぢるを参照。Excelへの応用例としてはOffice Space: Microsoft Office アプリケーションのスクリプト作成に関するヒントとテクニックがある。WMIはWindowsの設定情報を自動管理するための仕掛けなので、これを使えば自分のローカルIPアドレスはすぐにわかる。

今回取得すべきデータは、(1)自らのグローバルIPアドレスと(2)特定のドメイン名に対するIPアドレスであり、残念ながらWMIは適用対象外だ。(1)(2)の情報は、WSHを使って外部アプリケーションと組み合わせればExcelからでも取得できる。しかしWSHを使って複数のアプリを連携させると動作が遅くなるし、不確実性も増す。できればExcelだけで完結させておきたい。

Tags: Excel

2006-11-16

Link 使用場所を限定する #02

私の理解したところでは、Excelが外の世界の道具立てを使う場合、(1)ActiveXコントロールを使う方法と(2)Win32 APIを使う方法とがある。(1)は、マイクロソフトが用意した一種のプログラムキットで、Win32 APIを利用せずに済むようになっている。使い方は(2)と比較して簡単だが、バージョンによる挙動の差と安定性に少し問題があるようだ。実際、コンパイル方法によってはサンプルコードから生成したEXEファイルが落ちたりした。一方の(2)は安定しているが、C言語に降りていく必要がある。

ネットワークプログラミングをExcelで行なう場合、利用する道具として(1)Winsockコントロール(mswinsck.ocx)か(2)Winsock API(ws2_32.dll)かを選ぶ。今回は、主に(2)の方法を用いた。

Win32APIをVB(VBA)で使う場合、Cの関数をVBに置き換えるためのラッパーが必要になる。VB 6.0付属のAPIビューアを使うとラッパー関数を自動的に生成してくれるが、ほとんどの関数はWebを探せば定義の方法が見つかる。たとえばgethostbynameは、以下のように宣言する。

Declare Function gethostbyname Lib "ws2_32.dll" _
    (ByVal name As String) As Long

最初私は、けっこう楽観的に考えていた。DNSクライアントを作成しなくても、DDNSを登録しているホストへ接続してgethostbynameによってIPアドレスを得ればいいと思っていたのだ。厄介なのは、gethostbynameの返り値はhostent構造体へのポインタであり、IPアドレスはhostent.addr_listという配列の中に入っている点である。そこで、メモリー番地から変数に落とせばIPアドレスの値が得られる。これで一件落着と思っていたのは今日の昼ごろだ。書いてしまえば一言ですむが、最初はわからず途方に暮れた。

しかし、そうは問屋が卸さない。そのホストで何らかのサーバーが動いていればいい。一部箇所はネットワークカメラが設置されているので、TCPの80番ポートで接続すればgethostできる。しかしそうでない箇所ではタイムアウトエラーが発生するだろう。接続できないのにIPアドレスが取り出せるわけがない。やはりDNSクライアントを作成しなくてはならないのだ。残された時間を考えると、「MS-DOSコマンドの標準出力を取得する」を使ったほうがいいかもしれない。

VBAによるTCP/IPプログラミング入門 今回も、書籍やWebサイトの世話になった。書籍では、志村康人『VBAによるTCP/IPプログラミング入門』(CQ出版社、2005年)のおかげで、Excelでもネットワークプログラミングが可能なことを知った。

Webサイトでは、さすがにVBAのサイトに記述例は見つからないので、VBのほうを見ていくことになる。たとえばVBIP.comはVBでのネットワークプログラミングを包括的に集めたサイトで、サンプルも参考になる。VB Magazineのライブラリもありがたい。個別記事では、「WinSock32ネットワークプログラミング入門」「Tips集――IPアドレスを取得するには」などを参考にした。VBもVB.NETやVB 2005の話題になりつつあるので、情報を失わないように必要事項は手元に保存しておきたい。

Excel VBAに限っていえば、クラスモジュールの利用を知ったのが収穫だった。「クラスモジュールを使った究極のVBAプログラミング」「クラスモジュールを利用しよう」「クラスモジュールをユーザーコントロールのかわりとして使う」などを参照。クラスモジュールは、ユーザーオブジェクトを定義できるモジュールで、標準モジュールでの定義とは違いカプセル化できるところが利点である。

Tags: Excel

2006-11-19

Link テスターで遊ぶ

蓄電池の残量を調べるために電池チェッカーを買おうとしていたのだが、もっと融通の利くテスターのほうがいいのではないかと考え直した。「回路テスタの選びからから使いかたまで」という記事によれば、安いものは数千円からあるという。それどころか、秋葉原では1000円以下で手に入る。

秋月電子のサイトを眺めて選んだのは、TKC社のTKPM6Aというものだ。音圧・照度まで測定できて3300円なんて夢のようだ。もう少し出せば、温度・湿度も測定できるMS8209も狙える。

数日前に届いたので試している。残念なのは音圧のレンジが45dBからだったことで、私の環境では60dB以下にできない。静寂は測れないようだ。オマケはともかく、電気に関する部分はきちんと測れる。

Tags:

2006-11-23

Link さくらでtdiary 2.1系

レンタルサーバーには、さくらインターネットのライトプランを使っている。さくらでは日記システムのtdiaryが自動インストールできるようになっていて、それを利用していた。しかし、さくらでインストールされるtdiaryはバージョンが2.0.0で止まったままである。最新の2.1系列に更新したかったが、Rubyの知識が覚束ないので躊躇していた。重い腰を上げて先ごろ更新したので、覚え書きを記しておく。

とはいっても、さくらライトプランでtdiaryをインストールするのは難しくない。(もともと入っていたのだから。)注意すべきはindex.rbとupdate.rbとのシェバン行で、「#!/usr/bin/env ruby」を「#!/usr/local/bin/ruby18」に改めておく。あとはdocディレクトリのINSTALL.htmlに従うだけだ。

ここから先は個人的な修正になる。まずInternet Explorerに標準モードで描画させるため、misc/plugin/doctype-html401tr.rbを修正する。定義文にURLを加えるだけだ。次に、plugin/00default.rbのcalender関数(142行目付近)に手を入れる。

result << %Q[<a href="#{@index}#{anchor m}">#{month}</a><wbr>|]

のようにwbrタグを入れることで「|」でも折り返し可能にしている。ただし、このタグはNetscapeの独自タグである。

また、CSSが若干変わったので手当てした。このページのCSSは、monochromeを改造したものだ。さらに念願のAmazonプラグインを組み込み、tdiary-contribからcategory_to_tabを拝借している。残りはツッコミがうまく表示できるようCSSを変えるだけだ。

追記2008-07-06。現在はwbrではなく&#x200B;(ゼロ幅空白文字)を入れることにしている。こちらはHTMLで規定されているため、Safariでも問題なく機能する。

Tags: web

2006-11-24

Link ミクロ経済学

ジュンク堂書店大阪本店に行ってきた。売場面積が1480坪で、紀伊國屋書店新宿南口店(1300坪)を上回る。私が立ち寄ったのは3階だけだが、専門書の品揃えが充実しているのが嬉しいし、平積みしない本棚は開架式の大学図書館みたいで落ち着く。淀屋橋から歩ける距離なので、これからは足繁く通いたい。

ミクロ経済学 そのジュンク堂で思いがけず発見して購入した本が、山崎昭『ミクロ経済学』(知泉書館、2006年)である。この本は、山崎先生が一橋大学で長く担当していた2年生向け講義「基礎ミクロ経済学」の講義プリントをまとめたものだ。

経済学には収穫逓減という概念がある。生産関数が対数関数のような凹型で、追加的な投資に対する産出がだんだん減っていく、というものだ。実は収穫逓減は、他ならぬミクロ経済学にも強く当てはまると思う。一般均衡理論では理論を精緻化していっても結論自体は変わらないのだから、理論家になるのでもなければ適当な水準で打ち切って他分野を勉強したほうが生産性は上がるだろう。

問題は「適当な水準とはどこか」ということだが、私は2財モデルを徹底して行なうことだと考えている。ここでの「徹底」とは、経済理論を言葉・図・式の3通りで説明できることだ。経済学には経済学なりの式の解釈がある。山崎(2006)は、その解釈の仕方を懇切丁寧に説明している。これが類書にない本書の最大の特徴だ。

基礎ミクロ経済学のプリントは、ファイルに綴じて未だに持っている。これ以上に明快なテキストが存在しなかったので、捨てるに捨てられなかったのだ。ザラ紙がだいぶ変色していて、紙が破れる前にスキャンにかけておこうかと考えていたところだった。同書のおかげで、ようやく処分できる。

Tags:

2006-11-28

Link スピログラフ

どれくらいの人が知っているのだろう。子供のころに遊んだオモチャのひとつに、穴の開いた歯車に鉛筆を刺してグルグル回すことで花模様の曲線が描けるものがあった。たしか縁日か祭かで買ってもらったもので、それこそ夢中になって遊んでいた憶えがある。このまえ近所のダイソーで見つけたので、つい買ってしまった次第だ。

Webをあたってみた結果、この商品のオリジナルは「スピログラフ」というそうだ。私は類似商品で遊んだクチで、ダイソーのそれにはデザイン定規とある。「スピロデザイン」のページに詳しいので、実物を確認したい向きはどうぞ。Javaアプレットもある。描かれる図形の正式名称は内トロコイド(trochoid)といい、Let's Enjoy SpiroDesignにあるとおり、遠山啓『初等整数論』(日本評論社、1970年)のネタにもなっている。

さて、スピログラフを与えられたとき、私はさまざまな図形を描いて楽しむだけだった。しかし、図形のパターンを見出そうとする子供もいる。歯車の直径と描かれる図形とのあいだにはどのような相関があるか、あるいは歯車に開いている複数の穴の位置を変えると図形はどのように変わるか。そういった、目に見える現象の背後にある摂理や機構を見出そうとする子供は、おそらく科学への適性があるのだろうと思う。

Tags:


プロフィール

渡辺 慎太郎(na@10days.org)

分野別表示

Admin | Client | Dev | Excel | Linux | PC | PDA | Web | iPad | web | 家電 | 文具 | | 英語 | 言語 | | 音楽

月別表示

1999|07|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|

最近の記事

雨量情報 dictionary.com Yahoo google Yahoo! 路線情報 東京アメッシュ l-mura l-aka l-momo 目次 r-mura r-aka r-daidai r-kiiro asahi.com nogulabo r-sora r-midori r-midori r-momo