Como combinar dados de duas planilhas e condicionalmente formatar linhas com base na planilha de origem

1

Eu tenho 3 folhas no Excel "Open", "New", "Combine"

    "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    

Então, o que eu tento fazer é combinar a planilha Abrir e Nova planilha na planilha de combinação, a planilha Nova tem prioridade acima da planilha aberta. Nós teremos 3 resultados diferentes:

  1. Resultados duplicados que são tickets que existem em Open e New. Com a duplicata, só obtenho os resultados de "Novo" (marque isso como fundo amarelo)

  2. Resultados antigos que são tickets que estão apenas em aberto e não na planilha "Novo" (marque isso como plano de fundo vermelho)

  3. Novos resultados são tickets que estão apenas em Novo e não em Aberto (marque isso como fundo verde)

Por isso, gosto de copiar toda a linha para cada verificação da ID do bilhete

Por enquanto, como exemplo, procuro por Duplicatas e Novos valores (de Nova planilha para Abrir valores de planilha) com esta função

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

Como posso facilmente fazer a folha Combine como eu quero (como preenchê-la automaticamente)?

    
por Beer 29.09.2014 / 15:45

1 resposta

0

Como outros já disseram, não acho que isso seja possível com as funções do excel. Mesmo que seja, será lento em fazê-lo. Executar uma macro VBA será muito mais rápido. Eu escrevi uma amostra para ajudá-lo ao longo do caminho. Deve mais ou menos fazer o que você está procurando:

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
    
por 29.09.2014 / 17:18