|
本帖最后由 hwc2ycy 于 2013-1-25 14:14 编辑
再修改,在代码开始运行后就进行列标溢出的判断,避免先操作了一大段数据后,发现无效再提示,这样可以提高效率。- Option Explicit
- Public Col&
- Sub test()
- Dim iRow&, arrj, i&, LastCol&
- Application.ScreenUpdating = False
- iRow = Cells(Rows.Count, "j").End(xlUp).Row '行
- LastCol = [a1].End(xlToRight).Column '列
- If Col >= LastCol Then MsgBox "数据列标溢出": Exit Sub '列溢出判断
-
- arrj = Range("j2:j" & iRow).Value '读取J列数据
- Range("j2:j" & iRow) = arrj '写回数值
-
- With ActiveSheet.Sort
- With .SortFields
- .Clear '先清空原有排序字段,再添加
- .Add Key:=Range( _
- "J2:J" & iRow), SortOn:=xlSortOnValues, Order:=xlDescending ', DataOption:= xlSortNormal
- End With
- .SetRange Range(Cells(1, 1), Cells(iRow, LastCol)) '设置排序区域
- .Header = xlYes '标题行
- .Apply
- End With
- If Col = 0 Then '工作簿打开后第一次执行时COL为0,所以改为J列
- Col = 11
- Else
- Col = Col + 1 '第二次或第N次运行,列自动加1
- End If
- arrj = Range(Cells(2, Col - 1), Cells(iRow, Col - 1)) '上列数据加
- For i = LBound(arrj) To UBound(arrj)
- arrj(i, 1) = arrj(i, 1) + 1 '加1
- Next
- Range(Cells(2, Col), Cells(iRow, Col)) = arrj '数据写回工作表
- MsgBox "操作完成", vbInformation + vbOKOnly
- Application.ScreenUpdating = True
- End Sub
复制代码 |
|