나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 dew (dewdrop)

추천:  2
파일:     조회:  1738
제목:   [RE]1에서 20까지 숫자 난수방법
     
  20개의 칸에 1-20까지의 숫자가 겹치거나 빠지는 숫자없이 

난수로 나타나게 할 방법이 있을까요? 





==============[호랑나비님 글에 대한 답변입니다]==============

Sub userRandom()
    Dim iX As Integer, iy As Integer, iRnd As Integer
    Dim vArray(1 To 20)
    Dim bX As Boolean
    Dim LowerBound As Integer, UpperBound As Integer
    
    LowerBound = 1: UpperBound = 20
   
    iX = 1
    Do While True
        iRnd = Int(Rnd * (UpperBound - LowerBound + 1) + LowerBound)
        bX = True
        For iy = 1 To 20
            If vArray(iy) = iRnd Then bX = False: Exit For
        Next
        
        If bX Then vArray(iX) = iRnd: iX = iX + 1
        If iX > 20 Then Exit Do
    Loop
    
    Debug.Print Join(vArray, ", ")
End Sub

==============[dew님 글에 대한 답변입니다]==============
아래와 같이 사용자 정의 함수로 만들어 사용할 수 있습니다.

' Usage : userRandomBetween(하한값, 상한값)
Function userRandomBetween(LowerBound As Integer, UpperBound As Integer)
     Dim iX As Integer, iy As Integer, iRnd As Integer
     Dim vArray
     Dim bX As Boolean
     
     ReDim vArray(LowerBound To UpperBound)
    
     iX = 1
     Do While True
         iRnd = Int(Rnd * (UpperBound - LowerBound + 1) + LowerBound)
         bX = True
         For iy = 1 To 20
             If vArray(iy) = iRnd Then bX = False: Exit For
         Next
         
         If bX Then vArray(iX) = iRnd: iX = iX + 1
         If iX > UpperBound Then Exit Do
     Loop
     
     userRandom = Join(vArray, ",")
End Function
 
[불량 게시물 신고]  
호랑나비지금 봤습니다. 감사합니다. 고수님들이 부럽습니다.05-24 (11:41)
삭제 ■신고
        
  

작성일 : 2018-12-17(08:49)
최종수정일 : 2018-12-17(08:49)
 


 ◎ 관련글

  제 목   작성자   날짜
1에서 20까지 숫자 난수방법 호랑나비 2018-12-13
[RE]1에서 20까지 숫자 난수방법 정일한 2018-12-30
[RE]1에서 20까지 숫자 난수방법 dew 2018-12-14
[RE]1에서 20까지 숫자 난수방법 dew 2018-12-17