jackiesusan 发表于 2025-3-27 00:37

请推荐一个随机分组的软件

本帖最后由 jackiesusan 于 2025-3-27 00:38 编辑

比如A级有1,2,,3,三位选手,B级有a,b,c三位选手,C级有甲乙丙三位选手。

软件输入后,会自动的随机从三个级别中挑选一个选手进行组队,共组成3支队伍(比如1队是1b丙)。

wslhf 发表于 2025-3-27 10:13

在Excel中实现三级别选手随机组队,可以通过以下步骤完成(结合动态数组函数和随机排序功能):

### 一、基础数据准备
1. **构建选手列表**:
   - A级:A2:A4 → 1、2、3
   - B级:B2:B4 → a、b、c
   - C级:C2:C4 → 甲、乙、丙

### 二、生成随机排序序列
2. **对每个级别生成随机排序**:
   - 在D2输入公式(A级随机排序):
   ```excel
   =SORTBY(A2:A4, RANDARRAY(3))
   ```
   - 在E2输入公式(B级随机排序):
   ```excel
   =SORTBY(B2:B4, RANDARRAY(3))
   ```
   - 在F2输入公式(C级随机排序):
   ```excel
   =SORTBY(C2:C4, RANDARRAY(3))
   ```
   *原理*:`RANDARRAY(3)`生成3个随机数,`SORTBY`根据随机数对原数据重新排序。

### 三、自动生成组队结果
3. **组合三个级别的随机选手**:
   - 在G2输入公式,下拉填充至G4:
   ```excel
   =D2&E2&F2
   ```
   - 结果示例(按F9可刷新):
   ```
   1b甲
   2a乙
   3c丙
   ```

### 四、进阶优化方法(动态数组一步到位)
4. **使用单一公式生成所有队伍**:
   ```excel
   =MAP(SEQUENCE(3), LAMBDA(x, INDEX(SORTBY(A2:A4,RANDARRAY(3)),x) & INDEX(SORTBY(B2:B4,RANDARRAY(3)),x) & INDEX(SORTBY(C2:C4,RANDARRAY(3)),x)))
   ```
   *说明*:通过`SEQUENCE(3)`生成1-3序号,`MAP`函数遍历序号,分别从三个级别的随机排序中提取对应位置选手并拼接。

### 五、固定随机结果
5. **锁定分组避免刷新**:
   - 选中生成的随机结果 → 复制 → 右键选择「粘贴为值」。
   - *提示*:每次需要重新分组时需手动刷新公式(按F9)或重新运行上述步骤。

---

### 最终效果示例
| 队伍 | 组合结果 |
|------|----------|
| 1队 | 1b甲   |
| 2队 | 2c乙   |
| 3队 | 3a丙   |

**优势**:此方法保证每个级别的选手只出现一次,且组队完全随机。通过动态数组函数可一键刷新,适用于活动抽签、实验分组等场景。

louiszoom 发表于 2025-3-27 14:46

Sub RandomTeams()
    Dim ALevel() As Variant
    Dim BLevel() As Variant
    Dim CLevel() As Variant
    Dim Teams(1 To 3) As String
    Dim i As Integer
    Dim RandomIndex1 As Integer
    Dim RandomIndex2 As Integer
    Dim RandomIndex3 As Integer
   
    ' 定义三个级别的选手
    ALevel = Array("1", "2", "3")
    BLevel = Array("a", "b", "c")
    CLevel = Array("甲", "乙", "丙")
   
    ' 随机生成3支队伍
    For i = 1 To 3
      ' 随机选择A级选手
      RandomIndex1 = Int((UBound(ALevel) + 1) * Rnd)
      ' 随机选择B级选手
      RandomIndex2 = Int((UBound(BLevel) + 1) * Rnd)
      ' 随机选择C级选手
      RandomIndex3 = Int((UBound(CLevel) + 1) * Rnd)
      
      ' 组成队伍
      Teams(i) = ALevel(RandomIndex1) & BLevel(RandomIndex2) & CLevel(RandomIndex3)
    Next i
   
    ' 输出结果到Excel工作表
    For i = 1 To 3
      Cells(i, 1).Value = "队伍" & i & ": " & Teams(i)
    Next i
   
    MsgBox "队伍分配完成!"
End Sub

jackiesusan 发表于 2025-3-27 21:26

louiszoom 发表于 2025-3-27 14:46
Sub RandomTeams()
    Dim ALevel() As Variant
    Dim BLevel() As Variant


请问这些在哪个软件里操作呢?

louiszoom 发表于 2025-3-28 09:48

jackiesusan 发表于 2025-3-27 21:26
请问这些在哪个软件里操作呢?

vba后台 建立一个按钮 再写进去
页: [1]
查看完整版本: 请推荐一个随机分组的软件