ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

VBA⇔ワークシート関数呼び出し

2006-06-17 17:20:38 | PG(Excel)

ExcelのVBAからワークシート関数を呼び出す方法をまとめた。
ついでに、ネットで見かけたVolatileとかCalculateもおまけとしてメモ。
自宅のExcelならヘルプで確認できるけど、ヘルプをケチった環境だと辛いからなー。

WorksheetFunctionというのはネット上のあちこちで見かけたけど、Evaluateを見かけなかったのは調べ方が悪かったせいなんだろうな~。
それにしても、WorksheetFunctionで使えなくてEvaluateで使えたり、どっちでも使えなかったり、統一感が無さすぎ。
FormulaLocalに倣ってWorksheetFunctionLocalみたいなのでもいいから、独自環境でも全ての関数が使えるようなオブジェクトが欲しいぞ~。


ところで。
Evaluateを入力しようと思って補完機能で一覧を見てみたら、evalという関数があった。これはいったい何だろう?!と思ったが ヘルプには出てこないし、ネットで調べるには他の言語でいっぱい引っかかりそうなキーワードだし。
で、F2キーで出てくるオブジェクトブラウザで分類を探していたら、「VBAProject」の中に発見!
…って、そりゃ自分で定義した関数じゃねーか!(爆)
サンプルプログラムを作るときは、サブルーチンの名前なんか適当に付けて、覚えてないからなー。トホホ。


ところで。
そもそもは、VBAからワークシート関数を呼ぶよりも、ワークシートからVBAの関数を呼びたかったんだけど。ラッパー関数を作ってやればいくらでも呼べるけど、それじゃいちいち面倒だし。
VBAFunctionみたいなオブジェクトがワークシートから使えるようになってくれないかなー。


ファイル入出力間違ってた…!

2006-06-17 12:54:15 | PG(Java)

Javaでバイナリファイルの全読み込みをやろうと思って自分のメモを見たら、間違ってやんの(汗)
ファイルの長さを取得するのはf.length()だけど、fっていうのはFileのインスタンスなんだよね。以前はfをFileにしてたんだけど、FileInputStreamに変えたんで、そこだけ変更漏れ。

さ・ら・に!
C#のファイル入出力として書いてたものが、JavaScriptの列に入ってるじゃん!(爆)
恥ずかし~慌てて修正(汗)
(おかげでJavaScriptの列がほとんど何も無くなってしまった…まぁそういうこともある)


ついでに、各表の言語名の部分のリンクは、なるべく外した。選択するにはその方が便利だし。
で一応、ページのトップの言語でリンクするようにした。


VBAからのDLL呼び出し

2006-06-17 03:31:15 | PG(Excel)

ExcelVBAからWin32APIを呼び出す方法をメモ。
VBからDLL(Win32 API)を呼び出せるのは(やったことは無いけれど)当然だと思っていたけれど、VBAからも出来るとは思ってなかったなー。

C言語で作った関数の引数に対しVBAから値をどうやって渡せばいいか試行錯誤してみた。
intはByValのIntegerで渡せばいいし、int*はByRefのIntegerで渡せばいいのは、けっこう素直に出来てる。

でもchar[]はVBAのStringとは明らかに違うだろうし、どうするんだろう?と思って。
ポインターを渡したいところではByValのLongにすればいいことは分かった(試したのはNULL、すなわち0を渡すことだけど)ので、Stringのアドレスが取れればいいと考えた。
まず試したのはVB.NETにも有るAddressOf。だけどこれはメソッド専用らしい。
んでMSXでは変数のアドレスを取るのにVARPTRがあったけど、まさかVBAには無いだろうなぁと思いつつ試してみたら、コンパイルが通るし!!(爆)
(これは早速プログラミング言語比較に追加~!)

ちょっとネットで調べてみると、StrPtrやObjPtrなんてものもあるらしい。
でもStrPtrはまさに文字列用っぽいのに、何故か1文字しか渡せなかった。

結局結論としては、StringのByValで素直に渡せたみたいだけど…こんなのでいいのかなー? C言語の文字列と同じとは思えないんだけどなー。

まぁ僕が本当にやりたかった事はバイト配列を渡すことだから、文字列はどうでもいいんだけど(爆)


FormulaとFormulaLocalの違い

2006-06-17 01:04:54 | PG(Excel)

ExcelのFormulaとFormulaLocalの違いを初めて認識した(爆)

今まで別に困らなかったからなぁ。
というか、今回も別に困ったわけじゃなくて、偶然知っただけなんだけど(笑)

 

ついでにこっそり、Formula,FormulaR1C1,Valueに並んでTextを追加。
これ、セルにエラーが表示されているときも それがそのまま出るのでちょっと面白い。
Valueは、エラーのときはエラーオブジェクトでも返るのかな…?