1

У меня 3 листа в Excel "Открыть", "Новый", "Объединить"

    "Open" Sheet (Old list)

    Ticket ID  |  Priority |  Department  |  Status 
    36009      |     1     |   Finance    |  01-Open
    34781      |     2     |   Finance    |  02-Vendor
    35776      |     1     |   Finance    |  01-Open

    "New" Sheet (New List)
    Ticket ID  |  Priority |  Department  |  Status 
    34781      |     3     |   Finance    |  01-Vendor
    35776      |     5     |   Finance    |  10-Closed
    35607      |     2     |   Finance    |  01-Open    

    "Combine" Sheet (End Result)
    Ticket ID  |  Priority |  Department  |  Status 
    36009      |     1     |   Finance    |  01-Open
    34781      |     3     |   Finance    |  01-Vendor
    35776      |     5     |   Finance    |  10-Closed
    35607      |     2     |   Finance    |  01-Open    

Поэтому я пытаюсь объединить открытый лист и новый лист с листом объединения, новый лист имеет приоритет над открытым листом. Мы получим 3 разных результата:

  1. Дублирующиеся результаты, которые являются билетами, которые существуют в Open и New. С дубликатом я получаю только результаты из "New" (пометьте это как желтый фон)

  2. Старые результаты, то есть Билеты, которые есть только в Открытом, а не в "Новом" листе (пометьте это как красный фон)

  3. Новые результаты - это заявки, которые находятся только в Новом, а не в Открытом (отметьте это как зеленый фон)

Поэтому мне нравится копировать всю строку для каждой проверки идентификатора билета

А пока в качестве примера я ищу Дубликаты и Новые значения (От нового листа до Открытых значений листа) с этой функцией

=IF(ISERROR(VLOOKUP(New!B2;Open!$B$2:$B$998;1;FALSE));IF(New!B2=0;"Empty";"NEW");"Duplicate")

Как я могу легко сделать лист Combine таким, каким я его хочу (например, автоматически заполнить)?

1 ответ1

0

Как уже говорили другие, я не думаю, что это возможно с функциями Excel. Даже если это так, это будет происходить медленно. Запуск макроса VBA будет намного быстрее. Я написал образец, чтобы помочь вам на вашем пути. Он должен более или менее делать то, что вы ищете:

Public Sub do_all_the_things()

Dim i As Integer
Dim j As Integer
Dim color As String
i = 1

 Do Until i = Range("'Open'!A1").End(xlDown).Row + 1
  j = 1
  color = "green"

  Do Until j = Range("'New'!A1").End(xlToRight).Column + 1
   If Range("'New'!A" & j).Value = Range("'Open'!A" & j).Value Then
    color = "yellow"
   Exit Do
   End If

   If color = "green" Then
    Do Until j = Range("'Combined'!A1").End(xlToRight).Column + 1
     If Range("'Combined'!A" & j).Value = Range("'Open'!A" & j).Value Then
      color = "red"
      Exit Do
     End If

     j = j + 1
   Loop

   End If

'at this point we know what color the row is
  row_on = Range("'Combined'!A1").End(xlDown).Row + 1

  Range("'Combined'!" & row_on & ":" & row_on).Value = Range("'New'!" & i & ":" & i).Value

  If color = "red" Then
   Range("'Combined'!" & row_on & ":" & row_on).Interior = 255 'red
  End If

  If color = "yellow" Then
   Range("'Combined'!" & row_on & ":" & row_on).Interior = 65535 'yellow
  End If

  If color = "red" Then
   Range("'Combined'!" & row_on & ":" & row_on).Interior.ThemeColor = xlThemeColorAccent6 'green
  End If

  i = i + 1
 Loop




End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .