Excel精英培训网

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

[已解决]如何按条件提取数据?

[复制链接]
发表于 2022-3-6 10:51 | 显示全部楼层 |阅读模式
1.能否把按照客户编号,同一客户编号合计超过2500(因为客户姓名有重复的,客户编号每个人才是维一的,在就是同一客户可能存在多笔欠款)提取。2,也是按照客户编号提取出新增加的。请帮助,谢谢!用公式或vba都行。
最佳答案
2022-3-7 14:34
  1. Sub 第一要求()
  2.     Dim d, arr, brr(), crr(), k As Long, i As Long, m As Long, n As Long
  3.     Set d = CreateObject("scripting.dictionary")
  4.     arr = Sheet1.Range("a1").CurrentRegion
  5.     For k = 2 To UBound(arr) - 1
  6.         d(arr(k, 3)) = d(arr(k, 3)) + arr(k, 5)
  7.     Next k
  8.     m = d.Count - 1
  9.     For i = 0 To m
  10.         If d.items()(i) >= 2500 Then
  11.             n = n + 1
  12.             ReDim Preserve brr(1 To n)
  13.             brr(n) = d.keys()(i)
  14.         End If
  15.     Next i
  16.     d.RemoveAll
  17.     For k = 1 To UBound(brr)
  18.         d(brr(k)) = ""
  19.     Next k
  20.     n = 0
  21.     For k = 2 To UBound(arr)
  22.         If d.exists(arr(k, 3)) Then
  23.             n = n + 1
  24.             ReDim Preserve crr(1 To UBound(arr, 2), 1 To n)
  25.             For i = 1 To UBound(crr)
  26.                 crr(i, n) = arr(k, i)
  27.             Next i
  28.         End If
  29.     Next k
  30.     Sheets.Add after:=Sheets(Sheets.Count)
  31.     ActiveSheet.Name = "大于2500数据"
  32.     Sheet1.Rows(1).Copy Range("a1")
  33.     Range("a2").Resize(UBound(crr, 2), UBound(crr)) = Application.WorksheetFunction.Transpose(crr)
  34.     Range("a:m").AutoFit
  35. End Sub

  36. Sub 第二要求()
  37.     Dim d, arr, brr, crr(), k As Long, i As Long, m As Long, n As Long
  38.     Set d = CreateObject("scripting.dictionary")
  39.     arr = Sheet1.Range("a1").CurrentRegion
  40.     brr = Sheet2.Range("a1").CurrentRegion
  41.     For k = 2 To UBound(arr)
  42.         d(arr(k, 3)) = ""
  43.     Next k
  44.     For i = 2 To UBound(brr)
  45.         If Not d.exists(brr(i, 3)) Then
  46.             m = m + 1
  47.             ReDim Preserve crr(1 To UBound(arr, 2), 1 To m)
  48.             For n = 1 To UBound(brr, 2)
  49.                 crr(n, m) = brr(i, n)
  50.             Next n
  51.         End If
  52.     Next i
  53.     Sheets.Add after:=Sheets(Sheets.Count)
  54.     ActiveSheet.Name = "新增数据"
  55.     Sheet1.Rows(1).Copy Range("a1")
  56.     Range("a2").Resize(UBound(crr, 2), UBound(crr)) = Application.WorksheetFunction.Transpose(crr)
  57.     Range("a:m").AutoFit
  58. End Sub
复制代码

源文件.rar

800.49 KB, 下载次数: 42

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2022-3-7 14:34 | 显示全部楼层    本楼为最佳答案   
  1. Sub 第一要求()
  2.     Dim d, arr, brr(), crr(), k As Long, i As Long, m As Long, n As Long
  3.     Set d = CreateObject("scripting.dictionary")
  4.     arr = Sheet1.Range("a1").CurrentRegion
  5.     For k = 2 To UBound(arr) - 1
  6.         d(arr(k, 3)) = d(arr(k, 3)) + arr(k, 5)
  7.     Next k
  8.     m = d.Count - 1
  9.     For i = 0 To m
  10.         If d.items()(i) >= 2500 Then
  11.             n = n + 1
  12.             ReDim Preserve brr(1 To n)
  13.             brr(n) = d.keys()(i)
  14.         End If
  15.     Next i
  16.     d.RemoveAll
  17.     For k = 1 To UBound(brr)
  18.         d(brr(k)) = ""
  19.     Next k
  20.     n = 0
  21.     For k = 2 To UBound(arr)
  22.         If d.exists(arr(k, 3)) Then
  23.             n = n + 1
  24.             ReDim Preserve crr(1 To UBound(arr, 2), 1 To n)
  25.             For i = 1 To UBound(crr)
  26.                 crr(i, n) = arr(k, i)
  27.             Next i
  28.         End If
  29.     Next k
  30.     Sheets.Add after:=Sheets(Sheets.Count)
  31.     ActiveSheet.Name = "大于2500数据"
  32.     Sheet1.Rows(1).Copy Range("a1")
  33.     Range("a2").Resize(UBound(crr, 2), UBound(crr)) = Application.WorksheetFunction.Transpose(crr)
  34.     Range("a:m").AutoFit
  35. End Sub

  36. Sub 第二要求()
  37.     Dim d, arr, brr, crr(), k As Long, i As Long, m As Long, n As Long
  38.     Set d = CreateObject("scripting.dictionary")
  39.     arr = Sheet1.Range("a1").CurrentRegion
  40.     brr = Sheet2.Range("a1").CurrentRegion
  41.     For k = 2 To UBound(arr)
  42.         d(arr(k, 3)) = ""
  43.     Next k
  44.     For i = 2 To UBound(brr)
  45.         If Not d.exists(brr(i, 3)) Then
  46.             m = m + 1
  47.             ReDim Preserve crr(1 To UBound(arr, 2), 1 To m)
  48.             For n = 1 To UBound(brr, 2)
  49.                 crr(n, m) = brr(i, n)
  50.             Next n
  51.         End If
  52.     Next i
  53.     Sheets.Add after:=Sheets(Sheets.Count)
  54.     ActiveSheet.Name = "新增数据"
  55.     Sheet1.Rows(1).Copy Range("a1")
  56.     Range("a2").Resize(UBound(crr, 2), UBound(crr)) = Application.WorksheetFunction.Transpose(crr)
  57.     Range("a:m").AutoFit
  58. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2022-3-8 17:30 | 显示全部楼层

非常感谢!可以按要求提取到相应数据,但是运行到最后出现如图所示。
1646731504(1).png
回复

使用道具 举报

 楼主| 发表于 2022-3-9 21:09 | 显示全部楼层

数值是j列,不是e列,请问如何修改代码?
回复

使用道具 举报

发表于 2022-5-2 15:24 | 显示全部楼层
blwhall 发表于 2022-3-8 17:30
非常感谢!可以按要求提取到相应数据,但是运行到最后出现如图所示。

改为这个试试
Range("A:H").EntireColumn.AutoFit
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 22:34 , Processed in 0.276177 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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