Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: huangjjj

[已解决]抽取多工作表数据的问题

[复制链接]
发表于 2013-6-25 08:30 | 显示全部楼层
略微改下,先清除工作表原有数据。
  1. Sub test()
  2.     Dim arr, arrResult
  3.     Dim i As Integer, j As Long
  4.     Dim objSht As Worksheet
  5.     Dim lRecord As Long
  6.     Dim lMatch


  7.     '引用写入工作表
  8.     Set objSht = Worksheets("sheet0")

  9.     '清除原有数据
  10.     With objSht
  11.         .UsedRange.ClearContents
  12.     End With

  13.     lMatch = Application.InputBox("请输入要匹配的数值", "匹配查找", 92, , , , , 1)
  14.     If lMatch = False Then
  15.         MsgBox "没有输入要匹配的数值" & "退出", vbCritical + vbOKOnly
  16.         Exit Sub
  17.     End If

  18.     '关属性
  19.     With Application
  20.         .ScreenUpdating = False
  21.         .DisplayAlerts = False
  22.         .EnableEvents = False
  23.         .Calculation = xlCalculationManual
  24.     End With

  25.     '工作表循环
  26.     For i = 1 To Worksheets.Count - 1
  27.         On Error Resume Next
  28.         '防止访问到不存在的工作表
  29.         If Len(Worksheets(CStr(i)).Name) = 0 Then
  30.             GoTo next1
  31.         End If

  32.         On Error GoTo ErrorHandler
  33.         '取源数据的D-F列
  34.         With Worksheets(CStr(i))
  35.             arr = .UsedRange.Columns("d:f").Value
  36.         End With
  37.         '重定义数组,和源数据数组行数相同
  38.         ReDim arrResult(1 To UBound(arr), 1 To 1)
  39.         '当前数组内写入数据个数
  40.         lRecord = 0
  41.         For j = LBound(arr) To UBound(arr)
  42.             '进行匹配,符合条件的写入数组内
  43.             'Debug.Assert arr(j, 3) <> lMatch
  44.             If arr(j, 3) = lMatch Then
  45.                 lRecord = lRecord + 1
  46.                 arrResult(lRecord, 1) = arr(j, 1)
  47.             End If
  48.         Next

  49.         With objSht
  50.             '有符合要求的数据时,进行写入操作
  51.             If lRecord Then
  52.                 .Cells(1, i).Resize(UBound(arrResult)).Value = arrResult
  53.             End If
  54.         End With
  55. next1:
  56.     Next
  57.     '释放对象变量
  58.     Set objSht = Nothing
  59.     '打开属性
  60.     With Application
  61.         .ScreenUpdating = True
  62.         .DisplayAlerts = True
  63.         .EnableEvents = True
  64.         .Calculation = xlCalculationAutomatic
  65.     End With
  66.     '对话框提示完成
  67.     MsgBox "提取完成"
  68.     Exit Sub
  69. ErrorHandler:
  70.     '错误处理,主要是针对数据无法写入工作表的情况
  71.     MsgBox Err.Number & vbCrLf & _
  72.            Err.Description
  73.     Err.Clear
  74.     '开属性
  75.     With Application
  76.         .ScreenUpdating = True
  77.         .DisplayAlerts = True
  78.         .EnableEvents = True
  79.         .Calculation = xlCalculationAutomatic
  80.     End With
  81. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

发表于 2013-6-25 08:34 | 显示全部楼层    本楼为最佳答案   
抽取多工作表数据附件.rar (359.94 KB, 下载次数: 8)

评分

参与人数 1金币 +1 收起 理由
huangjjj + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-6-25 08:42 | 显示全部楼层
hwc2ycy 发表于 2013-6-25 08:34

谢谢老师帮助。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 03:57 , Processed in 0.265629 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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