강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của stormsix1235893
stormsix1235893

câu hỏi đã được viết

Hoàn thành việc làm chủ các macro Excel và VBA từ cơ bản đến sử dụng thực tế

VBA Solver 초기값에서 최적해 관련 파라미터 업데이트 안됨

Viết

·

468

0

안녕하세요! VBA 수업을 듣고 열심히 개발중인데요..

강의내용중에 나오진 않았지만 물어볼곳이 없어서 여기다가 문의드립니다.

아래와 같이 모듈내에 일부를 발췌했습니다.

 

K1,K2값과 연동된 셀의 값들을 두개의 cdf(누적밀도함수) , pdf(확률밀도함수)로 정의하고 이를 더한 값을

K3 로 지정하여서

K3의 최적해를 구하는것을 vba로 표현하고자합니다.

엑셀상에서 데이터 - 해찾기 - 해법 GRG 비선형으로 구한 값은 최적해를 나름 수렴해서 값을 잘 찾아주는데

하기의 VBA는 K1,K2의 초기값으로 설정된값만 계속 내뱉습니다..

(beta , eta 값을 초기에 설정했음)

 

초기값을 계속 바꾸면 바꾼 초기값에서 더 변화없네요

K3에 대한 최적해가 VBA내에서 뭔가 잘 이뤄지지 않는데 코드를 봐서는 도무지 어느부분이 잘못되었는지 잘모르겠네요... 한번 봐주시면 감사드립니다..

 

  beta = 1.3
    eta = 700000

    RO_Ws.Range("K1").Value = eta
    RO_Ws.Range("K2").Value = beta
    
    
    cdf = 0
    
    For m = 1 To lastRow_Sale
        cellValue = Sale_Ws.Cells(m, 1).Value
      
        If cellValue <> 0 Then
        resultValue = WorksheetFunction.Ln(1 - (1 - Exp(-((cellValue / (RO_Ws.Range("K1").Value)) ^ (RO_Ws.Range("K2").Value)))))
        cdf = cdf + resultValue
        End If
        
    Next m
    '~여기까지 누적밀도함수 구함
    
    pdf = 0
    
    For n = 1 To lastRow_RO
        
        cellValue2 = RO_Ws.Cells(n, 3).Value
        If cellValue2 <> 0 Then
        resultValue2 = WorksheetFunction.Ln((RO_Ws.Range("K2").Value) / (RO_Ws.Range("K1").Value) * (cellValue2 / (RO_Ws.Range("K1").Value)) ^ ((RO_Ws.Range("K2").Value) - 1) * Exp(-((cellValue2 / (RO_Ws.Range("K1").Value)) ^ (RO_Ws.Range("K2").Value))))
        pdf = pdf + resultValue2
        End If
        
    Next n
    
   
    RO_Ws.Range("K3").Value = pdf + cdf
    
    'RO_Ws.Range("K1").Value = eta
    'RO_Ws.Range("K2").Value = beta
    'RO_Ws.Range("K3").Value = weibull
    
    SolverReset
    
    ' 조건 설정
    SolverOk SetCell:="$K$3", MaxMinVal:=1, ValueOf:=0, ByChange:="$K$1:$K$2", Engine:=2
    SolverAdd CellRef:="$K$1", Relation:=3, FormulaText:="10000"
    SolverAdd CellRef:="$K$2", Relation:=3, FormulaText:="0"
    
    ' Solver 실행
    SolverSolve UserFinish:=True
    
    eta = RO_Ws.Range("K1").Value
    beta = RO_Ws.Range("K2").Value
    weibull = RO_Ws.Range("K3").Value
excelVBA업무-생산성

Câu trả lời 1

0

onwings님의 프로필 이미지
onwings
Người chia sẻ kiến thức

안녕하세요?

질문에 있는 코드는 문제가 없어보입니다.

 

엑셀 파일의 내용을 보고 하나씩 중간과정을 확인해보아야 문제점을 찾을 수 있을듯한데

엑셀 시트 창과 VBA 코드 창을 함께 열어 놓고 VBA코드 창에서 F8을 누르면서 한 문장씩 실행해보세요

 

실행하면서 beta나 eta 변수에 커서를 두면 현재 변수에 저장된 중간값도 확인할 수 있습니다.

(보기-지역창을 체크해서 화면 하단에 지역창이 표시되면 여기서 변수의 중간값도 확인 가능합니다)

 

F8을 누르면서 실행될 때마다 결과가 어떻게 변경되는지 확인을 하다보면 문제점을 파악하실 수 있을듯합니다.

 

그래도 안되시면 엑셀파일을 onwings@naver.com 메일로 보내주시면 제가 점검을 해 보겠습니다.

stormsix123님의 프로필 이미지
stormsix123
Người đặt câu hỏi

넵 메일 보내드렸습니다 확인 부탁드립니다.

감사합니다!

Hình ảnh hồ sơ của stormsix1235893
stormsix1235893

câu hỏi đã được viết

Đặt câu hỏi