Office中國(guó)論壇/Access中國(guó)論壇

 找回密碼
 注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

12下一頁(yè)
返回列表 發(fā)新帖
查看: 6862|回復(fù): 12
打印 上一主題 下一主題

Access挑戰(zhàn)Excel第二十七期:合并,又見(jiàn)合并

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2016-7-12 11:21:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)于合并數(shù)據(jù),其實(shí)已經(jīng)挑戰(zhàn)過(guò)一次,不過(guò),當(dāng)時(shí)用的是聯(lián)合查詢(xún)。不過(guò)這次說(shuō)的“合并”跟上一次是不一樣的。先上圖:原數(shù)據(jù):

合并后:


這種合并在日常工作中還是很常見(jiàn)的,例如,一個(gè)用戶(hù)購(gòu)買(mǎi)了多個(gè)商品,配送時(shí)可能就需要根據(jù)已有現(xiàn)貨的進(jìn)行合并了!(dāng)然,如果客戶(hù)允許全部到貨之后再一次性寄則不存在這個(gè)情況。

在access里大約只需4行代碼就好了……好吧,代碼,代碼……

(Roy表示,已經(jīng)感受到來(lái)自于某妖深深的鄙視了)


不過(guò),Excel用戶(hù)打算怎么解決這個(gè)問(wèn)題呢?公式嗎?別忘了,用戶(hù)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 數(shù)據(jù) where 用戶(hù)ID=" & lngID, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  4.     MergeData = rst.GetString(RowDelimeter:=";")
  5.     rst.Close
  6. End Function
復(fù)制代碼


PS:估計(jì)這幾天某妖都不在,我能不能?chē)N瑟那么幾天先呢?

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x

評(píng)分

參與人數(shù) 1經(jīng)驗(yàn) +5 收起 理由
purplerose + 5 (V幣)優(yōu)秀原創(chuàng)教程、管理建議(1-5分)

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱

點(diǎn)擊這里給我發(fā)消息

推薦
發(fā)表于 2016-7-12 13:03:19 來(lái)自手機(jī) | 只看該作者
小妖不在人間?
來(lái)自: 微社區(qū)
推薦
發(fā)表于 2016-7-12 14:01:17 | 只看該作者
ROYCH,您怎么知道小妖老師不在呀?可能去修練了,到時(shí)出關(guān)時(shí),就不一樣了,水平又上升一個(gè)檔次了。
2#
發(fā)表于 2016-7-12 11:26:09 | 只看該作者
ROYCH,您好!前幾天在看合并數(shù)據(jù)的處理,現(xiàn)在終于可以看到A和E高手是怎樣做的呀,真心地學(xué)習(xí)一下,謝了!
5#
發(fā)表于 2016-7-16 11:45:24 | 只看該作者

recordset的getstring其實(shí)是有嚴(yán)重缺陷的,
在這里我就不多說(shuō)了,先將就著用吧

點(diǎn)擊這里給我發(fā)消息

6#
發(fā)表于 2016-7-17 17:03:36 | 只看該作者
Roy,下次這種要祭出代碼的,就不要拿出來(lái)顯擺了,Access有VBA,難道Excel沒(méi)有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
復(fù)制代碼

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x

點(diǎn)擊這里給我發(fā)消息

7#
發(fā)表于 2016-7-17 17:47:42 | 只看該作者
好吧,你會(huì)說(shuō)代碼太復(fù)雜,那PowerQuery怎么樣?

進(jìn)入PQ神器以后到轉(zhuǎn)換選項(xiàng)卡下分個(gè)組:


至于具體的分組依據(jù)……就這樣吧,直接確定:


不過(guò)您可能會(huì)說(shuō),這確定以后的……與我們想要的效果半點(diǎn)不搭界?
不搭界不要緊,改一下公式就好了。
把原來(lái)的
  1. = Table.Group(更改的類(lèi)型, {"用戶(hù)ID"}, {{"計(jì)數(shù)", each Table.RowCount(_), type number}})
復(fù)制代碼
改成
  1. = Table.Group(更改的類(lèi)型, {"用戶(hù)ID"}, {{"結(jié)果", each Text.Combine([套餐名稱(chēng)],";")}})
復(fù)制代碼
就行了,看看是不是這樣:


最后上傳就好了。


效果都在下面的附件里的,有興趣就自己打開(kāi)來(lái)看吧。不過(guò)!非2016版O365請(qǐng)忽略。

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x

點(diǎn)擊這里給我發(fā)消息

8#
發(fā)表于 2016-7-17 17:52:00 | 只看該作者
好吧,我承認(rèn),這題確實(shí)讓我損失不少腦細(xì)胞,后來(lái)腦細(xì)胞不夠用了,就找了N個(gè)SQL大神請(qǐng)教,最后無(wú)果……
然后又想嘗試公式=TEXTJOIN(",",1,IF(A$2:A$7=D2,B$2:B$7)),最后又無(wú)果……
Roy,你贏了!

點(diǎn)擊這里給我發(fā)消息

9#
發(fā)表于 2016-8-2 12:13:20 | 只看該作者
后來(lái)LUXS(DiDi9)同學(xué)又給出函數(shù)解答方法,如附件。

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒(méi)有帳號(hào)?注冊(cè)

x
10#
發(fā)表于 2016-9-1 15:23:28 | 只看該作者
好事,這種PK要經(jīng)常搞啊
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

QQ|站長(zhǎng)郵箱|小黑屋|手機(jī)版|Office中國(guó)/Access中國(guó) ( 粵ICP備10043721號(hào)-1 )  

GMT+8, 2025-7-13 08:32 , Processed in 0.121175 second(s), 40 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表