...
- 당신은 항상 당신의 코드에서 명시 적 옵션을 사용해야합니다. 이렇게하면 유형 불일치로 인한 오류를 포착하는 데 도움이됩니다.
Cells(x,y)
을 사용할 때 항상 워크 시트를 사용하여 인증해야합니다.
- 솔버 루틴에 대한 입력으로 범위를 사용하는 것이 때때로 작동하는 것처럼 보이지만 항상 문자열을 사용하는 것이 좋습니다.
- SolverReset을 사용하면 Excel이 수동 계산 모드로 전환됩니다. 이런 루프에서 사용될 때는 먼저 호출해야합니다. 마지막이 아닙니다.
- SolverOK에서 Engine과 EngineDesc를 모두 지정하면 불일치가 발생하여 오류가 발생할 수 있습니다. 항상 EngineDesc를 생략하는 것이 좋습니다.
- SolverOK에서 "ByChange"필드가 있어야하는 것이 명확하지 않습니다. 나는 당신의 제약 조건과 같다고 생각하지만, 이것을 해결할 필요가있다.
- 샘플 데이터가 없습니다. 테스트되지 않았습니다.
다음 코드는 플래그가 지정된대로 수정하여 목표를 달성해야합니다.
Option Explicit
Sub mySolve()
Dim totalrows As Long
totalrows = 1000 ' *** use whatever formula finds your last row
Dim row As Long
Dim col As Long
Dim myWS As Worksheet
Dim SetAddr As String, ChgAddr As String, ConAddr As String
Set myWS = ActiveSheet
For row = 10 To totalrows Step 9
For col = 14 To 17 Step 1
SetAddr = myWS.Cells(row, col).Address
ChgAddr = myWS.Cells(row, col + 4).Address '*** you don't specify in your question
ConAddr = myWS.Cells(row, col + 4).Address
SolverReset
SolverOk SetCell:=SetAddr, MaxMinVal:=2, ByChange:=ChgAddr, Engine:=3
SolverAdd CellRef:=ConAddr, Relation:=1, FormulaText:="2" '*** what is your constraint
SolverSolve Userfinish:=True
Next col
Next row
End Sub
코드 스크린 샷은 수행 한 작업의 예를 제공하는 좋지 않은 방법입니다. – OldUgly
실례합니다. 나는 초보자이다. 그것을 재현 할 수있는 방법으로 표현하는 법을 배웁니다. 그리고 입력에 감사드립니다. –