Excel如何实现9条USA后接1条其他数据的分布?求手动及VBA方案
Excel实现9条USA数据后接1条Other数据的两种方案
手动操作方案
- 步骤1:新增辅助排序列
假设原数据A列为姓名、B列为国家,表头在第1行,数据从第2行开始,在C1单元格输入表头辅助序号。 - 步骤2:给USA类数据编号
选中B列,点击「数据」选项卡下的「筛选」,筛选B列值为USA的行。在C2单元格输入1,选中C列所有筛选出来的空白单元格,按Ctrl+D向下填充序列,得到1~9000的连续序号。 - 步骤3:给Other类数据编号
筛选B列值为Other的行,在C列第一个Other对应的单元格输入10,下一个输入20,选中这两个单元格下拉填充,所有Other的辅助序号会自动生成为10、20...10000。 - 步骤4:排序输出
取消筛选,全选整个数据区域(A1:C10001),点击「数据」选项卡下的「排序」,排序依据选择辅助序号,次序选择「升序」,确认排序后删除C列辅助列即可。
Excel VBA方案
适合数据量大的场景,一键完成排列:
- 打开目标Excel文件,按
Alt+F11唤出VBA编辑器 - 右键点击左侧工程栏里的当前工作簿,选择「插入」-「模块」
- 将以下代码粘贴到模块编辑区,按
F5运行即可
Sub ArrangeData() Dim ws As Worksheet Dim i As Long, j As Long, k As Long Dim usaArr() As Variant, otherArr() As Variant Dim arrResult() As Variant ' 绑定当前活动工作表,可修改为指定表名:Set ws = ThisWorkbook.Worksheets("表名") Set ws = ThisWorkbook.ActiveSheet i = 2 ' 数据从第2行开始,表头在第1行,如有调整可修改 ReDim usaArr(1 To 9000, 1 To 2) ' 存储USA数据,共2列:姓名、国家 ReDim otherArr(1 To 1000, 1 To 2) ' 存储Other数据 ' 遍历原表分类存储数据 Do While ws.Cells(i, 1) <> "" If ws.Cells(i, 2) = "USA" Then j = j + 1 usaArr(j, 1) = ws.Cells(i, 1) usaArr(j, 2) = ws.Cells(i, 2) Else k = k + 1 otherArr(k, 1) = ws.Cells(i, 1) otherArr(k, 2) = ws.Cells(i, 2) End If i = i + 1 Loop ' 按9条USA+1条Other的规则构建结果数组 ReDim arrResult(1 To 10000, 1 To 2) j = 1: k = 1 For i = 1 To 10000 If i Mod 10 <> 0 Then arrResult(i, 1) = usaArr(j, 1) arrResult(i, 2) = usaArr(j, 2) j = j + 1 Else arrResult(i, 1) = otherArr(k, 1) arrResult(i, 2) = otherArr(k, 2) k = k + 1 End If Next ' 清空原表数据(保留表头)并写入结果 ws.Range("A2:B" & ws.Rows.Count).Clear ws.Range("A2").Resize(10000, 2) = arrResult Set ws = Nothing MsgBox "数据排列完成", vbInformation End Sub
如果你的数据列、表头位置和示例不同,只需调整代码中对应的列号、起始行参数即可。
内容的提问来源于stack exchange,提问作者user3408723
相关产品推荐
相关产品推荐

