2015-04-16 5 views
0

У меня есть огромное техническое описание в excel, которое мне нужно отсортировать. Мне нужно два столбца, чтобы соответствовать на основе Dummy. Манекен - это либо «C» (вызов), либо «P» (поместить). Два других столбца: «дата истечения срока действия» и «цена исполнения». Мне нужно отсортировать таблицу, чтобы она содержала только C и P с одинаковой датой истечения срока действия и ценой исполнения.VBA: Несколько совпадающих столбцов отсортированы на основе манекена

Я пробовал искать интернет без какой-либо помощи. Я не могу понять, как программировать его в VBA.

Любая помощь действительно оценена.

Спасибо.

+0

Ваш вопрос непонятен, вы хотите сортировать/фильтровать/группировать свои данные? Не могли бы вы привести несколько примеров? –

+0

@ MátéJuhász, извините, что не объяснил это полностью. Я хочу отфильтровать данные на основе Call или Put. Это означает, что я хочу отфильтровать его так, чтобы цена исполнения и время истечения опциона Call была равна цене исполнения опциона Put и цене истечения. Звонок и Путь находится в 1 колонке. . Так можно написать код, который говорит: Если цена Strike для C равна Стоимость забивания для P и дата окончания для C равна. Дата окончания для P должна содержать те, которые указаны в таблице данных, и если она не равна, то она должна удалять ряд. Надеюсь, что это стало более понятным. – anwi12ad

+0

Возможно, вы могли бы взломать строку или две, что показывает, что вам нужно, и опубликовать снимок экрана. В конце концов, картина стоит 1000 слов. – Rossco

ответ

0

Решение Я думаю: (я Аддин новый столбец -column W - что с пустыми пометить строку как «согласованный», который должен быть удален после операции.)

Первый югу, чтобы отметить дублеты (совпавшие записи):

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 
+0

Комментарии не предназначены для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/75536/discussion-on-answer-by-kitap-mitap-vba-multiple-matching-columns-sorted-based). – Taryn

0

в вашем примере листе ввести эту формулу в столбце W: =IF(F2="C",TRUE,FALSE) и этот в колонку X: =COUNTIFS(D:D,D2,G:G,G2,W:W,NOT(W2))
Теперь у вас будет «1» в столбце X, когда фактическая строка имеет соответствующую строку C/P и «0» в противном случае. Просто нужно отфильтровать для 0-s и удалить строки.
Вы можете сделать то же самое с макросом, но это сложнее.

Смежные вопросы