Excel 如何对一列数据进行排序并与具有某些单元格的另一列数据匹配

How to sort one column data and match to another column data with some cells was merged in Excel

我正在尝试对 colum 数据进行排序并与 Excel 2013 中的另一列数据匹配。我不知道如何解释更多,因为我真的很业余使用 excel,所以我有 table 像这样:

|Date      | Technician |    Task    |
|----------|------------|------------|
|01/01/2020|          CLOSED         |
|02/01/2020|Cindy       |Check       |
|02/01/2020|Cindy       |Repair      |
|03/01/2020|Cindy       |Check       |
|03/01/2020|Cindy       |Maintenance |
|04/01/2020|Joe         |Repair      |
|05/01/2020|          CLOSED         |
|06/01/2020|Joe         |Maintenance |
|06/01/2020|Steph       |Check       |

我正在尝试像这样排序和匹配:

|Date      | Technician |    Task    |
|----------|------------|------------|
|01/01/2020|          CLOSED         |
|02/01/2020|Cindy       |Check       |
|02/01/2020|Cindy       |Check       |
|03/01/2020|Cindy       |Maintenance |
|03/01/2020|Cindy       |Repair      |
|04/01/2020|Joe         |Maintenance |
|05/01/2020|          CLOSED         |
|06/01/2020|Joe         |Repair      |
|06/01/2020|Steph       |Check       |

我通常使用数据库 sql,如果它在 SQL 查询中,它应该是:

select technician, task from employee order by technician, task asc;

但目前我没有使用数据库 sql,只是 excel。希望有人能帮助我也为我的英语感到抱歉。

欢迎来到 SO。这一切都可以使用 Excel 公式(根据您的 excel-formula 标签),但我认为最简单的方法是实际使用本机 Excel 功能。

步骤 1 - select 您的数据(我假设您的数据存储在单元格 A1:B8 中)

步骤 2 - 转到 Home > Sort & Filter > Custom Sort... - 检查 "My data has headers" 选项并添加第一级(技术员),然后使用 "Add Level" 按钮并添加第二级(任务):

这是您的最终结果:

编辑 - 为了取消合并 B 列中的所有单元格,您需要 运行 以下代码:

Sub UnMergeCells()
    Dim lngRows             As Long
    Dim lngRow              As Long

    With Sheets("Sheet1")
        lngRows = .UsedRange.Rows.Count

        For lngRow = 2 To lngRows
            If .Range("B" & lngRow).MergeCells Then
                .Range("B" & lngRow).MergeArea.UnMerge
            End If
        Next lngRow
    End With
End Sub

然后您可以按照我在原文 post ("Custom Sort") 中描述的三个步骤进行操作。 完成后,您可以通过 运行 执行以下代码将所有单元格合并回之前的状态:

Sub MergeCells()
    Dim lngRows             As Long
    Dim lngRow              As Long

    With Sheets("Sheet1")
        lngRows = .UsedRange.Rows.Count

        For lngRow = 2 To lngRows
            If .Range("B" & lngRow).Value = "CLOSED" Then
                .Range("B" & lngRow & ":C" & lngRow).Merge
            End If
        Next lngRow
    End With
End Sub