【发布时间】:2018-11-04 21:09:00
【问题描述】:
【问题讨论】:
-
这是预期的行为。
【问题讨论】:
Excel 将对您选择的最左侧字段(或“列”)进行排序,并相应地移动每一行的关联值。
我已经录制了一个宏,然后为您编辑了它,我相信它应该可以工作。只需选择所有值并运行宏:
Option Explicit
Sub SortColumnsIndividually()
Dim Column As Range
For Each Column In Selection.Columns
ActiveSheet.Sort.SortFields.Clear
ActiveSheet.Sort.SortFields.Add Key:=Column, _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveSheet.Sort
.SetRange Column
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Next Column
End Sub
这是因为 excel 将每一行视为相关值的集合。 例如,考虑下表:
+-----------+-----------+--------+
| FirstName | LastName | Salary |
+-----------+-----------+--------+
| Bob | Smith | 45000 |
| Jane | Doe | 55000 |
| Susan | Black | 48000 |
| Frank | Daniels | 51000 |
+-----------+-----------+--------+
假设您想按薪水从小到大排序。您会期望当 excel 移动薪水值时,它也会移动关联的名字和姓氏,而不是单独对薪水字段进行排序。
因此,按 Salary 升序对该表进行排序,您会期望得到这样的结果:
+-----------+-----------+--------+
| FirstName | LastName | Salary |
+-----------+-----------+--------+
| Bob | Smith | 45000 |
| Susan | Black | 48000 |
| Frank | Daniels | 51000 |
| Jane | Doe | 55000 |
+-----------+-----------+--------+
不是这个(看看现在的名字是如何映射到不同的薪水的?):
+-----------+-----------+--------+
| FirstName | LastName | Salary |
+-----------+-----------+--------+
| Bob | Smith | 45000 |
| Jane | Doe | 48000 |
| Susan | Black | 51000 |
| Frank | Daniels | 55000 |
+-----------+-----------+--------+
由于上述案例代表了 Excel 用户执行的绝大多数排序任务,因此这是 Excel 的预期行为。
【讨论】: