【问题标题】:Sort a list by groups of varying number of rows按不同行数的组对列表进行排序
【发布时间】:2014-03-23 17:22:02
【问题描述】:

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

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

如何将所有出现错误 404 的结果组合在一起?

【问题讨论】:

  • 解决这个问题的一个简单方法是编写一个 VBA 代码,将您的数据分成两列(链接和错误代码)。之后,您可以使用 Excel 排序根据错误代码对数据进行排序。
  • 嗯,好的,听起来不错。你知道怎么做吗?
  • 好的。我会为您编写代码并发布作为答案。请稍等。
  • 我将先尝试其他答案,看看它们是否适合我,可能会更容易
  • 好的。别担心。尝试每个答案并选择最能解决您的问题的答案很重要。

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


【解决方案1】:

您将在下面找到满足您需要的 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

我的数据集和结果:

源表:

目标表:

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      在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")
      

      【讨论】:

        【解决方案4】:

        受到一些限制(但它们不在你的 Q 中!)插入的 ColumnA 中的这个公式可能会起作用:

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

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

        应将公式转换为值(复制 ColumnsA:B、选择性粘贴...、顶部的值)并根据 ColumnA 然后 ColumnB 进行排序。 ColumnC中的空白行可以被删除,该列中带有错误代码的行也可以删除。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-01-19
          • 2018-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多