전체 덱으로 플레이 (Microsoft Excel)
Excel은 난수를 생성하는 데 탁월하지만 특정 숫자가 두 번 반복되지 않는 난수로 셀 범위를 채우는 데는 덜 탁월합니다. 예를 들어 임의의 순서로 1에서 52까지의 숫자로 52 개의 셀을 채울 수 있습니다. (이것은 특정 카드를 한 번만 선택할 수있는 무작위 순서로 덱에서 카드를 선택하는 것과 매우 유사합니다. 따라서이 팁의 제목입니다.)
이 기능을 제공하는 기본 제공 Excel 함수는 분명히 없으므로 매크로 작업을 수행해야합니다. 다행히도 이러한 매크로는 작성하기가 그리 어렵지 않습니다. 다음 매크로는 트릭을 훌륭하게 수행합니다.
Sub FillRand() Dim nums() As Integer Dim maxval As Integer Dim nrows As Integer, ncols As Integer Dim j As Integer, k As Integer Dim Ptr As Integer Randomize Set s = Selection maxval = s.Cells.Count nrows = s.Rows.Count ncols = s.Columns.Count ReDim nums(maxval, 2) 'Fill the initial array For j = 1 To maxval nums(j, 1) = j nums(j, 2) = Int((Rnd * maxval) + 1) Next j 'Sort the array based on the random numbers For j = 1 To maxval - 1 Ptr = j For k = j + 1 To maxval If nums(Ptr, 2) > nums(k, 2) Then Ptr = k Next k If Ptr <> j Then k = nums(Ptr, 1) nums(Ptr, 1) = nums(j, 1) nums(j, 1) = k k = nums(Ptr, 2) nums(Ptr, 2) = nums(j, 2) nums(j, 2) = k End If Next j 'Fill in the cells Ptr = 0 For j = 1 To nrows For k = 1 To ncols Ptr = Ptr + 1 s.Cells(j, k) = nums(Ptr, 1) Next k Next j End Sub
이 매크로는 2 차원 배열 (숫자)을 사용하여 사용할 숫자와 숫자를 사용해야하는 순서를 파악합니다. 매크로의 시작 부분에서 배열은 정적 숫자 (1에서 셀 수)와 1에서 셀 수 사이의 난수로 채워집니다. 이 두 번째 숫자는 배열을 정렬하는 데 사용됩니다. 배열이 저장되면 원래 숫자를 셀에 배치하는 것은 간단합니다.
그런데 2 차원 배열이 사용되는 이유는 VBA가 난수를 생성하는 데 사용하는 Rnd 함수가 중복 값을 반환 할 수 있기 때문입니다. 따라서 배열의 두 번째 차원에 중복 항목이있을 수 있지만 배열이 최종적으로 정렬 될 때 첫 번째 차원에는 중복 항목이 없습니다.
매크로를 사용하려면 임의의 순서로 순차적 값으로 채울 셀을 선택하십시오. 매크로를 실행하면 해당 범위가 채워집니다. 예를 들어, 10 개의 셀을 선택한 다음 매크로를 실행하면 해당 셀은 임의의 순서로 1부터 10까지의 숫자로 채워집니다.
_ 참고 : _
이 페이지 (또는 ExcelTips 사이트의 다른 페이지)에 설명 된 매크로를 사용하는 방법을 알고 싶다면 유용한 정보가 포함 된 특별 페이지를 준비했습니다.
link : / excelribbon-ExcelTipsMacros [새 브라우저 탭에서 특별 페이지를 열려면 여기를 클릭하세요]
.
_ExcelTips_는 비용 효율적인 Microsoft Excel 교육을위한 소스입니다.
이 팁 (8269)은 Office 365의 Microsoft Excel 2007, 2010, 2013, 2016, 2019 및 Excel에 적용됩니다. 여기에서 Excel의 이전 메뉴 인터페이스에 대한이 팁 버전을 찾을 수 있습니다.
link : / excel-Playing_with_a_Full_Deck [풀 덱으로 재생]
.