How to Randomly Select Every Name Twice a Month in Excel
Question details
The user needs a method to randomly draw names from a list of approximately 100 people, ensuring each person is chosen exactly twice within a given month.

- Product
- Excel
- Device & OS
- not provided
- Scenario
- Creating a randomized duty roster or selection list for a monthly cycle without exceeding the maximum pick limit.
- Observed behavior
- The goal is to achieve fair random selection while strictly capping the maximum number of times any single name can be selected at two.
Ensure your list of names contains no blank rows or duplicates. Formatting your data as an Excel Table (Ctrl+T) is highly recommended, as it makes sorting and managing tracking columns much easier.
Use the RAND() Function and a Selection Tracking Column
This method uses Excel's random number generator to shuffle the list and a dedicated count column to ensure no individual is picked more than twice.
This is the most reliable method for maintaining true randomness while accurately tracking how many times each person has been selected throughout the month.
In the column immediately to the right of your list of names, enter the formula =RAND() in the first cell and drag it down to the bottom of your list to assign a random decimal to each person.
Select your entire dataset (both the names and the random numbers). Go to the Data tab, click 'Sort', and choose to sort by your random helper column. This will shuffle all the names into a random order.
Add a third column named 'Times Selected'. As you pick names from the top of the shuffled list to fulfill your needs, manually enter '1' next to their name (or add 1 to the existing number if they were picked before).
Once a person's 'Times Selected' count reaches 2, either highlight their row in gray or use Excel's Filter tool to only show rows where the count is 'Less than 2'. This ensures they are excluded from future draws.
When all names have reached a count of 2, clear the 'Times Selected' column, allow the =RAND() formula to recalculate, and re-sort the list to start a fresh cycle for the new month.

Manually Mark Selections Using Cell Colors
A simpler, visual approach that relies on color-coding rows instead of tracking numbers, which is ideal for smaller teams or less formal selections.
Randomize Data Effortlessly with WPS Spreadsheet
WPS Spreadsheet provides robust, built-in functions like RAND() and RANDARRAY(), making it incredibly easy to shuffle lists, assign duties, and manage monthly rosters without complex manual setups.
- 1. Open your list in WPS Spreadsheet: Launch WPS Office, create a new spreadsheet, and paste your list of approximately 100 names into a column.
- 2. Apply the RAND formula: Type =RAND() in the adjacent column cell and double-click the fill handle to apply it to all rows.
- 3. Sort the data: Navigate to the Data tab, click Sort, and arrange the list based on the random values to shuffle the names.
- 4. Track your selections: Add a tracking column and utilize WPS's built-in AutoFilter to hide rows once their selection count reaches 2.

Frequently Asked Questions
How do I stop the RAND() function from constantly recalculating?
The RAND() function is volatile, meaning it recalculates every time any change is made to the workbook. To freeze your random numbers, highlight the column containing the formulas, copy it (Ctrl+C), right-click the same selection, and choose 'Paste as Values' (or press Ctrl+Shift+V). This converts the formulas into static numbers.
Can I use the RANDARRAY function to automatically shuffle lists?
Yes, if you are using newer versions of Excel or WPS Office. You can type =SORTBY(A2:A101, RANDARRAY(ROWS(A2:A101))) in an empty column. This will automatically generate a dynamic, randomly shuffled copy of the list in A2:A101 without needing manual helper columns.
How can I automatically hide names that have already been picked twice?
You can achieve this using the Data Filter tool. Highlight your headers, go to Data > Filter. On your 'Selection Count' column, set a number filter to show only rows 'Less than 2'. Whenever a person's count is updated to 2, simply reapply the filter, and that row will automatically hide from your active view.




