VBAを使用してソルバーを使用したとき、この非常に奇妙なバグがありました。私の目的と変化するセルはシート1にあり、最適化されたソリューションが1つあるときは、最適化されたセルをシート2にコピーしたいと思います。ソルバープログラムでWorksheets(1).Select
を追加した場合、ソルバーは正常に動作し、値をシート2に貼り付けます。しかし、このステートメントを削除し、シート1ではなく選択したシート2でソルバーを実行すると、ステータスバーの「設定問題...」のようなものが最初に表示され、間違った結果と奇妙な「0」が表示されます私はVBAデバッガを使用し、ステートメントCall SolverSolve(True)
の後にこの "0"の値が現れていることが分かりました。だから、バグはちょうどソルバーにあると思われます。アクティブなシートが変化するセルと目的のセルに存在する場合にのみソルバーを実行する必要がありますか?または私はどこで間違っているのですか?別のシートでVBAソルバーを扱うときに奇妙なバグがある
Option Explicit
Function SAMPLEONCE()
'Create one sample from 2500 MI data in worksheets("P2 MI Data"), the sample is
'stored in worksheets("P2 Sample")
Const n As Long = 2500
Dim temp As Long
Randomize
temp = Int(Rnd * 2500) + 1
SAMPLEONCE = Worksheets("P2 MI Data").Cells(temp + 1, 1).Resize(1, 6)
End Function
Sub SolveItOnce()
Call solverreset
Call solverok(Worksheets("P2 Sample").Range("Output"), 2, 0, Worksheets("P2 Sample").Range("Input"))
Call solversolve(True)
End Sub
Sub SolveIt()
Dim i As Long, j As Long, k As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Worksheets("P2 Sample").Activate
For i = 1 To 100
'Sampling
For j = 1 To 1000
Worksheets("P2 Sample").Range("Sample").Rows(j).FormulaArray = "=SAMPLEONCE()"
Next j
Worksheets("P2 Sample").Range("Sample").Copy
Worksheets("P2 Sample").Range("Sample").PasteSpecial Paste:=xlPasteValues
'Call Solver
For k = 1 To 3
Call SolveItOnce
Next k
'Output result
Worksheets("P2 Sample").Range("A2:G2").Copy
Worksheets("P2 Result").Range("A1:G1").Offset(i, 0).PasteSpecial Paste:=xlPasteValues
Next i
Application.Calculation = xlCalculationAutomatic
End Sub
VBAでソルバーを使用するといくつかの欠点があります。 [この質問](http://stackoverflow.com/questions/36671991/use-solver-in-vba-with-loop-inrows)への回答を参照してください。 SolverResetを使わず、正しいアドレスを取得し、 'EngineDesc'を使わずに、あなたがしていることにすべて影響を与えるようなものがあります。 – OldUgly
私の質問に具体的にコメントできますか? – Nicholas
私は理解しています - あなたの質問にはもちろんコメントできます。コードのサンプルを投稿すると、より直接的なフィードバックを提供することができます。 – OldUgly