Witam,
Czy jest możliwość wprowadzeniu w Excelu formuły losowania liczb z przedziały w ten sposób aby wartość powtórzyła się maksymalnie 2x?
Pozdrawiam
Witam,
Czy jest możliwość wprowadzeniu w Excelu formuły losowania liczb z przedziały w ten sposób aby wartość powtórzyła się maksymalnie 2x?
Pozdrawiam
Formuły, która to umożliwi, nie ma. Musiałbyś napisać makro.
Mógłbyś opisać jak to zrobić aby ów wartości powtarzały sie maksymalnie 2x?
Nie robiłem jeszcze makr w Office.
Testowane przy użyciu Excel 2007 !
Włącz kartę Deweloper: Kółko w lewym górnym rogu -> Opcje programu Excel -> Popularne -> Pokaż kartę Deweloper na wstążce
Wklej kod makra: Karta Deweloper -> Visual Basic (w sekcji Kod) -> Menu Insert -> Module ->
Private Type RandomNumber
Number As Integer
OccurrenceCount As Integer
End Type
Public Function LosNumbers(min As Integer, max As Integer, resultCount As Integer, Optional allowedOccurrenceCount As Integer = 1, Optional resultHorizontal As Boolean = True) As Variant
Dim result() As Variant
Dim elementsCount As Integer
Dim temp, maxRows, maxColumns As Integer
Dim randomNumbers() As RandomNumber
If resultHorizontal Then
maxRows = 1
maxColumns = resultCount
ReDim result(1 To 1, 1 To resultCount)
Else
maxRows = resultCount
maxColumns = 1
ReDim result(1 To resultCount, 1 To 1)
End If
elementsCount = max - min + 1
ReDim randomNumbers(1 To elementsCount)
temp = min
randomNumbers(1).Number = temp
For i = 2 To elementsCount
temp = temp + 1
randomNumbers(i).Number = temp
Next i
For i = 1 To maxRows
For j = 1 To maxColumns
result(i, j) = LosNumbersHelper(randomNumbers, elementsCount, allowedOccurrenceCount)
Next j
Next i
LosNumbers = result
End Function
Private Function LosNumbersHelper(ByRef randomNumbers() As RandomNumber, ByRef elementsCount As Integer, allowedOccurrenceCount As Integer) As Integer
Dim randomIndex As Integer
randomIndex = Int(elementsCount * Rnd + 1) ’ http://www.techonthenet.com/excel/formulas/rnd.php
If randomNumbers(randomIndex).OccurrenceCount < allowedOccurrenceCount Then
randomNumbers(randomIndex).OccurrenceCount = randomNumbers(randomIndex).OccurrenceCount + 1
LosNumbersHelper = randomNumbers(randomIndex).Number
Else
LosNumbersHelper = LosNumbersHelper(randomNumbers, elementsCount, allowedOccurrenceCount)
End If
End Function
-> Zamknij okno Microsoft Visual Basic
Nagłówek funkcji wygląda następująco:
LosNumbers(min As Integer, max As Integer, resultCount As Integer, Optional allowedOccurrenceCount As Integer = 1, Optional resultHorizontal As Boolean = True) As Variant
min -> dolna wartość przedziału, z którego mają być losowane liczby
max -> górna wartość przedziału, z którego mają być losowane liczby
resultCount -> ile liczb ma zostać wylosowane
allowedOccurrenceCount -> parametr opcjonalny; domyślna wartość to 1; mówi o tym jaka jest maksymalna dopuszczalna ilość powtórzeń danej liczby
resultHorizontal -> parametr opcjonalny; domyślna wartość to True; jeśli True to wyniki będą wyświetlone w poziomie (wszystkie w jednym wierszu), a jeśli False to wyniki będą wyświetlone w pionie (wszystkie w jednej kolumnie)
Przykładowe użycie funkcji:
=LosNumbers(1;49;6)
Losuje 6 liczb z przedziału od 1 do 49. Dana liczba może być wylosowana tylko jeden raz. Wyniki wyświetlone będą w poziomie.
=LosNumbers(-3;75;5;2)
Losuje 5 liczb z przedziału od -3 do 75. Dana liczba może być wylosowana maksymalnie 2 razy. Wyniki będą w poziomie.
Przykładowy arkusz (plik RandomNumbers.xlsm):
https://skydrive.live.com/?cid=B4BBB812D47442DE&id=B4BBB812D47442DE!130
PS Możesz zmienić tytuł tematu na Excel 2010 Losowanie bez powtórzeń?
Dzięki wielkie!! Właśnie o to mi chodziło. Niesamowity jesteś!