2016-06-22 1 views
0

저는 VBA에 익숙하지 않지만 답변에 소수가 없을 때까지 계산을 실행할 수있는 VBA 스크립트를 만들고 싶습니다. (참고 : 반올림은 내가 무엇을했는지가 아닙니다.)VBA에서 값에 소수가 없을 때까지 계산을 실행하는 방법은 무엇입니까?

예 : 예 : 상수 17로 나눌 수있는 3 자리 숫자를 생성하고 싶습니다. 그러나 조합을 알지 못합니다. 따라서 0-9 사이의 무작위 기능을 사용하여 A1에서 C1로 스크립팅했습니다.

  • A1은 "(: C1 A1)/17 = 합"I는 원한다면
  • * 17는 상수

이다 C1 난수

  • A3는의 식을 갖는다 포함 셀 A3의 계산은 A1 : C1의 숫자 조합으로 상수 17로 나눌 수 있습니다. 십진법은 없습니다. (즉, 소수점이없는 170/17 = 10입니다. 따라서 셀 A1에서 C1에 표시된 값은 1, 7, 0이됩니다.) 대답

    이 작업을 수행하는 VBA 스크립트를 만들 수 있습니까? ?

    감사합니다.

  • +1

    같은 잘못 제기 질문처럼 보인다. 부동 소수점 계산을 수행하는 경우 수학적으로 계산 된 수치는 소수 일지라도 10 진수를 가질 수 있습니다. 계산 된 숫자가 10.00000001 또는 9.999999999이면 어떻게 될까요? 계산을 수행하여 모든 숫자가 항상 정수가되도록하고 나머지가 0이되도록 노력하거나 오류 허용 오차를 도입하십시오. 그것은 무한 루프로 향하는 것처럼 들립니다. –

    +2

    이것은 (내가 생각하는) 당신의 문제를 푸는 아주 이상한 방법처럼 보입니다. 단지 52 개의 3 자리 숫자가 17로 나눌 수 있습니다. 모두 나열하고 목록에서 임의로 선택하십시오. 또는 6에서 58 사이의 임의의 정수를 선택하고 17을 곱하십시오. – aucuparia

    답변

    0

    고려 :이 셀 A3가 포함되어 있다고 가정

    Sub dural() 
        With Application.WorksheetFunction 
        Do 
         Range("A1").Value = .RandBetween(1, 100) 
         Range("B1").Value = .RandBetween(1, 100) 
         Range("C1").Value = .RandBetween(1, 100) 
         If Range("A3").Value Mod 17 = 0 Then Exit Sub 
        Loop 
        End With 
    End Sub 
    

    :

    =SUM(A1:C1) 
    

    아니라 수식보다.

    enter image description here

    수정 # 1 :

    당신이 A1만 한 자리를 원하는 경우에 C1을 통해 후 A3에이 수식을 넣어 :

    =A1*100+B1*10+C1 
    

    이 매크로를 사용하십시오 :

    @ aucuparia의 코멘트에서 17,451,515,
    Sub dural2() 
        With Application.WorksheetFunction 
        Do 
         Range("A1").Value = .RandBetween(1, 9) 
         Range("B1").Value = .RandBetween(0, 9) 
         Range("C1").Value = .RandBetween(0, 9) 
         If Range("A3").Value Mod 17 = 0 Then Exit Sub 
        Loop 
        End With 
    End Sub 
    
    +0

    예. 나는 A1에서 C1까지 한 자리 만 원한다. 수식이 작동합니다! 실제 상황은 내가 설명한 것보다 약간 더 복잡하지만 훌륭하게 수행됩니다. 당신의 노력에 대해 많은 감사를드립니다! 많은 감사. 이렇게 말하면서, 코드를 약간 서투른 방법으로 만들면 나는 생각하고 있습니다. 내가 계산하고있는 계산은 11 자리 숫자이기 때문에. :) – DChain

    +0

    @DChain 대단히 환영합니다! 새 게시물을 작성하면 11 자리 문제도 해결할 수 있습니다. –

    0

    실행이 매크로

    Sub Macro() 
        Do Until Range("A3") = 17 
         Range("C1").Value = Int((100 - 0 + 1) * Rnd + 0) 
         Range("B1").Value = Int((100 - 0 + 1) * Rnd + 0) 
         Range("A1").Value = Int((100 - 0 + 1) * Rnd + 0) 
    
         Range("A3") = (Range("A1") + Range("B1") + Range("C1"))/17 
        Loop 
    End Sub 
    
    +0

    @DChain 셀 A1, B1, C1에 한 자리 숫자 만 넣으시겠습니까? 0 ~ 999의 무작위 범위가 있습니까? 그렇다면 연결해야합니다. – Ross

    +0

    실제로 셀 A1에서 C1까지 한자리 숫자가 필요합니다. 셀에있는 랜드 함수는 "Randbetween (0,9)"입니다. 수식에 연결하는 방법, 궁금한 점이 있으십니까? 자세히 알아보기 :) 고마워요. – DChain

    0

    , 당신은 17을 곱한 세 자리 숫자의 결과가, 곱 범위의 임의의 정수를 선택하고, 「랜덤를 얻을 수 "세 자리 숫자는 17로 나눌 수 있습니다.

    이 코드는 제수 (귀하의 경우 17이지만 정수 일 수 있습니다)를 사용합니다. 제수가 곱 해져서 3 자리 숫자 (lLower)가되고 가장 큰 숫자가 같을 때 가장 작은 숫자를 결정합니다. 그런 다음 두 숫자 사이의 임의의 정수를 선택하고 17을 곱한 다음 곱을 반환합니다.

    Function RandomDivisible(ByVal lDivisor As Long) As Double 
    
        Dim lLower As Long, lUpper As Long 
        Dim i As Long 
    
        lLower = Round(100/lDivisor + 0.4999, 0) 
        lUpper = Round(1000/lDivisor - 0.4999, 0) 
    
        RandomDivisible = Int((lUpper - lLower + 1) * Rnd + lLower) * lDivisor 
    
    End Function 
    

    사용

    =RandomDivisible(17) 
    
    +0

    감사합니다. 선생님, 정수로 소수 자릿수를 반올림합니다. 올바르게 이해합니까? 그렇다면 달성하려는 작업에 맞지 않습니다. 내가 수행 할 다른 작업에 유용 할 수 있으므로이 솔루션을 제공해 주셔서 감사합니다. 많은 감사의 말씀을 전합니다. – DChain

    관련 문제