excel,因行数很多,想用vba把每一行都按行从小到大排序,并把数据写在相应行后面,去除重复的数据

如题所述

这个就不要用 VBA了 用公式直接来转换吧……
I2 =SMALL($A2:$G2,COLUMN(A2)) 向右复制 然后再向下复制 就重新排列了……
哦 没注意 你是要同时去掉重复的……那么公式修改一下:
将H列随便填充一些东西就可以了……
I2 =IF(SMALL($A2:$G2,COLUMN(A2))=H2,"",SMALL($A2:$G2,COLUMN(A2)))
然后复制 这些结果I2:O1000?在原位选择性粘贴数值 然后 在这个结果区域 使用定位 定位条件 常量 只保留 文本 项 然后 右键删除 右边的单元格左移……
定位的方式是:Ctrl+G 组合件 或者菜单 编辑 定位……
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-30
以下代码能满足你的要求:
Sub ABC()
Application.ScreenUpdating = False
For i = 2 To UsedRange.Rows.Count
k = 8
For j = 1 To 7
A = Application.WorksheetFunction.Small(Range("A" & i & ":G" & i), j)
If A = Cells(i, j + k - 1) And j > 1 Then k = k - 1
Cells(i, j + k) = A
Next j
Next i
Application.ScreenUpdating = True
End Sub追问


运行不了  这是怎么回事

追答

代码写的位置不同引起的问题,代码写在表格代码里就行。如果写在模块里,前面需加表名,如
For i = 2 To sheet1.UsedRange.Rows.Count 或
For i = 2 To sheets("XX").UsedRange.Rows.Count’其中XX代表表的名称
如果代码只处理一个表的数据,最好写在表格代码位置,这样不仅代码会简单,也不会因当前表发生变化而引起错误。我们常常发生这样的情况:在同时打开有多个文件调试程序时,稍不注意就将数据搞乱,因为忘记了当前表与程序中要处理的表不是同一表。在表格位置写代码就不管当前表如何,都处理代码所在表的数据。尽量养成这样一个好习惯。

本回答被提问者采纳