B列包含A列数据,A、B列数据有重复,C列数值不重复,把B列对应的C列数值写在D列(按A的排列顺序)
B列包含A列数据,A、B列数据有重复,C列数值不重复,把B列对应的C列数值写在D列(按A的排列顺序)A列B列C列D列(实现效果)张三李四SS001SS002李四张三SS0...
B列包含A列数据,A、B列数据有重复,C列数值不重复,把B列对应的C列数值写在D列(按A的排列顺序)
A列 B列 C列 D列(实现效果)
张三 李四 SS001 SS002
李四 张三 SS002 SS001
张三 王五 SS003 SS004
王五 张三 SS004 SS003
刘一 刘一 SS005 SS005
李三 刘一 SS006 SS008
刘一 王五 SS007 SS006
王五 李三 SS008 SS007 展开
A列 B列 C列 D列(实现效果)
张三 李四 SS001 SS002
李四 张三 SS002 SS001
张三 王五 SS003 SS004
王五 张三 SS004 SS003
刘一 刘一 SS005 SS005
李三 刘一 SS006 SS008
刘一 王五 SS007 SS006
王五 李三 SS008 SS007 展开
1个回答
展开全部
因为有重复数据,而你的例子是顺序向下取重复数据.这个用公式我做不到只能用VBA帮你做到
Sub bb()
Dim Dic, N, ArrD
Dim iRowA, iRowB As Long, iValA, iValB, iValC As Variant
iRowA = Range("A65536").End(xlUp).Row
iRowB = Range("B65536").End(xlUp).Row
Set Dic = CreateObject("Scripting.Dictionary")
Set N = CreateObject("Scripting.Dictionary")
For i = 1 To iRowB
iValB = Range("B" & i).Value
iValC = Range("C" & i).Value
If Dic.exists(iValB) Then
Dic(iValB) = Dic(iValB) & "," & iValC
Else
Dic(iValB) = iValC
End If
Next
For j = 1 To iRowA
iValA = Range("A" & j).Value
If Dic.exists(iValA) Then
If InStr(Dic(iValA), ",") > 0 Then
ArrD = Split(Dic(iValA), ",")
N(iValA) = N(iValA) + 1
If N(iValA) <= UBound(ArrD)+1 Then Range("D" & j) = ArrD(N(iValA) - 1)
Else
Range("D" & j).Value = Dic(iValA)
End If
End If
Next
End Sub
更多追问追答
追答
没看懂你要让我做什么?
是让我帮帮你吧黄色的区域里的标识号 和列一,按数量这一列的数字,用代码帮你展开在标识号1和列二,这个位置吗?
还有绿色区域的数据时原本就存在的.对吧?
之后我在用我上面给你的代码把相应的数据写在红字标识的D列,是这样吧.
来自:求助得到的回答
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询