我在我的代码中所做的是,我有
ID Value
1 a
1 b
1 c
2 a
2 b
我正在
ID Value
1 a,b,c
2 a,b
我可以使用STUFF关键字在SQL中执行此操作,但我决定使用此
在我编写的报告的代码部分
Private CurrGroupBy As String = String.Empty
Private ConcatVal As String = String.Empty
Public Function AggConcat(GroupBy as String, ElementVal as String) as String
If CurrGroupBy = GroupBy Then
If InStr(ConcatVal, ElementVal,0) = 0 Then
ConcatVal = Trim(ConcatVal) & ", " & ElementVal
End If
Else
CurrGroupBy = GroupBy
ConcatVal = ElementVal
End If
Return ConcatVal
End Function
并在其中一行中使用此表达式
=RunningValue(Code.AggConcat(Fields!Id.Value, Fields!Theme.Value), Last, "DataSet1")
如果查看报告并将其导出为PDF,则此功能非常有效。但是,当我将它导出到Excel时,我得到的结果是
ID Value
1 a
1 a,b
1 a,b,c
2 a
2 a,b
我在这里做错了什么?
答案 0 :(得分:2)
当我尝试重现上面解释的内容时,报表查看器和excel都会产生所描述的意外情况。
虽然为了实现所需的输出,我添加了一个报告组并删除了=(Details)
组,这在报告视图和导出到Excel时都有效。
解决方案最终看起来像:
答案 1 :(得分:0)
我不知道。如果起始代码在excel中,您可以修改此代码以执行您想要的操作。很久以前我发现了这个。如果它不是你想要的东西,请忽略它。
Sub ConcatNotesTextV2()
' hiker95, 04/14/2012
' http://www.mrexcel.com/forum/showthread.php?t=628561
Dim r As Long, lr As Long, nr As Long, n As Long
Application.ScreenUpdating = False
lr = Cells(Rows.Count, 1).End(xlUp).Row
For r = 2 To lr
n = Application.CountIf(Columns(1), Cells(r, 1).Value)
If n = 1 Then
'do nothing
ElseIf n > 1 Then
Range("B" & r) = Join(Application.Transpose(Range("B" & r & ":B" & (r + n) - 1)), ,)
Range("A" & r).Offset(1).Resize(n - 1).ClearContents
End If
r = r + n - 1
Next r
On Error Resume Next
Range("A1:A" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells (xlCellTypeBlanks).EntireRow.Delete
On Error GoTo 0
Application.ScreenUpdating = True
End Sub