按不同行数的组对列表进行排序

时间:2014-02-21 23:28:22

标签: excel excel-vba sorting excel-formula worksheet-function vba

我已将断开链接搜索的结果导入Excel,我现在需要根据错误代码对结果进行排序。我无法理解如何执行此操作,因为错误代码位于URL下方的行中,而不是位于其旁边的列中。此外,一些URL占用多行。

以下是电子表格部分的屏幕截图:

results in excel

我如何将错误404的所有结果分组在一起?

4 个答案:

答案 0 :(得分:2)

您将在下面找到满足您需求的VBA代码。因为我没有原始表单,所以我创建了一个excel并放置了一些随机数据。对我来说很好。

Sub test()
    Dim row, rowDest, rowAux As Integer
    Dim source As Worksheet
    Dim dest As Worksheet

    'Replace here by the name of the worksheet that contains the data
    Set source = Worksheets("Sheet1")

    'This is the sheet where the modified data will be placed
    Set dest = Worksheets("Sheet2")

    'Start row (source sheet)
    row = 1

    'Start row (dest sheet)
    rowDest = 1

    'This is an auxiliary variable used to fill the error code column
    rowAux = 0

    'Go to the last line (column 1) of your source sheet and write the string !q
    'This will be used as a flag to know where your data finish
    While (source.Cells(row, 1).Value <> "!q")
        If (InStr(source.Cells(row, 1).Value, "http") > 0) Then
            dest.Cells(rowDest, 1).Value = source.Cells(row, 1).Value
            If (rowAux = 0) Then rowAux = rowDest
            rowDest = rowDest + 1
        ElseIf (InStr(source.Cells(row, 1).Value, "error code") > 0) Then
            While (dest.Cells(rowAux, 1).Value <> "")
                dest.Cells(rowAux, 2).Value = source.Cells(row, 1).Value
                rowAux = rowAux + 1
            Wend

            rowAux = 0
        End If

        row = row + 1
    Wend
End Sub

我的数据集和结果:

来源表:

Source sheet

目标表:

Dest sheet

答案 1 :(得分:1)

在A的左侧插入一列,并填入一系列数字(1,2,3,...)。现在按列B排序。选择所有错误代码条目并将它们拖到列c(或其他一些空列)。按照A列中的数字序列来处理工作表。现在所有已排序且错误代码是单独的列(C),您可以右键单击C1,然后选择向上移动单元格。可以删除列A,您可以按URL排序(虽然看起来有点清理文本)。

答案 2 :(得分:1)

除非您可以在与URL相同的行中获取错误代码,否则这将很难做到。但是,您仍然可以通过在错误代码上使用SEARCH函数来执行此操作。这将找到404错误,但它不会在其下方的单元格中提供URL。因此,您需要一个函数来检查它的单元格下面的单元格是否找到了404代码。然后,您可以过滤“true”值并获得两行。

在A中创建一个新列,并使用下面的函数。

=IF(ISNUMBER(SEARCH("404",B1)),1,IF(A2=1,2,0))

过滤掉1和2的值。

基于http://office.microsoft.com/en-us/excel-help/check-if-a-cell-contains-text-HP003056106.aspx和功能的解决方案:

=IF(ISNUMBER(SEARCH("v",A2)),"OK", "Not OK")

答案 3 :(得分:1)

受制于某些限制(但它们不在您的Q中!)插入的ColumnA中的此公式可能会起作用:

=INDEX(C1:C3,MATCH("*error code:*",C1:C3,0))  

与插入的ColumnB中的=ROW()一起(尽管可能在其他地方),并且同时向下复制。

公式应该转换为值(复制ColumnsA:B,Paste Special ...,值超过顶部),排序基于ColumnA然后ColumnB。可以删除ColumnC中的空白行,也可以删除该列中包含错误代码的行。

相关问题