设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

12下一页
返回列表 发新帖
查看: 1478|回复: 12

Access挑战Excel第二十七期:合并,又见合并

[复制链接]
发表于 2016-7-12 11:21:31 | 显示全部楼层 |阅读模式
关于合并数据,其实已经挑战过一次,不过,当时用的是联合查询。不过这次说的“合并”跟上一次是不一样的。先上图:原数据:

合并后:


这种合并在日常工作中还是很常见的,例如,一个用户购买了多个商品,配送时可能就需要根据已有现货的进行合并了。——当然,如果客户允许全部到货之后再一次性寄则不存在这个情况。

在access里大约只需4行代码就好了……好吧,代码,代码……

(Roy表示,已经感受到来自于某妖深深的鄙视了)


不过,Excel用户打算怎么解决这个问题呢?公式吗?别忘了,用户ID可是乱序的哦。
  1. Function MergeData(ByVal strFieldName As String, ByVal lngID As Long) As String
  2.     Dim rst As New ADODB.Recordset
  3.     rst.Open "select " & strFieldName & " from 数据 where 用户ID=" & lngID, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  4.     MergeData = rst.GetString(RowDelimeter:=";")
  5.     rst.Close
  6. End Function
复制代码


PS:估计这几天某妖都不在,我能不能嘚瑟那么几天先呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1经验 +5 收起 理由
purplerose + 5 (V币)优秀原创教程、管理建议(1-5分)

查看全部评分

点击这里给我发消息

发表于 2016-7-12 13:03:19 来自手机 | 显示全部楼层
小妖不在人间?
来自: 微社区
回复 支持 1 反对 0

使用道具 举报

发表于 2016-7-12 14:01:17 | 显示全部楼层
ROYCH,您怎么知道小妖老师不在呀?可能去修练了,到时出关时,就不一样了,水平又上升一个档次了。
回复 支持 1 反对 0

使用道具 举报

发表于 2016-7-12 11:26:09 | 显示全部楼层
ROYCH,您好!前几天在看合并数据的处理,现在终于可以看到A和E高手是怎样做的呀,真心地学习一下,谢了!
发表于 2016-7-16 11:45:24 | 显示全部楼层

recordset的getstring其实是有严重缺陷的,
在这里我就不多说了,先将就着用吧

点击这里给我发消息

发表于 2016-7-17 17:03:36 | 显示全部楼层
Roy,下次这种要祭出代码的,就不要拿出来显摆了,Access有VBA,难道Excel没有VBA么?
  1. Sub Sample()
  2. Dim MyRow As Long, i As Long
  3. Dim MyFind As Range
  4. Range("d1:e1") = Range("a1:b1").Value
  5. i = 1
  6. For MyRow = 2 To 28
  7.     Set MyFind = Range("d:d").Find(Cells(MyRow, 1), , , xlWhole)
  8.     If MyFind Is Nothing Then
  9.         i = i + 1
  10.         Cells(i, 4) = Cells(MyRow, 1)
  11.         Cells(i, 5) = Cells(MyRow, 2)
  12.     Else
  13.         Cells(MyFind.Row, 5) = Cells(MyFind.Row, 5) & ";" & Cells(MyRow, 2)
  14.     End If
  15. Next
  16. Set MyFind = Nothing
  17. End Sub
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

发表于 2016-7-17 17:47:42 | 显示全部楼层
好吧,你会说代码太复杂,那PowerQuery怎么样?

进入PQ神器以后到转换选项卡下分个组:


至于具体的分组依据……就这样吧,直接确定:


不过您可能会说,这确定以后的……与我们想要的效果半点不搭界啊?
不搭界不要紧,改一下公式就好了。
把原来的
  1. = Table.Group(更改的类型, {"用户ID"}, {{"计数", each Table.RowCount(_), type number}})
复制代码
改成
  1. = Table.Group(更改的类型, {"用户ID"}, {{"结果", each Text.Combine([套餐名称],";")}})
复制代码
就行了,看看是不是这样:


最后上传就好了。


效果都在下面的附件里的,有兴趣就自己打开来看吧。不过!非2016版O365请忽略。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

点击这里给我发消息

发表于 2016-7-17 17:52:00 | 显示全部楼层
好吧,我承认,这题确实让我损失不少脑细胞,后来脑细胞不够用了,就找了N个SQL大神请教,最后无果……
然后又想尝试公式=TEXTJOIN(",",1,IF(A$2:A$7=D2,B$2:B$7)),最后又无果……
Roy,你赢了!

点击这里给我发消息

发表于 2016-8-2 12:13:20 | 显示全部楼层
后来LUXS(DiDi9)同学又给出函数解答方法,如附件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2016-9-1 15:23:28 | 显示全部楼层
好事,这种PK要经常搞啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /6 下一条

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2019-6-27 16:50 , Processed in 0.120191 second(s), 43 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表