2017-12-30 21 views
-1

저는 Excel, VBA에서 꽤 발전했습니다. 그러나 RANDBETWEEN 수식을 사용하고 단 하나의 복제 만 허용하는 방법을 찾기 위해 문제가 발생했습니다.Excel RANDBETWEEN 하나의 복제 허용

예 : 50 명으로 구성된 목록이 있습니다. 각 사람에게 1-25 사이의 숫자를 줄 수 있어야하지만 번호는 한 번만 나타날 수 있습니다. 그래서 두 사람이 숫자 1을 갖게 될 것입니다. 두 사람은 2 등을 갖게 될 것입니다 ....

아이디어가 있으십니까?

답변

4

RANDBETWEEN 그런 식으로 작동하지 않습니다. 그냥 두 개의 지정된 숫자 사이에 임의의 숫자를 반환합니다. (한 번만 무작위로 번호를 할당 한 경우!)

'somethings'(즉, 1부터 25까지의 숫자, 1에서 25까지의 숫자, 색상, 이름 등)를 무작위로 지정해야하는 경우 파일, 등 등)가이처럼 할 수있는 빠른 방법 : 기본적으로 그냥

  1. 각 항목)이 필요한만큼 자주 나타나는 하나의 열에있는 모든 가능성의 목록을 (만들어

  2. 각 숫자 옆에 =RAND()이 포함 된 두 번째 열을 추가하고
  3. RAND()이있는 열을 기준으로 목록을 정렬하십시오.

    randlist


    RAND()

pseudo-random number 0과 1을 반환한다.

따라서 RANDBETWEEN (x,y)은 정확히 INT(RAND()*y)+x과 같습니다.

단지 문제를 혼동하기 위해서은 VBA의 동일한 기능이 철자가 맞습니다. RND()입니다.

  • 워크 시트 또는 VBA에서 더 많은 숫자는 Chip Pearson's site입니다.

  • 무엇이든 lists을 포함하여 게으른 방식으로 무작위로 지정하는 경우는 random.org입니다. A51 (50 명)하고 해당 범위 B2에서 임의의 숫자를 할당 할 :

+2

는 번호는 1, 25에있을 것입니다 열 D에 입력 할 nd = 1 내지 25 (즉, 1 내지 25)이다. 하나의 세트가 아닌 1-25 개의 세트 2 세트) 그러나 이것 이외에는 이것이 최선의 방법이라고 생각합니다. – YowE3K

+2

x와 y가 양의 정수라고 가정하면 RANDBETWEEN (x, y)의 등가는 실제로 '= INT (RAND() * (y-x + 1)) + x'입니다. –

3

가정 당신의 이름은 범위 A2에, 당신은 ... 이런 식으로 뭔가를 시도 할 수 B51

Sub getRandomNumbers(ByVal Rng As Range, ByVal bottomNum As Integer, topNum As Integer) 
Dim i As Long, Num As Integer 
Rng.Cells.Clear 
For i = 1 To Rng.Cells.Count 
    Num = Application.RandBetween(bottomNum, topNum) 
    Do While Application.CountIf(Rng, Num) = 2 
     Num = Application.RandBetween(bottomNum, topNum) 
    Loop 
    Rng.Cells(i) = Num 
Next i 
End Sub 

당신은 표준 모듈에 위의 절차가 제공, 당신은 ... 대상 범위, 바닥 번호와 아래처럼 그것을 가기 숫자 매개 변수를 전달 후를 호출 할 수

Sub AssignRandomNumbers() 
getRandomNumbers Range("B2:B51"), 1, 25 
End Sub 

enter image description here

+0

감사합니다. 여기에 문제가 있습니다. 나는 A5에 이름을 붙였습니다. 그러나 많은 사람들이 ... 나는 B 열에 얼마나 많은 솥을 갖고 싶어합니까? CV (20)는 1과 AND 사이의 무작위 숫자입니다. 그러나 많은 사람들이/2에 가입했습니다 (저는 가정합니다.) .... 내가 필요한 것은 모든 사람들이 * 2에있는 모든 POTS SUM을 합한 다음 각 # 열에 1-xx * 2 사이의 난수를 얻는 것입니다. 각 번호는 2 번 이상 나타나지 않아야하지만 2 번 나타나야합니다 ..... 이것이 의미가되기를 바랍니다 .... –

+0

당신을 환영합니다! 다행 이군. 당신은 당신이 시도한 것을 게시하지 않고도 답변을 얻을만큼 충분히 행운입니다. 그래서 답을 수락하고 질문을 해결 된 것으로 표시 할 것을 제안합니다. 그런 다음 새로운 요구 사항을 가진 새로운 질문을 당신을 위해 일하는 코드와 함께 엽니 다. 또한 시트의 주요 셀/열을 강조 표시하고 스크린 샷을 공유하고 질문 설명의 주요 셀/열을 설명하고 원하는 출력이 어떻게 표시되는지 스크린 샷을 게시하십시오. – sktneer

1

원하는 경우 하나의 수식으로이 작업을 수행 할 수 있습니다 .....당신이 B2이 공식을 사용할 수있는 헤더 또는 공백을 포함 A2:A51B1에서

가정 이름은 그냥 각각의 2 있었다는 것을 확인하기 위해 F 열에서 COUNTIF 공식을 사용

=AGGREGATE(14,6,ROW(INDIRECT("1:25"))*{1,1}/(COUNTIF(B$1:B1,ROW(INDIRECT("1:25")))<{1,2}),RANDBETWEEN(1,51-ROWS(B$1:B1)))

아래로 복사 영업의 특정한 경우를 들어 수

enter image description here

관련 문제