Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2382|回复: 5

[已解决]怎么样合并两表把 货号对应起来?

[复制链接]
发表于 2016-12-21 19:08 | 显示全部楼层 |阅读模式
问题(1).rar (22.21 KB, 下载次数: 6)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2016-12-21 19:33 | 显示全部楼层
回复

使用道具 举报

发表于 2016-12-21 19:34 | 显示全部楼层

VBA Like 匹配10以上的数字 。

直接用VLOOKUP 函数

回复

使用道具 举报

发表于 2016-12-22 11:27 | 显示全部楼层    本楼为最佳答案   
  1. Sub 合并()
  2.     arr = Sheets(1).[a1].CurrentRegion
  3.     brr = Sheets(2).[a1].CurrentRegion
  4.     Set d = CreateObject("scripting.dictionary")
  5.     For i = 2 To UBound(brr)
  6.         d(brr(i, 2)) = d(brr(i, 2)) & "," & i
  7.     Next
  8.    
  9.     With ActiveSheet
  10.         .Cells.Clear
  11.         For i = 2 To UBound(arr)
  12.             x = arr(i, 2)
  13.             If d.exists(x) Then
  14.                 xrr = Split(d(x), ",")
  15.                 ReDim crr(1 To UBound(xrr) + 1, 1 To 7)
  16.                 crr(1, 1) = arr(i, 1)
  17.                 crr(1, 2) = x
  18.                 crr(1, 3) = arr(i, 3)
  19.                 crr(UBound(crr), 4) = x & "汇总"
  20.                 For ii = 1 To UBound(xrr)
  21.                     crr(ii, 4) = x
  22.                     crr(ii, 5) = brr(xrr(ii), 1)
  23.                     crr(ii, 6) = brr(xrr(ii), 3)
  24.                     crr(UBound(crr), 6) = crr(UBound(crr), 6) + brr(xrr(ii), 3)
  25.                 Next
  26.                 crr(UBound(crr), 7) = crr(UBound(crr), 6) - crr(1, 3)
  27.                 r = .[d65536].End(3).Row + 2
  28.                 .Cells(r, 1).Resize(1, 7) = Array("物料长代码", "物料短代码", "系统数量", "货号", "架位", "盘点数量", "盈亏")
  29.                 .Cells(r + 1, 1).Resize(ii, 7) = crr
  30.                 .Cells(r + 1, 1).Resize(ii).Merge
  31.                 .Cells(r + 1, 2).Resize(ii).Merge
  32.                 .Cells(r + 1, 3).Resize(ii).Merge
  33.                 .Cells(r, 1).Resize(ii + 1, 7).Borders.LineStyle = 1
  34.             End If
  35.         Next
  36.         .Rows("1:2").Delete
  37.         .Columns.AutoFit
  38.     End With
  39.             
  40. End Sub
复制代码

问题.rar

28.69 KB, 下载次数: 18

回复

使用道具 举报

 楼主| 发表于 2017-1-22 12:04 | 显示全部楼层
感谢grf1973 看来这个世上没有什么做不到的,真是牛
回复

使用道具 举报

发表于 2017-8-7 14:08 | 显示全部楼层
Sub 对比合并()
Dim arr, brr, crr(1 To 1000, 1 To 7)
Application.ScreenUpdating = False
t = Timer
arr = Sheets("系统").Range("a1").CurrentRegion
brr = Sheets("盘点数量").Range("a1").CurrentRegion
Set d = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")
Columns("I:O").Clear
For i = 2 To UBound(arr)
     d(arr(i, 2)) = i '物料代码与行号一一对应
Next i
For i = 2 To UBound(brr)
     d2(brr(i, 2)) = d2(brr(i, 2)) & "," & i '将代码与行号对应
Next i
For Each k In d.keys
     If d2.exists(k) Then
        x = 1
        h = d(k)
        For j = 1 To 3
            crr(x, j) = arr(h, j)
        Next j
        s1 = arr(h, 3)
        ar = Split(d2(k), ",")
        For i = 1 To UBound(ar)
            h = ar(i)
            crr(x, 4) = brr(h, 2)
            crr(x, 5) = brr(h, 1)
            crr(x, 6) = brr(h, 3)
            s2 = s2 + crr(x, 6)
            x = x + 1
        Next i
        crr(x, 4) = k & "汇总"
        crr(x, 6) = s2
        crr(x, 7) = s2 - s1
     End If
     r = Cells(Rows.Count, 12).End(xlUp).Row
     r = IIf(r = 1, 1, r + 2)
     Cells(r, 9).Resize(1, 7) = Array("物料长代码", "物料短代码", "系统数量", "货号", "架位", "盘点数量", "盈亏")
     Cells(r + 1, 9).Resize(x, 7) = crr
     Cells(r + 1, 9).Resize(x).Merge
     Cells(r + 1, 10).Resize(x).Merge
     Cells(r + 1, 11).Resize(x).Merge
     Range(Cells(r, 9), Cells(r + x, 15)).Borders.LineStyle = 1
     Columns("I:O").AutoFit
     s2 = 0
Next k
Application.ScreenUpdating = True
MsgBox Format(Timer - t, "0.00秒")
End Sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 00:22 , Processed in 0.468562 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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