
お世話になります。
マクロ側のソルバー機能を利用して係数を推定しようと考えています。
係数の置き場所はワークシートです。計算値、実測値も同様です。
ただし、ワークシートに打ち出す計算値は外部dllで行います。
コードの概要は以下の通りです。
sub cal
call 外部dll
end
sub optsolver
For i = 1 To 100
Call cal
SolverOk SetCell:="E18", MaxMinVal:=2, ValueOf:="0", ByChange:="D3:D4"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Next i
end
1回目のステップではワークシート上に計算値が得られるのですが、
2回目以降はセルの値(係数や計算値)が更新されませんし、結果として係数も推定できません。
100回くらい画面がちらついて、終わりの表示もなく終わります。
ここでいう係数と計算値は連動していないとソルバーは使えないと
どこかで聞いたことがあるのですが、このためでしょうか。
(連動って、設定の数値を変えれば自動で追随することだろうとおもいます。)
使用環境は
winxp pro sp2
excel 2003
です。
No.1ベストアンサー
- 回答日時:
状況が今ひとつはっきりわからないのですが、推定すると以下のようなことでしょうか?
・係数を求めたい。よってこれを変化させるセル(D3:D4)に割り当てた。
・計算値を実測値に近付けたいので、目的セル(E18)には計算値(あるいは計算値と実測値の近さを表す数値)が計算されるようになっている。
・計算値は外部dllを用いて係数から算出する。そのため、係数(変化させるセル、D3:D4)を変更しただけでは目的セル(E18)の値は更新されない。そこで、外部dll呼び出しとソルバーを交互に繰り返し実行する質問文中のコードを書いて実行してみたがうまくいかない。
もしそうであれば、そのとおりうまくいきません。
質問者様も書かれている通り、ソルバーが正常に動作するには「ここでいう係数と計算値が連動している」必要があり、そういう状態にできないのであれば値の計算とソルバーを交互に行ってもうまくいきません。
(連動の意味も質問者様の理解で合っていると思います)
部外者の立場としては、外部dllでの計算をワークシートの数式で実現できないのか、と聞きたくなりますがおそらくだめなのでしょうね。
現実的な解決策ですが、ユーザー定義関数を作り、その中で外部dllを呼び出すようにし、ワークシートの数式にそのユーザー定義関数を用いて化させるセル(D3:D4)から目的セル(E18)を算出するようにしてはいかがでしょうか。
(もちろん、外部dllの呼び出しとソルバーの交互繰り返し実行はやめます)
この回答への補足
queuerev2様が上3分の1くらいで述べられたことは、まさにその通りです。
>質問者様も書かれている通り、ソルバーが正常に動作するには「ここでいう係数と
>計算値が連動している」必要があり、そういう状態にできないのであれば値の計算
>とソルバーを交互に行ってもうまくいきません。
きっと評価関数が動けないと困るんでしょうね。
>部外者の立場としては、外部dllでの計算をワークシートの数式で実現できないのか、
>と聞きたくなりますがおそらくだめなのでしょうね。
おっしゃるとおりで、外部DLLは外せないですね。実はこの質問の意図は、エクセルのソルバーだけを利用したい、です。ですので、肝心の計算の中身はワークシートやマクロに記述せず外部DLLに集約させています。もちろんy=ax+bとかの簡易なモデル式ならばワークシートに直打ちした方が楽です。しかし、簡易でないときは面倒ですし、なによりもモデル記述の可能性を狭めてしまいますよね。これもまたエクセルの利用法の一つだと思うのです。
結論から言うと、完成しました!
私はqueuerev2様の回答で、世界が広がりました。結構悩んでいたので。
初めての投稿で返信がいただけるかどうか不安だったのですが、回答をいただける方に出会えたことを嬉しく思います。感謝です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
水位変化の計算プログラムの作...
-
C# C1FlexGrid SUBTOTAL で計算式
-
C++ でファイルを消す関数(??)
-
勤怠管理表を作成しています、...
-
大規模疎行列の高速な計算方法...
-
VBAで・・・
-
CとFORTRANの計算速度はどちら...
-
EXCELなどで「返す」という表現
-
VB.NETで16bit符号なしを使いたい
-
[急募]Pythonについてです。
-
fortranでプログラムをつくった...
-
Date型の範囲を超える数値について
-
VBAの再計算が反映されない件に...
-
伝達関数のステップ応答→グラフ...
-
趣味で「乗換案内」みたいなソ...
-
継承元と継承先での変数
-
Objective-Cで累乗根
-
モジュラス103の計算とは何でし...
-
関数を使わないで日付の計算を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
変化させるセルが変化しない
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
CとFORTRANの計算速度はどちら...
-
C言語についてです。 再帰を使...
-
matlabで計算終了
-
エクセルで特定のセルのみを任...
-
Visual C++でdebugとreleaseで...
-
VBAで関数をつくる
-
数値計算の高速化 (cos, sin, exp)
-
引き放し法による除算アルゴリ...
-
傾いた四角形内の範囲の条件式
-
趣味で「乗換案内」みたいなソ...
-
三菱シーケンサー works2 の日...
-
バッチファイルでウインドウを...
-
y=(x^2 +3x+1)^4を微分の定義を...
-
VBAでの勤務時間計算
-
モジュラス103の計算とは何でし...
おすすめ情報