SSブログ

ワークシート関数をマクロで使う法 [ソフトウェア/PC関係]

Microsoft Office Excel 2007 (メーカー提供:3,000円キャッシュバックキャンペーン中)
MS Office Excel 2007
私が使ってるのはまだ2000だけど :-p

公私ともにExcelを使う機会が多かったりする。で,根がプログラマなものだから,VBAのマクロなんてのも結構書く。で,今日たまたま,これまでワークシート関数で計算していた処理をちょこっと改良するのに,取り敢えずその元になる式をVBAマクロにコピペしてみたらエラーになった。RoundUpという数値の切り上げをする関数が見つからないという。そんなこといったって,セルに直接式を書けば使えるんだけどなぁ。ははぁ,これは例の,ワークシート関数とマクロの関数は別物ってやつか?

確かにこれまでも何度か同じ事があって,その度にそのワークシート関数とコンパチなマクロを自分で書いてたんだった。RoundDown(数値の切り捨て)とか。それはそれで別に大した手間でもないのだけど,何か原始的っつーか,ITじゃないよなー,と遅ればせながら思って調べてみたら,ありましたありました。マクロの中でワークシート関数を呼び出す場合は,"Application."っていうのを前に付ければいいんだそうな。要は名前空間が違うということね。RoundUp関数なら,"Application.RoundUp"でOK。早速やってみたら,本当にちゃんと動いた。

ワークシート関数の名前空間が別,なんてのは容易に想像がつく話で,以前も調べた記憶があるのだけど,その時は見つからなかったはず。探し方も悪いんだろうけど,VBAのヘルプも悪いんじゃないかと責任転嫁してみたり。MSものに限らないけど,ヘルプの検索機能って,的外れな結果を山ほど返すことが多いしね。かといって,条件を絞りすぎると,肝腎なものにヒットしなかったり。VBAのデバッガもねぇ,「関数が見つかりません」じゃなくて,「ワークシート関数みたいだけど,それなら"Application."が必要だよ」くらいいって欲しいよなー。


nice!(0)  コメント(2)  トラックバック(0) 

nice! 0

コメント 2

Aska

あけましておめでとうございます。HiroさんでもVBA書くんですね。
私もVBAよく書くんですが、このワークシート関数というのは普通のVBの関数よりも処理が早いそうです。何故だかわかりませんが。
by Aska (2009-01-06 12:57) 

Hiro

言語としてのVBAは嫌いですが,他に選択肢がないですしねぇ。Excelでいろいろ分析するのに,余計な技憶えるより,VBA使う方が手っ取り早いですから。Perlが使えたら,私的には最高なんですけどね。

ワークシート関数が速いのは,組み込みでコンパイル済みだからですかね? VBAの関数はPコード(って今は言わない?)だったりして。いや,適当言ってるだけですが。
by Hiro (2009-01-06 22:33) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。