No.5ベストアンサー
- 回答日時:
追加です。
こちらでは、Solver のマクロの数が増えたせいなのか、DummyMacro の挙動がヘンです。確か、設定によっては、意味のないマクロは、削除とかされてしまった気がします。
Sub DummyMacro()
Dim v as Variant
v = Range("A1").Value
End Sub
こんなものにして、実質的な中身を入れてください。
ありがとうございます。
しかし残念ながらご教示いただいたことを試してみましたが、状況は変わりませんでした。Wendy02さんの2003で動くものが私の2003でダメということは、やはり設定の問題かと思いますが私の能力では分析できません。
いろいろと親身にお教えいただき誠に感謝しております。解決はしませんでしたが、この質問に関して教えていただいた記述は大変勉強になりました。今後の参考になると思います。
No.4
- 回答日時:
こんばんは。
Wendy02です。こちらでは再現できませんが、確かに、そのようなメッセージが出た覚えがあります。しばらくやっていれば、見つけられるとは思いますか゛まだ、分かりません。
気になる点があります。
マクロと手動で違う点というのは、Reset が入らないことです。
Sheets("optimizer").Select の後に、
SolverReset
が入っていないことですね。必ずしも、SolverReset が必要だとは思いませんが、しかし、一番大きな違いとすれば、そこになってしまいます。ですから、以下のようなコードにしなくてはなりません。
若干違う部分は、以下です。選択がありません。
D19:M19>-0.40
D19:M19<0.40
もうひとつは、MaxTime:=300, Iterations:=300 というのは、論理的にはおかしいです。
昔、一度、同じ機能の Iteration(回数) とマクロのスピードを計測したことがありますが、300秒=5分ですから、Iteration が300ということはありませんので、以下のように、3万にしてみました。マクロですと、100万とかありますが、ソルバーでは、少し多いような気がします。
Sub TestMacro2()
Sheets("optimizer").Select
SolverReset
SolverOk SetCell:="$N$19", MaxMinVal:=1, ValueOf:="0", ByChange:="$D$19:$M$19"
' MaxMinVal:=3 かもしれない
SolverOptions MaxTime:=300, Iterations:=30000, StepThru:=False
SolverAdd CellRef:="$D$19:$M$19", Relation:=3, FormulaText:="-0.4"
SolverAdd CellRef:="$D$19:$M$19", Relation:=1, FormulaText:="0.4"
SolverAdd CellRef:="SUMIF($D$19:$M$19,"""">0"""")", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="SUMIF($D$19:$M$19,""""<0"""")", Relation:=2, FormulaText:="-1"
SolverAdd CellRef:="$N$19", Relation:=2, FormulaText:="MIN($N$21:$N$23)"
SolverAdd CellRef:="$N$21", Relation:=2, FormulaText:="SUMPRODUCT($D$19:$M$19,$D$6:$M$6)"
SolverAdd CellRef:="$N$22", Relation:=2, FormulaText:="SUMPRODUCT($D$19:$M$19,$D$7:$M$7)"
SolverAdd CellRef:="$N$23", Relation:=2, FormulaText:="SUMPRODUCT($D$19:$M$19,$D$8:$M$8)"
SolverSolve Userfinish:=True, ShowRef:="DummyMacro"
SolverFinish 1
End Sub
Sub DummyMacro()
End Sub
No.3
- 回答日時:
こんにちは。
Wendy02です。>それともやはりおっしゃるような致命的なものでしょうか?
きちんとソルバー自身は手動で動くのですね?
それを確かめていただいていますか?時々、それがそうでなかったりします。
>キャンセルせずに当該ファイルを選択すると「"ファイル名.xls"に"DummyMacro"は見つかりません。
一応、そのマクロは、標準モジュールに入れてあると思いますが、ある設定で、このような反応があったような記憶がありますが、どこの設定でそうなったか覚えていません。
ここのカテゴリのどこかで書いたのですが、現行のソルバーは、数学的に近似値を求めるものは、公差を大きくして、最後は人間の手で行うしかありませんし、数学的に不可能なものは、いくらソルバーでも不可能なのはご存知だと思います。
今回、試しているものは、前回と同じです。
マクロの内容は変わりましたか?もし、違うようでしたら、マクロコードと、サンプルデータと求める条件を出していただけませんか?
それで、もう一度、新たに考えてみます。
この回答への補足
度々のご回答ありがとうございます。
>きちんとソルバー自身は手動で動くのですね?
はい、動きます。
>現行のソルバーは、数学的に近似値を求めるものは、公差を大きくして、最後は人間の手で行うしかありませんうしかありませんし、数学的に不可能なものは、いくらソルバーでも不可能なのはご存知だと思います。
はい、存じております。膨大なバックテスティングを行っているのですが、それをある程度補完するために初期値を何回か入替えて計算し、出た結果を比較しています。それでも最適解とはならないケースがあることも承知した上でソルバーを使用しています。
>マクロの内容は変わりましたか?もし、違うようでしたら、マクロコードと、サンプルデータと求める条件を出していただけませんか?
ありがとうございます。余り変わっていませんが、簡略化して示します。
D6:M8にデータ数値(計30個)が入っています。正も負もあります。
求める結果はD19:M19です。N19の最小値を最大化するものです。
ソルバー部分だけ下に抜き出しますが、実際にはD6:M8の値を変えて何回も繰り返し計算します。また精度を上げるためにソルバーも繰り返しますし、初期値も入替えて数回計算しています。
制約条件
D19:M19>-0.40
D19:M19<0.40
SUMIF(D19:M19,">0")= 1
SUMIF(D19:M19,"<0")= -1
N19 =MIN(N21:N23)
N21 =SUMPRODUCT(D19:M19,D6:M6)
N22 =SUMPRODUCT(D19:M19,D7:M7)
N23 =SUMPRODUCT(D19:M19,D8:M8)
Sub Macrooptim()
Sheets("optimizer").Select
SolverOk SetCell:="$N$19", MaxMinVal:=1, ValueOf:="0", ByChange:="$D$19:$M$19"
SolverOptions MaxTime:=300, Iterations:=300, StepThru:=False
SolverSolve Userfinish:=True, ShowRef:="DummyMacro"
End Sub
Sub DummyMacro()
End Sub
説明が簡略化すぎましたので、思い直してもう少し詳しく書きますと、実際のデータの数は100個です(D6:M15、N21~N30)。N19: =MIN(N21:N30)
データは乱数に近いものですが(データですので乱数ではありません)、概ね+0.1から-0.1の間で0を山としてほぼ正規分布する性格の数字です。
No.2
- 回答日時:
こんにちは。
>今まではエクセル2000でShowRef:="DummyMacro"という記述を以前この欄で教えていただき使用していたのですが
それは、私の書いた
http://oshiete1.goo.ne.jp/qa2388268.html
エクセルマクロ:ソルバーの反復計算を中止する
ですね。そのときのマクロは、Excel2003で、今も試してみましたが、特に変わりないですね。もともと、このマクロは、Ver.4 のマクロですから、もしも、Excel2003で不都合があれば、致命的なものです。
ただ、今回、動かないのは、参照設定されていないからではないでしょうか?Visual Basic Editor のツール-参照設定の
SOLVER のチェックを入れてください。
Wendy02さん、その節は大変ありがとうございました。その他にも何回かご回答いただいており仕事の効率化に大変役立っています、重ねて御礼申し上げます。
ところで今回の件ですが、参照設定はなされております。2003で"DummyMacro"を記述した場合は、最大回数に達すると「値の更新」というファイル選択のポップアップがなされ、キャンセルを押すと次にマクロエラーとなります(ここでいちいちマニュアルで中止を選択しています)。キャンセルせずに当該ファイルを選択すると「"ファイル名.xls"に"DummyMacro"は見つかりません。2つの理由が考えられます。・指定された名前は定義されていません。・指定した名前はセル参照以外で定義されています。名前を確認し、もう一度実行してみてください。」というメッセージが出て、その後マクロエラーとなります。
何か解決方法はあるでしょうか?それともやはりおっしゃるような致命的なものでしょうか?宜しくお願いいたします。
No.1
- 回答日時:
全てかどうかはわかりませんが、マクロの中で
Application.DisplayAlerts = False
とするとエラーや警告のダイアログの表示を抑止できます。
元に戻すときは
Application.DisplayAlerts = True
です。
ご回答ありがとうございました。残念ながら私が本当に消したいメッセージは頂いた記述では消せませんでした。消したかったのはソルバー計算の時、指定反復回数に達した際に出るメッセージ「試行状況の表示:最大の反復回数に達しました。このまま続けますか?」で、表示されないか、あるいは自動的に「中止」を選択する方法を探しています。今まではエクセル2000でShowRef:="DummyMacro"という記述を以前この欄で教えていただき使用していたのですが、エクセル2003にバージョンアップした途端に働かなくなってしまいました。何か別の対処方法があれば宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行すると メッセージボックスが表示されて okをク 4 2023/07/05 19:32
- Excel(エクセル) エクセルのマクロの有効について 4 2023/08/03 11:40
- Excel(エクセル) エクセルのマクロ設定 1 2023/04/05 19:37
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルのオートフィルターのしぼりをクリアーしたい 2 2022/12/24 08:36
- Visual Basic(VBA) エクセルのマクロについて質問があります。 現在は下記のマクロでエクセル表を保存しています ThisW 2 2022/09/16 11:22
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Excel(エクセル) 【マクロ】プリントスクリーンした画像をエクセルに貼付して印刷したい 6 2022/11/30 20:11
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/22 11:43
- Excel(エクセル) 【マクロ】エラーが発生⇒実行時エラー58既に同名のファイルが存在 5 2022/08/31 10:03
- その他(Microsoft Office) エクセルのマクロについて教えてください。 5 2023/01/21 09:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報