Excel中某种排序问题

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

 

posted @ 2019-05-17 21:28  一位在转行路上的菜鸟  阅读(296)  评论(0编辑  收藏  举报