お世話になります。
マクロ側のソルバー機能を利用して係数を推定しようと考えています。
係数の置き場所はワークシートです。計算値、実測値も同様です。
ただし、ワークシートに打ち出す計算値は外部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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
エクセルのソルバー関数について!
Excel(エクセル)
-
excelのソルバーをVBAで複数行繰り返したい
Excel(エクセル)
-
Excel のユーザー定義関数でソルバーが動作しない
Visual Basic(VBA)
-
-
4
エクセルマクロ:ソルバーの反復計算を中止する
Excel(エクセル)
-
5
【Excel】マクロにソルバーを組み込んだ時の対処方法
Excel(エクセル)
-
6
EXCELのマクロが回してる途中から遅くなり、困っています
Excel(エクセル)
-
7
正規分布に従わないと標準偏差の算出は向かないでしょうか?
数学
-
8
ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のプログラミングの問題で...
-
65536は2の何乗なのでしょうか?
-
タクシー料金の問題です
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
prolog計算
-
EXCELなどで「返す」という表現
-
三菱シーケンサー works2 の日...
-
Excel VBA TREND関数について
-
VBAで電卓を作成する
-
VBA 九九 Do While
-
モジュラス103の計算とは何でし...
-
電卓でmodの計算
-
C言語で、べき乗の計算方法につ...
-
[ASP]日付と時間の比較
-
ステップ数と計算量?
-
PHPとJavaでSHA256の結果を同じ...
-
スレッド処理からダイアログを...
-
移動平均を計算するプログラム
-
数十万番目の素数を表示させる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
EXCELなどで「返す」という表現
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
傾いた四角形内の範囲の条件式
-
Visual C++でdebugとreleaseで...
-
変化させるセルが変化しない
-
骨折リスク評価のFRAXについて...
-
C# 計算処理中に実行中ウィン...
-
VBAでの勤務時間計算
-
べき乗の計算が遅い理由
-
C言語についてです。 再帰を使...
-
Excel VBAにてFFT
-
数値計算の高速化 (cos, sin, exp)
-
VBとVBAの違い
-
VB6で正確なミリ秒を計測したい...
-
スレッド処理からダイアログを...
-
matlabで計算終了
おすすめ情報