以下代码能满足你的要求:
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
追问![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/c8177f3e6709c93d12d460629e3df8dcd1005404?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/3c6d55fbb2fb4316b6c314ef21a4462308f7d343?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
运行不了 这是怎么回事
追答代码写的位置不同引起的问题,代码写在表格代码里就行。如果写在模块里,前面需加表名,如
For i = 2 To sheet1.UsedRange.Rows.Count 或
For i = 2 To sheets("XX").UsedRange.Rows.Count’其中XX代表表的名称
如果代码只处理一个表的数据,最好写在表格代码位置,这样不仅代码会简单,也不会因当前表发生变化而引起错误。我们常常发生这样的情况:在同时打开有多个文件调试程序时,稍不注意就将数据搞乱,因为忘记了当前表与程序中要处理的表不是同一表。在表格位置写代码就不管当前表如何,都处理代码所在表的数据。尽量养成这样一个好习惯。
本回答被提问者采纳