해 찾기를 사용하여 간단한 포트폴리오의 최대 수익을 찾으려고합니다. 워크 시트에서 Solver를 사용하면 문제가 해결되지만 VBA에서 명령을 설정할 때 Solver를 사용하지 않아도됩니다. 대신 (screengrab에서 볼 수 있듯이) 제약 조건 중 하나를 무시합니다 (T10에서 계산 된 가중치의 합은 = 1이어야 함). 흥미롭게도 제가 제 3의 라인을 바꾸면 잘 작동합니다 :VBA에서 Excel 해 찾기 제한 무시
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="100"
또는 "1"이외의 정수. (다른 제약 조건도 무시할 수 있지만이를 확인할 수는 없습니다.)
그리고 내 코드는 다음과 같습니다 : 표는 다음과 같습니다
Sub FindRange()
SolverReset
SolverOk SetCell:="$T$7", MaxMinVal:=1, ValueOf:="0", ByChange:="$O$10:$R$10"
SolverAdd CellRef:="$T$10", Relation:=2, FormulaText:="1"
SolverAdd CellRef:="$O$10:$R$10", Relation:=3, FormulaText:="0"
SolverSolve UserFinish:=True
SolverFinish KeepFinal:=1
Range("T9").Value = Range("T7").Value
End Sub
어떤 제안을 기꺼이 환영!
코드는 나에게 잘 어울립니다. 비 VBA 대 VBA를 반복하는 것처럼 보입니까? 어쩌면'SolverOK' 전에'CellRef'를 추가 해보시겠습니까? –
아마도'FormulaText : = 1'을 사용해 보시겠습니까?(큰 따옴표 제외) [MSDN의 코드] (http://msdn.microsoft.com/en-us/library/office/ff838657.aspx)는 따옴표를 사용하지 않기 때문에 언급합니다. –
감사합니다. 큰 따옴표를 제거하는 것이 도움이됩니다 (즉, 10 이하로 유지). 이제는 "$ O $ 10 : $ R $ 10"이 0이되도록 무시합니다. 따라서 두 제약 조건이 모두 무시됩니다. – Mary