VBA:基于虚拟对象排序的多个匹配列

时间:2015-04-16 11:45:56

标签: vba sorting excel-vba multiple-columns excel

我在excel中有一个庞大的数据表,我需要对其进行排序。 我需要根据Dummy匹配两列。 虚拟对象是C'(呼叫)或' P'(put)。另外两列是“到期日”'和'执行价格'。 我需要对数据表进行排序,使其只包含具有相同到期日期和执行价格的C和P.

我一直试图在没有任何帮助的情况下搜索互联网。我无法弄清楚如何在VBA中编程。

非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:0)

我认为解决方案:(我添加了一个新的列 - 列W - 它是空的 - 将行标记为&#34;匹配&#34;将在操作后删除。)< / p>

标记双峰(匹配行)的第一个子:

Private Sub FindDoublets()

    Dim intRowC As Long
    Dim intRowP As Long

    Application.ScreenUpdating = False 

    Range("W1").EntireColumn.Insert

    For intRowC = 2 To ActiveSheet.UsedRange.Rows.Count
        If Cells(intRowC, 6).Value = "C" Then
            For intRowP = 2 To ActiveSheet.UsedRange.Rows.Count
                If Cells(intRowP, 6).Value = "P" Then
                    If Cells(intRowC, 4).Value = Cells(intRowP, 4).Value And Cells(intRowC, 7).Value = Cells(intRowP, 7).Value Then
                        Cells(intRowC, 23).Value = "Matched"
                        Cells(intRowP, 23).Value = "Matched"
                    End If
                End If
            Next
        End If
    Next

    Application.ScreenUpdating = True

End Sub

要删除的第二个子不匹配,所以没有标记的行:

Private Sub DeleteNotMatchedRows()

    Dim intRow As Long

    Application.ScreenUpdating = False

    For intRow = ActiveSheet.UsedRange.Rows.Count To 2 Step -1
        If Cells(intRow, 23).Value <> "Matched" Then
            Rows(intRow).Delete shift:=xlShiftUp
        End If
    Next

    Range("W1").EntireColumn.Delete
    Application.ScreenUpdating = True

End Sub

答案 1 :(得分:0)

在示例表中,在W列中输入此公式:=IF(F2="C",TRUE,FALSE),将此一个输入到X列:=COUNTIFS(D:D,D2,G:G,G2,W:W,NOT(W2))
现在你将拥有&#34; 1&#34;在X列中,当实际行具有相应的C / P行和&#34; 0&#34;除此以外。只需要过滤0-s并删除行 你也可以用宏做同样的事情,但它更复杂。