Office中国论坛/Access中国论坛
标题:
Access挑战Excel第二十七期:合并,又见合并
[打印本页]
作者:
roych
时间:
2016-7-12 11:21
标题:
Access挑战Excel第二十七期:合并,又见合并
关于合并数据,其实已经挑战过一次,不过,当时用的是联合查询。不过这次说的“合并”跟上一次是不一样的。先上图:原数据:
[attach]59546[/attach]
合并后:
[attach]59547[/attach]
这种合并在日常工作中还是很常见的,例如,一个用户购买了多个商品,配送时可能就需要根据已有现货的进行合并了。——当然,如果客户允许全部到货之后再一次性寄则不存在这个情况。
在access里大约只需4行代码就好了……好吧,代码,代码……
(Roy表示,已经感受到来自于某妖深深的鄙视了)
不过,Excel用户打算怎么解决这个问题呢?公式吗?别忘了,用户ID可是乱序的哦。
Function MergeData(ByVal strFieldName As String, ByVal lngID As Long) As String
Dim rst As New ADODB.Recordset
rst.Open "select " & strFieldName & " from 数据 where 用户ID=" & lngID, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
MergeData = rst.GetString(RowDelimeter:=";")
rst.Close
End Function
复制代码
[attach]59548[/attach]
PS:估计这几天某妖都不在,我能不能嘚瑟那么几天先呢?
作者:
purplerose
时间:
2016-7-12 11:26
ROYCH,您好!前几天在看合并数据的处理,现在终于可以看到A和E高手是怎样做的呀,真心地学习一下,谢了!
作者:
tmtony
时间:
2016-7-12 13:03
小妖不在人间?
作者:
purplerose
时间:
2016-7-12 14:01
ROYCH,您怎么知道小妖老师不在呀?可能去修练了,到时出关时,就不一样了,水平又上升一个档次了。
作者:
ganlinlao
时间:
2016-7-16 11:45
recordset的getstring其实是有严重缺陷的,
在这里我就不多说了,先将就着用吧
作者:
pureshadow
时间:
2016-7-17 17:03
Roy,下次这种要祭出代码的,就不要拿出来显摆了,Access有VBA,难道Excel没有VBA么?
Sub Sample()
Dim MyRow As Long, i As Long
Dim MyFind As Range
Range("d1:e1") = Range("a1:b1").Value
i = 1
For MyRow = 2 To 28
Set MyFind = Range("d:d").Find(Cells(MyRow, 1), , , xlWhole)
If MyFind Is Nothing Then
i = i + 1
Cells(i, 4) = Cells(MyRow, 1)
Cells(i, 5) = Cells(MyRow, 2)
Else
Cells(MyFind.Row, 5) = Cells(MyFind.Row, 5) & ";" & Cells(MyRow, 2)
End If
Next
Set MyFind = Nothing
End Sub
复制代码
作者:
pureshadow
时间:
2016-7-17 17:47
好吧,你会说代码太复杂,那PowerQuery怎么样?[attach]59570[/attach]
进入PQ神器以后到转换选项卡下分个组:
[attach]59571[/attach]
至于具体的分组依据……就这样吧,直接确定:
[attach]59572[/attach]
不过您可能会说,这确定以后的……与我们想要的效果半点不搭界啊?
不搭界不要紧,改一下公式就好了。
把原来的
= Table.Group(更改的类型, {"用户ID"}, {{"计数", each Table.RowCount(_), type number}})
复制代码
改成
= Table.Group(更改的类型, {"用户ID"}, {{"结果", each Text.Combine([套餐名称],";")}})
复制代码
就行了,看看是不是这样:
[attach]59573[/attach]
最后上传就好了。
[attach]59574[/attach]
效果都在下面的附件里的,有兴趣就自己打开来看吧。不过!非2016版O365请忽略。
作者:
pureshadow
时间:
2016-7-17 17:52
好吧,我承认,这题确实让我损失不少脑细胞,后来脑细胞不够用了,就找了N个SQL大神请教,最后无果……
然后又想尝试公式=TEXTJOIN(",",1,IF(A$2:A$7=D2,B$2:B$7)),最后又无果……
Roy,你赢了!
作者:
pureshadow
时间:
2016-8-2 12:13
后来LUXS(DiDi9)同学又给出函数解答方法,如附件。
作者:
李力军2
时间:
2016-9-1 15:23
好事,这种PK要经常搞啊
作者:
李力军2
时间:
2016-9-1 16:01
这个问题,在ACC里面,可以不用代码,全部用查询也是可以解决的。以前的有过这方面的例子。
作者:
李力军2
时间:
2016-9-1 16:04
李力军2 发表于 2016-9-1 16:01
这个问题,在ACC里面,可以不用代码,全部用查询也是可以解决的。以前的有过这方面的例子。
但楼主的这个思路最为便捷
作者:
enllun
时间:
2016-11-25 11:21
厉害啊,
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3