答案1
您可以根据这些数据制作一个数据透视表,不过它不是以行的形式显示,而是以列的形式显示。例如,选择所有数据,插入 > 数据透视表,将 PatID、LastRxNo 和 Admintime 拖到数据透视表的“行标签”区域,隐藏所有总计或小计(我会发布图片,但我在这里的声誉还不够高 - 这是我的第一篇帖子!)创建一个如下所示的数据透视表(不确定这在我的帖子中是否正确显示):855 87160 6AM 2PM 10PM(等等......)
或者,如果您将选择语句中的 SQL 查询更改为在一个单元格中返回整个名称(选择……,Patients.PatLName+','+Patients.PatFname,........),您可以让数据透视表返回整个患者姓名而不是编号,如下所示...Parker,Corde 87160 6AM 2PM 10PM(等等...)
它可能与您最初要求的格式不完全相同,但对我来说似乎是清晰易读的(假设您使用它来检查何时已用药?)
答案2
创建一个将计数添加到代码的列
=B5&" "&COUNTIF($B$2:$B5,B5)
然后您可以查找每个单独的条目并连接文本,d2 中的公式变为:-
=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)),""),"")
对于每一种可能性,您都需要添加“成为”等的&" "&IFERROR(INDEX(C:C,MATCH($B5&" "&5,D:D,0)),"")
位置。上述公式仅适用于 4 个实例。&5
&6
答案3
这是一个相当快速和混乱的宏,还有很多事情要做,但你会明白的。它还假定您的原始工作表(“Sheet1”)按 LastRxNo 排序。如果您有能力在 SQLServer 中添加和调用函数,那么这将是一个更简单、更不容易出错的任务。希望这能帮助您入门。它输出到名为“summary”的工作表
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
答案4
我会使用 Power Query 插件来实现这一点。我认为你无需编写一行代码就可以完成这项任务。
我将首先使用“复制列”命令复制 AdminTimes 列。然后我将使用 Pivot 命令将 AdminTimes 数据转换为列:
在 Pivot 定义中,我将值列设置为之前创建的“AdminTimes 的副本”列,并将聚合值函数设置为“不聚合”。这将自动按所有其他列进行分组。
然后,我将使用“合并列”命令将生成的新列合并为一列。我将使用自定义分隔符“,” (逗号,然后是空格),以获得您想要的演示文稿。