Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1311 / 13644 ツリー ←次へ | 前へ→

【75150】セルの値を配列に格納して計算するユーザー定義関数 ふじわら 13/12/21(土) 10:43 質問[未読]
【75151】Re:セルの値を配列に格納して計算するユー... γ 13/12/21(土) 12:37 発言[未読]
【75152】Re:セルの値を配列に格納して計算するユー... ふじわら 13/12/21(土) 12:59 発言[未読]
【75153】Re:セルの値を配列に格納して計算するユー... γ 13/12/21(土) 15:21 発言[未読]
【75154】Re:セルの値を配列に格納して計算するユー... ふじわら 13/12/21(土) 16:48 お礼[未読]
【75156】Re:セルの値を配列に格納して計算するユー... γ 13/12/21(土) 21:00 発言[未読]

【75150】セルの値を配列に格納して計算するユーザ...
質問  ふじわら E-MAIL  - 13/12/21(土) 10:43 -

引用なし
パスワード
   材料データを参照して特性計算するユーザ定義関数を作りたいのですが、
複数の材料データを切り替える必要があり、また一連の計算で反復的に
参照するので、最初に定数配列に格納しようと考えています。
以下のコードは、セルに入力されているデータを配列に取り込む部分を
試したところですが、エラーとなります。
いろいろと試してもうまくいません。
アドバイスを頂きたく、どうぞよろしくお願いします。

Public Const BHUDATA As Variant = Range("sheet1!a3:c116")
Function BDATA(I, j)
BDATA = BHUDATA(I, j)
End Function

【75151】Re:セルの値を配列に格納して計算するユ...
発言  γ  - 13/12/21(土) 12:37 -

引用なし
パスワード
   ▼ふじわら さん:
>試したところですが、エラーとなります。
何というエラーメッセージかも書いて、状況を説明してください。

【75152】Re:セルの値を配列に格納して計算するユ...
発言  ふじわら E-MAIL  - 13/12/21(土) 12:59 -

引用なし
パスワード
   ▼γ さん:
>▼ふじわら さん:
>>試したところですが、エラーとなります。
>何というエラーメッセージかも書いて、状況を説明してください。

本コードの場合では、再計算実行時に
「コンパイルエラー、定数式が必要です」
というエラーが出ます。

文法上の問題かと、いろいろとコードを変えて試しましたが、基礎
知識が乏しく、どうしてよいか悩んでいるところでした。
どうぞよろしくお願いします。

【75153】Re:セルの値を配列に格納して計算するユ...
発言  γ  - 13/12/21(土) 15:21 -

引用なし
パスワード
   ▼ふじわら さん:
>▼γ さん:
>>▼ふじわら さん:
>>>試したところですが、エラーとなります。
>>何というエラーメッセージかも書いて、状況を説明してください。
>
>本コードの場合では、再計算実行時に
>「コンパイルエラー、定数式が必要です」
>というエラーが出ます。

Public Const BHUDATA As Variant = Range("sheet1!a3:c116")
は定数(Const)になり得ません。
というのは、=Range("sheet1!a3:c116").Value
と解釈されますから、
そこに何が入っているかによって、変わりうるわけです。
だから定数としては不適当なんでしょう。

いや、その決まった場所なんだから、という気持ちであれば、
Public Const BHUDATA As String = "sheet1!a3:c116"
とすればOKでしょうね。
ユーザー定義関数の中で、Range(BHUDATA)として使えば良いと思います。

エラー回避の方法としては上記のとおりですが、
そもそもですが、その使い方は便利ですか?
対象セルが決まっているなら、直接、セル参照を書いたほうが良いかも。
そのほうが自動的に再計算されますしね。

なお、ワークシートのOffset関数なんていうのもありますよ。

【75154】Re:セルの値を配列に格納して計算するユ...
お礼  ふじわら E-MAIL  - 13/12/21(土) 16:48 -

引用なし
パスワード
   γさん、アドバイスありがとうございました。

セル範囲のアドレス文字を定数にする方法、理解しました。
まだ勉強しながらの段階なので、うまくいくかどうかは時間がかかりそうです。

今検討している関数で期待している使い方としては、
1. セル範囲にいくつかの材料の特性データ(基礎データ)を入力しておく。
2. 計算開始時に、計算に使用する材料を指定して、特性データを配列変数に
  入力する。
3. 配列変数を参照し、他のパラメータ値を変化させながら所定の技術計算を
  行い計算結果を反復的に取得する。
というものです。

特性値を連続的に変化しながら繰り返しデータ参照するので、予め材料データを配列変数に収納しておくべきと思いました。
また材料データは複数の種類があり、計算目的に合わせて使用するデータを変える必要があるので、定数宣言で定数配列として登録しておけば、配列変数へ代入するのに都合がよいかなと考えました。

他によい方法があれば教えていただければ助かります。
どうぞよろしくお願いします。

【75156】Re:セルの値を配列に格納して計算するユ...
発言  γ  - 13/12/21(土) 21:00 -

引用なし
パスワード
   どうも私が誤解していたようですね。
ユーザー定義関数ということでしたので、
それをそのままセルに入力するのかと思っていました。

そうではなくて、Functionモジュールを考える
最初のところの一般的な話だったのですね。
余計なことでした。
それでは、頑張って下さい。

1311 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free