Sub test() Worksheets(2).Range("A:B").Clear m = 0 For i = 1 To Sheets(1).UsedRange.Rows.Count For j = 2 To WorksheetFunction.CountA(Sheets(1).Rows(i)) m = m + 1 Sheets(2).Cells(m, 1) = Sheets(1).Cells(i, 1) Sheets(2).Cells(m, 2) = Sheets(1).Cells(i, j) Next j Next i End Sub
此代码为实现以下排序:
A A1 A2
B B1 B2 B3
C C1
排序后:
A A1
A A2
B B1
B B2
B B3
C C1
代码不用更改,但务必按以下步骤操作。数据无价,谨慎操作。
将待排序的sheet表放到第一个表的位置,新建一个sheet表放到第二个位置
上面红字至关重要,若初次尝试,请备份数据!!!
一旦进行操作,不可撤销!!!
若EXCEL的开发工具未打开,需要将其打开。开发工具位于上方工具栏。
若已有,省略以下红字步骤。
以OFFICE2016为例,
文件->选项->自定义功能区->主选项卡->开发工具 打勾 确定!
上方工具栏会出现开发工具选项
打开Visual Basic.
左边工程栏里会有你EXCEL表里的所有字表。只用看括号里的表名,双击新建的那个sheet,复制上面的代码,然后点击上面的蓝色三角箭头,运行程序。
第一次运行可能会卡,稍等即可。
运行完成后,打开新建的sheet字表,发现数据已排序完成。
以上内容参考http://blog.sina.com.cn/s/blog_49a4be1e0102yi88.html,感谢分享!
算法更新:
原数据格式为
A1|A2
B2|B2|B3
C1
排序后为
1 A1
1 A2
2 B1
2 B2
2 B3
3 C1
Sub test() Worksheets(2).Range("A:B").Clear Dim a As String m = 1 n = 1 x = 1 y = 18//y为数据的位数,可更改 For i = 1 To Sheets(1).UsedRange.Rows.Count While (x < Len(Sheets(1).Cells(i, 1))) Sheets(2).Cells(m, 1) = n a = Mid(Sheets(1).Cells(i, 1), x, 18)//18为数据的位数,可更改 Sheets(2).Cells(m, 2).NumberFormatLocal = "@"//此行为设置单元格格式,以便在Excel表中正确显示 Sheets(2).Cells(m, 2) = a x = x + y+1//为正确截取数据,需要将“|”截取 m = m + 1 Wend x = 1 n = n + 1 Next i End Sub