在excel上排序两列,同时保留空白单元格

时间:2014-05-27 23:27:30

标签: excel excel-2011

因此,我尝试将具有最喜欢颜色的名称列表排序到每个名称。换句话说,我希望排序看起来像下面的例子:( A和B对应列,而#的对应行)

  **A**  **B**                  **A**   **B**
1 Tim    Red                  1 Josh    Black
2        Blue                 2         Yellow
3        Purple               3 Maria   Grey 
4 Josh   Yellow               4         Orange
5        Black                5         Pink
6 Maria  Pink                 6 Tim     Blue
7        Orange               7         Purple
8        Grey                 8         Red

我希望它首先对名称进行排序,无论名称在哪里,颜色都会跟随其位置,然后对颜色进行排序。有没有办法在不使用VBA的情况下执行此操作,因为我不知道如何使用VBA。任何帮助都会非常感激,并且对于记录而言,这不适用于课堂作业。

我目前正在使用Microsoft Excel 2011 for Mac。

2 个答案:

答案 0 :(得分:0)

我对工作表功能和内容并不是那么好,但我认为如果不使用VBA,你将无法达到你想要的效果。

假设Mac VBA与Windows上的相同,以下代码应该让您入门。

理念:通过填写空白的“名称”单元格进行常规排序工作,并在排序完成后删除额外的名称。我没有包含代码来进行实际的排序,但是下面的两个方法应该填充空单元格并且还将它们清空。

Public Sub InsertDuplicates()
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("Sheet1")
Dim Current As String: Current = ""
Dim Row As Integer: Row = 1
' Fill the blank cells in the names column
Do
    If Sheet.Cells(Row, 2).Value2 = "" Then
        ' Break out of the loop
        Exit Do
    End If
    If Sheet.Cells(Row, 1).Value2 = "" Then
        ' No name present, so populate cell with the current name
        Sheet.Cells(Row, 1).Value2 = Current
    Else
        ' A name has been found, set it as the current name
        Current = Sheet.Cells(Row, 1).Value2
    End If
    ' Goto the next row
    Row = Row + 1
Loop

End Sub

Public Sub RemoveDuplicates()
Dim Sheet As Worksheet: Set Sheet = ThisWorkbook.Worksheets("Sheet1")
Dim Current As String: Current = ""
Dim Row As Integer: Row = 1
' Remove unwanted duplicate names in names column
Do
    If Sheet.Cells(Row, 2).Value2 = "" Then
        ' Break out of the loop
        Exit Do
    End If
    If Sheet.Cells(Row, 1).Value2 = Current Then
        ' Row is a duplicate so empty the value
        Sheet.Cells(Row, 1).Value2 = ""
    Else
        ' Row is different from the previous, store the value and continue
        Current = Sheet.Cells(Row, 1).Value2
    End If
    ' Goto the next row
    Row = Row + 1
Loop

End Sub

Public Sub SortList()
' perform the sort (you can record a macro to get the code required)
End Sub

Public Sub DoIt()
' this is the main macro, call this sub to action a sort.
InsertDuplicates
SortList
RemoveDuplicates
End Sub

答案 1 :(得分:0)

这可以在没有VBA的情况下完成,使用辅助列和手动排序。

如果您想要一直这样做而不是一次,您可能需要考虑更改数据架构。在每行的原始数据表中输入名称,然后构建一个透视表,显示您所在的排序布局。

手动进行排序的步骤:

在第1行插入标题行,并为每列添加标签,即名称,颜色。 添加另一列并在单元格C2中使用此公式(向下复制):

=IF(ISBLANK(A2),C1,A2)

复制列C并使用Paste Special>粘贴自身;值。现在这个列中只有名称。 使用排序对话框首先按新列排序,然后按颜色秒排序。这些是确认排序之前的设置:

enter image description here

排序后,你会看到:

enter image description here

使用此公式添加另一个公式列,从D2开始并向下复制:

=IF(C2<>C1,C2,"")

复制列D,粘贴到A列上的值。删除帮助列。