I 10 셀 A1을 사이에 무작위로 배포 할 가지고 A1 : A10에서 무작위로 배포하므로 10 개 중 3 개만 채우고 나머지 7 개는 비어있게됩니다.I 3 개 값 (5, 4, 8) 및 I 10 개 세포
어떻게 만들 수 있습니까? 예
:리스트의 순서를 Randomise 1~10
I 10 셀 A1을 사이에 무작위로 배포 할 가지고 A1 : A10에서 무작위로 배포하므로 10 개 중 3 개만 채우고 나머지 7 개는 비어있게됩니다.I 3 개 값 (5, 4, 8) 및 I 10 개 세포
어떻게 만들 수 있습니까? 예
:리스트의 순서를 Randomise 1~10
4, 5, 8이 arent 상관 번호가 생성 및 배열을 무작위 화 및 A1로 인쇄 빈 셀
로 변환 될 수있다 : * 10
Sub RunShuffle()
Dim i As Integer
Dim j As Integer
Dim MyArray(9) As Variant
'Fill the array with numbers 1 to 10
For i = LBound(MyArray) To UBound(MyArray)
MyArray(i) = i + 1
Next i
'Randomise the order of the array
ShuffleArrayInPlace MyArray
'Print the randomised array to A1:10
For j = LBound(MyArray) To UBound(MyArray)
Sheets(1).Cells(j + 1, "A").Value = MyArray(j)
If MyArray(j) <> 4 And MyArray(j) <> 5 And MyArray(j) <> 8 Then
Sheets(1).Cells(j + 1, "A").Value = ""
End If
Next j
End Sub
'This Sub shuffles the array given as input
Sub ShuffleArrayInPlace(InArray() As Variant)
Dim n As Long
Dim Temp As Variant
Dim j As Long
Randomize
For n = LBound(InArray) To UBound(InArray)
j = CLng(((UBound(InArray) - n) * Rnd) + n)
If n <> j Then
Temp = InArray(n)
InArray(n) = InArray(j)
InArray(j) = Temp
End If
Next n
End Sub
원본 무작위 화 코드 : CPearson.com
고맙습니다. 이론적으로 솔루션이 작동 할 것입니다. 그러나 순서를 무작위로 추출하는 방법을 모르겠습니다. 목록의 숫자도 어떻게 그려야하는지, 더 설명해 주실 수 있습니까? – MiRO
내가 추가 한 코드를 사용해보십시오. 약간 어려운 부분은 배열의 순서를 랜덤 화하는 것이 었습니다. 나는 CPearson에서 그것을 훔쳤다. – Noceo
고마워요. :)하지만 제게 조금 더 도움을 줄 수 있고 자동으로 새로 고쳐서 시트에 새 데이터를 넣을 때마다 바꿀 수 있습니까? 또한 4, 5, 8을 선택하는 대신 셀에서 값을 가져 오는 방법은 무엇입니까? – MiRO
자동화하려는 경우 다음 VBA를 명령 단추에 연결할 수 있습니다. 숫자 4,5,8이있는 배열을 임의화할 수있는 방법에 대한 링크를 포함했습니다. TargetSheet라는 시트에서 실행 중이라고 가정합니다.
는Option Explicit
Sub AssignNumbers()
Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range
Dim x As Long, i As Long
Dim Arr()
Set wb = ThisWorkbook
Set ws = wb.Sheets("TargetSheet")
Set rng = ws.[A1:A10]
Arr = Array(4, 5, 8) 'You can randomize this array as follows (somewhat irrelevant as assignment is random): _
http://www.cpearson.com/excel/ShuffleArray.aspx
rng.ClearContents
For i = 0 To 2
'Loop until we find an empty cell to place the value in
Do
x = Application.WorksheetFunction.RandBetween(1, 10)
'Exit the loop as soon as we find a place to put the value
If IsEmpty(rng.Cells(x, 1).Value) Then Exit Do
Loop
'Have found an empty cell - we can now set the value
rng.Cells(x, 1) = arr(i)
Next i
End Sub
는
와우, 그 덕분에 :)하지만 좀 더 나를 도울 수 있고 자동으로 만들어서 버튼을 만드는 시트에 새 데이터를 넣을 때마다 바꿀 수 있습니까? – MiRO
@ YowE3K 고맙습니다. 내가 한 일은 다음을 추가하는 것입니다 : IsEmpty (rng.Cells (x, 1) .Value) then rng.Cells (x, 1) = Arr (i) i = i - 1 End If 다음 i – QHarr
그럴 수도 있지만 내 개인적인 의견은 루프 변수를 수정하는 것은 위험한 습관입니다. (보통 'For' 루프가'시작 값 '에서'종료 값 '으로 단순한 루프가되지 않는 코드를 유지하는 것이 더 어려워집니다.) 그렇게 할 수 있다면 회피하는 것이 좋습니다. – YowE3K
는 또한 일반 엑셀 수식이를 달성하고 여기 당신이 그것을 어떻게 할 수
Column A
: 당신이 언급 한 세 가지 값 (5, 4, 8을 입력) 및 하나의 빈 공간이있는 다른 7 개의 셀.
Column B
이 fomrula =INDEX($A$2:$A$11,RANK(B2,$B$2:$B$11))
이것이하는 일은 순위에 의해 비 중복 무작위 목록을 반환하는 것입니다 기입 :이 공식 =RAND()
Column C
을 작성합니다. 따라서 빈 공간이있는 다른 7 개의 셀을 가져야합니다.
헤더 행이 있으므로 필요에 맞게 수식을 약간 조정해야 할 수도 있습니다. 시도하고 알려주세요.
1에서 10 사이의 숫자를 선택하십시오. 1에서 10 사이의 다른 숫자를 선택하십시오 (첫 번째 숫자가 아닐 때까지 계속 입력하십시오). 1에서 10 사이의 다른 숫자를 선택하십시오 (첫 번째 숫자 또는 두 번째 숫자가 될 때까지 계속 입력하십시오). 첫 번째 숫자로 지정된 행에'5 '를 넣으십시오. 두 번째 숫자로 지정된 행에'4 '를 넣으십시오.세 번째 숫자에 지정된 행에'8 '을 넣으십시오. – YowE3K
답장을 보내 주셔서 감사합니다. 내가 필요한 것을 이해하기 위해 게시 한 스크린 샷을 참조하십시오. – MiRO
괜찮 았던 것입니다 - 당신이 의미하는 바를 이해했습니다. 제 의견은 당신에게 좋은 방법을 제공합니다. (나는 단계 # 1로 추가해야한다고 생각한다. "행 1 ~ 10의 내용을 지우려면 아무것도하지 말아라.") (그리고 "Pick a number"는 실제로 "** 무작위 ** 선택"이라고 생각한다. 번호 ",하지만 그게 분명하다고 생각했습니다.) – YowE3K