Excel精英培训网

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

[已解决]求大神帮忙如何使用vba对数据匹配和条件输出的问题

[复制链接]
发表于 2021-9-15 19:43 | 显示全部楼层 |阅读模式
sheet2中已有的日期、型号和类型与sheet1相同时,存量已sheet1的为准;
sheet2中不存在sheet1的日期、型号和类型的添加到sheet2空白row+1添加
用公式可以组&组合日期型号和类型三个,但转换VBA我就不懂了
最佳答案
2021-9-16 03:01
  1. Option Explicit
  2. Sub Modify_sheet2() 'sheet2中已有的日期、型号和类型与sheet1相同时,存量已sheet1的为准
  3. Dim arr, arr2
  4. Dim dic
  5. Dim i, j As Integer
  6. Set dic = CreateObject("scripting.dictionary")
  7. arr = Sheet1.Range("a1:d" & Sheet1.[a100000].End(xlUp).Row)
  8. arr2 = Sheet2.Range("a1:d" & Sheet2.[a100000].End(xlUp).Row)
  9. Sheet2.Range("d2:d1000").ClearContents
  10. For i = 2 To UBound(arr)
  11.     dic(arr(i, 1) & arr(i, 2) & arr(i, 3)) = arr(i, 4)
  12. Next
  13. For j = 2 To UBound(arr2)
  14.     If dic.Exists(arr2(j, 1) & arr2(j, 2) & arr2(j, 3)) Then
  15.         arr2(j, 4) = dic(arr2(j, 1) & arr2(j, 2) & arr2(j, 3))
  16.     End If
  17. Next
  18. Sheet2.Range("d1").Resize(UBound(arr2), 1) = Application.Index(arr2, , 4)
  19. End Sub

  20. Sub add_sheet1() 'sheet2中不存在sheet1的日期、型号和类型的添加到sheet2空白row+1添加
  21. Dim arr, arr2
  22. Dim arr3(1 To 1000, 1 To 4)
  23. Dim dic
  24. Dim i, j, k As Integer
  25. k = 0
  26. Set dic = CreateObject("scripting.dictionary")
  27. arr = Sheet1.Range("a1:d" & Sheet1.[a100000].End(xlUp).Row)
  28. arr2 = Sheet2.Range("a1:d" & Sheet2.[a100000].End(xlUp).Row)
  29. For i = 2 To UBound(arr2)
  30.     dic(arr2(i, 1) & arr2(i, 2) & arr2(i, 3)) = arr2(i, 4)
  31. Next
  32. For j = 2 To UBound(arr)
  33.     If Not dic.Exists(arr(j, 1) & arr(j, 2) & arr(j, 3)) Then
  34.         k = k + 1
  35.         arr3(k, 1) = arr(j, 1)
  36.         arr3(k, 2) = arr(j, 2)
  37.         arr3(k, 3) = arr(j, 3)
  38.         arr3(k, 4) = arr(j, 4)
  39.     End If
  40. Next
  41. Sheet2.Range("a10000").End(xlUp).Offset(1, 0).Resize(k, 4) = arr3
  42. End Sub
复制代码

求助.zip

8.62 KB, 下载次数: 10

发表于 2021-9-16 03:01 | 显示全部楼层    本楼为最佳答案   
  1. Option Explicit
  2. Sub Modify_sheet2() 'sheet2中已有的日期、型号和类型与sheet1相同时,存量已sheet1的为准
  3. Dim arr, arr2
  4. Dim dic
  5. Dim i, j As Integer
  6. Set dic = CreateObject("scripting.dictionary")
  7. arr = Sheet1.Range("a1:d" & Sheet1.[a100000].End(xlUp).Row)
  8. arr2 = Sheet2.Range("a1:d" & Sheet2.[a100000].End(xlUp).Row)
  9. Sheet2.Range("d2:d1000").ClearContents
  10. For i = 2 To UBound(arr)
  11.     dic(arr(i, 1) & arr(i, 2) & arr(i, 3)) = arr(i, 4)
  12. Next
  13. For j = 2 To UBound(arr2)
  14.     If dic.Exists(arr2(j, 1) & arr2(j, 2) & arr2(j, 3)) Then
  15.         arr2(j, 4) = dic(arr2(j, 1) & arr2(j, 2) & arr2(j, 3))
  16.     End If
  17. Next
  18. Sheet2.Range("d1").Resize(UBound(arr2), 1) = Application.Index(arr2, , 4)
  19. End Sub

  20. Sub add_sheet1() 'sheet2中不存在sheet1的日期、型号和类型的添加到sheet2空白row+1添加
  21. Dim arr, arr2
  22. Dim arr3(1 To 1000, 1 To 4)
  23. Dim dic
  24. Dim i, j, k As Integer
  25. k = 0
  26. Set dic = CreateObject("scripting.dictionary")
  27. arr = Sheet1.Range("a1:d" & Sheet1.[a100000].End(xlUp).Row)
  28. arr2 = Sheet2.Range("a1:d" & Sheet2.[a100000].End(xlUp).Row)
  29. For i = 2 To UBound(arr2)
  30.     dic(arr2(i, 1) & arr2(i, 2) & arr2(i, 3)) = arr2(i, 4)
  31. Next
  32. For j = 2 To UBound(arr)
  33.     If Not dic.Exists(arr(j, 1) & arr(j, 2) & arr(j, 3)) Then
  34.         k = k + 1
  35.         arr3(k, 1) = arr(j, 1)
  36.         arr3(k, 2) = arr(j, 2)
  37.         arr3(k, 3) = arr(j, 3)
  38.         arr3(k, 4) = arr(j, 4)
  39.     End If
  40. Next
  41. Sheet2.Range("a10000").End(xlUp).Offset(1, 0).Resize(k, 4) = arr3
  42. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2021-9-16 08:48 | 显示全部楼层
本帖最后由 531tommy 于 2021-9-16 08:50 编辑

回复

使用道具 举报

 楼主| 发表于 2021-9-16 08:50 | 显示全部楼层

Sub add_sheet1()
操作中,要是sheet2数据与sheet1数据一致时,写入数据的
Sheet2.Range("A65536").End(xlUp).Offset(1, 0).Resize(k, 4) = arr3出现错误提示,需要如何解决
回复

使用道具 举报

发表于 2021-9-16 10:32 | 显示全部楼层
531tommy 发表于 2021-9-16 08:50
Sub add_sheet1()
操作中,要是sheet2数据与sheet1数据一致时,写入数据的
Sheet2.Range("A65536").En ...

代码最前面加句 on error resume next 应可解决这个问题

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 15:15 , Processed in 0.250736 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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