Como combinar dados de duas linhas, quando determinado critério é cumprido

6


cliqueparaampliar

EstoutentandofazerestedocumentodoExcel,masqueroqueoAdminTimesparaomesmoLastRxNoestejanamesmalinha.Portanto,seoLastRxNoforomesmo,tenhaumalinhaeacolunaAdminTimetenhaváriosvalores.Aquiestáumafotodoqueeuqueroquepareça


cliqueparaampliar

Algumaideia?EuestavapensandoemumafunçãoIF,masnãoestoumuitofamiliarizadocomoExcelparafazê-lofuncionar.

Foi feito apenas na ferramenta Microsoft Query no Excel.

    
por Community 28.06.2012 / 22:17

5 respostas

1

Você poderia criar uma tabela dinâmica a partir desses dados, embora em vez de ser apresentada em linhas, ela fica em uma coluna. ou seja, selecione todos os dados, Inserir > Tabela dinâmica, arrastar PatID, LastRxNo e Admintime na área "Row Labels" da tabela dinâmica, ocultar quaisquer totais ou subtotais (eu colocaria fotos, mas minha reputação é alta o suficiente aqui ainda - meu primeiro post!) Cria uma tabela dinâmica que se parece com isso (não tenho certeza se isso será exibido na minha postagem): 855   87160     6 HORAS DA MANHÃ     2PM     Dez horas (e assim por diante ...)

Como alternativa, se você alterou a consulta SQL em sua instrução select para retornar o nome inteiro em uma célula (Select ......., Patients.PatLName + ',' + Patients.PatFname, ...... ..) você poderia fazer com que o pivô retornasse o nome inteiro do paciente em vez do número, algo assim ... Parker, Corde   87160     6 HORAS DA MANHÃ     2PM     Dez horas (e assim por diante ...)

Pode não ser exatamente o mesmo formato originalmente solicitado, mas parece legível para mim (supondo que você o esteja usando para marcar quando os remédios foram administrados?)

    
por 16.05.2014 / 02:15
1

Crieumacolunaqueadicioneacontagemaocódigo

=B5&" "&COUNTIF($B$2:$B5,B5)

então você pode pesquisar cada entrada separada e concatenar o texto em que a fórmula em d2 se torna: -

=IF($B2&" "&1=D2, INDEX(C:C,MATCH($B2&" "&1,D:D,0))&" "&IFERROR(INDEX(C:C,MATCH($B2&" "&2,D:D,0)),"")&" "&IFERROR(INDEX(C:C,MATCH($B2&" "&3,D:D,0)),"")&" "&IFERROR(INDEX(C:C,MATCH($B2&" "&4,D:D,0)),""),"")

Para cada possibilidade, você precisará adicionar um &" "&IFERROR(INDEX(C:C,MATCH($B5&" "&5,D:D,0)),"") , em que &5 se torna &6 etc. A fórmula acima se estende apenas até 4 instâncias.

    
por 20.02.2015 / 17:09
0

Esta é uma macro bastante rápida e confusa que ainda deixa muito a fazer, mas você terá a ideia. Também presume que sua planilha original ("Planilha1") seja classificada por LastRxNo. Se você tivesse a capacidade de adicionar e chamar uma função no SQLServer, seria uma tarefa mais simples, menos propensa a erros.  Espero que isso ajude você a começar. ele é enviado para uma planilha chamada "resumo"

Sub conCatTimes()
Dim rx As String
Dim admTimes As String
Dim tmp As String
Dim i As Long
Dim LastRow As Long
LastRow = Sheets("Sheet1").Range("C" & ActiveSheet.Rows.Count).End(xlUp).Row
rx = ""
i = 1
For Each cell In Sheets("Sheet1").Range("C2:C" & LastRow)
    If rx <> cell Then
        rx = cell
        i = i + 1
        tmp = ""
    End If
tmp = cell.Offset(0, 11)
admTimes = admTimes + tmp + ", "
    If cell.Offset(1, 0) <> rx Then
        Sheets("summary").Range("A" & i) = rx
        Sheets("summary").Range("B" & i) = Left(admTimes, Len(admTimes) - 2)
        admTimes = ""
    End If
Next

End Sub
    
por 04.07.2012 / 03:26
0

Eu recomendaria usar uma macro para copiar o conteúdo da tabela em uma tabela idêntica, filtrar valores duplicados - ignorando a coluna AdminTime - e, em seguida, percorrer a tabela original para encontrar os mesmos valores e combinar todos os valores AdminTime em uma única string. No código abaixo, você obviamente terá que ajustá-lo um pouco para suas necessidades, especialmente onde eu defino as tabelas e o filtro por valores únicos. Além disso, presumi que AdminTime é a última coluna da sua tabela, o que pode não ser o caso.

Option Explicit

Sub combineAdminTimes()

    'Declarations
    Dim tbl1 As ListObject  'Original table
    Dim tbl2 As ListObject  'Abbreviated table
    Dim arrColumns()        'Array of column numbers in which to search for duplicate values
    Dim rcd1 As ListRow     'Generic list row in original table
    Dim rcd2 As ListRow     'Generic list row in abbreviated table
    Dim i As Long           'Generic counter
    Dim blnMatch As Boolean 'Whether or not the two records match and should be combined
    Dim s As String         'String in which to store the combined result

    'Initialize
    Set tbl1 = Sheet1.ListObjects(1)
    Set tbl2 = Sheet2.ListObjects(1)

    'Clear the old filtered list
    If Not tbl2.DataBodyRange Is Nothing Then tbl2.DataBodyRange.Rows.Delete

    'Copy the unfiltered list
    tbl1.DataBodyRange.Copy tbl2.Range(2, 1)

    'Remove all duplicate values
    tbl2.Range.RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7), Header:=xlYes

    'Loop through records in abbreviated table
    For Each rcd2 In tbl2.ListRows
        s = ""
        'Loop through records in original table
        For Each rcd1 In tbl1.ListRows
            'Check if any fields in the two records do not match
            blnMatch = True
            For i = 1 To tbl1.ListColumns.Count - 1
                If rcd1.Range(1, i).Value <> rcd2.Range(1, i).Value Then blnMatch = False
            Next

            'If all matched, then add the time value to the string
            If blnMatch Then
                If LenB(s) > 0 Then s = s & ", "    'Separate each entry by a comma
                s = s & tbl1.ListColumns("AdminTime").Range(rcd1.Range.Row, 1).Value
            End If
        Next

        'Finally, store the combined string in the abbreviated table
        tbl2.ListColumns("AdminTime").Range(rcd2.Range.Row, 1).Value = s
    Next

End Sub
    
por 24.07.2014 / 18:21
0

Eu usaria o suplemento de consulta de energia para isso. Eu acho que você poderia conseguir essa tarefa sem escrever uma linha de código.

Primeiro, usaria o comando Duplicate Column para duplicar a coluna AdminTimes. Então eu usaria o comando Pivot para converter os dados do AdminTimes em colunas:

link

Na definição de Pivot, eu definiria a coluna Valores para a coluna "Cópia de AdminTimes" criada anteriormente e a Função de Valor Agregado para "Não Agregar". Isso será agrupado automaticamente por todas as outras colunas.

Então eu usaria o comando Mesclar Colunas para combinar as novas colunas geradas em uma. Eu usaria um separador personalizado "," (vírgula, espaço) para obter a apresentação que você procura.

    
por 01.10.2014 / 06:49