ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 782|回复: 6

[已解决] 指定日期,数据从表1中提取到表2

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-3-20 08:04 | 显示全部楼层 |阅读模式
本帖最后由 olin12345 于 2019-3-20 19:13 编辑

求助说明:
1.表1是数据源表,表2是数据需求表,在表2中通过A1单元格输入日期,将表1中所有符合日期的数据提取到表2中
2.表2中提取的数据列不连续,如只提取数据表1中的第2列,第5列,第6列等(即提取列易于修改)

203016e6n6ecjn6ar6h1ct.jpg

活动量报表.zip

11.72 KB, 下载次数: 18

TA的精华主题

TA的得分主题

发表于 2019-3-20 08:23 | 显示全部楼层
用工作表事件:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Dim brr(1 To 99999, 1 To 10)
  3.     If Target.Address = "$A$1" Then
  4.         With Sheets("每日公司汇总")
  5.             r = .Cells(.Rows.Count, 1).End(3).Row
  6.             arr = .Range("a5:l" & r)
  7.             For i = 1 To UBound(arr)
  8.                 If Trim(arr(i, 1)) = Target Then
  9.                     m = m + 1
  10.                     brr(m, 1) = arr(i, 2)
  11.                     For j = 2 To 10
  12.                         brr(m, j) = arr(i, j + 2)
  13.                     Next
  14.                 End If
  15.             Next
  16.         End With
  17.     End If
  18.     If m Then
  19.         [a1].CurrentRegion.Offset(2).Clear
  20.         [a3].Resize(m, UBound(brr, 2)) = brr
  21.         [a3].Resize(m, UBound(brr, 2)).Borders.LineStyle = 1
  22.     End If
  23. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-3-20 08:24 | 显示全部楼层
测试参考附件:

活动量报表.rar

14.11 KB, 下载次数: 27

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-20 08:58 | 显示全部楼层

感谢版主的帮助,有点小问题如下:
1.我把日期换成2019/3/20,这种格式的时候就不能提取了,表1中的数据源我也更换了
2.工作表事件就是触发是这样理解吗?因为我点A1时它才刷新,能不能改成按钮?
3.在论坛里看到过类似下面这样的结构,这种结构可调性比较简单,好像可以任意调想调取的列,刚接触的水平只有如此了
brr(n, 4) = arr(i, 6)
brr(n, 5) = arr(i, 7)
brr(n, 6) = arr(i, 8)
brr(n, 7) = arr(i, 9)
brr(n, 8) = arr(i, 10)
brr(n, 9) = arr(i, 11)
brr(n, 10) = arr(i, 12)

TA的精华主题

TA的得分主题

发表于 2019-3-20 09:26 | 显示全部楼层
olin12345 发表于 2019-3-20 08:58
感谢版主的帮助,有点小问题如下:
1.我把日期换成2019/3/20,这种格式的时候就不能提取了,表1中的数据 ...

可以自己学着修改一下的。

TA的精华主题

TA的得分主题

发表于 2019-3-20 10:35 | 显示全部楼层
olin12345 发表于 2019-3-20 08:58
感谢版主的帮助,有点小问题如下:
1.我把日期换成2019/3/20,这种格式的时候就不能提取了,表1中的数据 ...
  1. Sub gj23w98()
  2.     Dim brr(1 To 99999, 1 To 10)
  3.     With Sheets("每日公司汇总")
  4.         r = .Cells(.Rows.Count, 1).End(3).Row
  5.         arr = .Range("a5:l" & r)
  6.         For i = 1 To UBound(arr)
  7.             If arr(i, 1) = [a1] Then
  8.                 m = m + 1
  9.                 brr(m, 1) = arr(i, 2)
  10.                 brr(m, 7) = arr(i, 9)
  11.                 brr(m, 8) = arr(i, 10)
  12.             End If
  13.         Next
  14.     End With
  15.     If m Then
  16.         [a1].CurrentRegion.Offset(2).Clear
  17.         [a3].Resize(m, UBound(brr, 2)) = brr
  18.         [a3].Resize(m, UBound(brr, 2)).Borders.LineStyle = 1
  19.     End If
  20. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-3-20 11:43 | 显示全部楼层
用ADO+SQL

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim strDate As String
  3.     If Target.Address(0, 0) = "A1" Then
  4.         strDate = Target.Value
  5.         SelectValByNum strDate
  6.     End If
  7. End Sub

  8. Function SelectValByNum(strDate As String)
  9.     Dim strShName As String, shData As Worksheet, shResult As Worksheet, lngRows As Long
  10.     Dim Conn As Object, Rst As Object, strPath As String
  11.     Dim strConn As String, strSQL As String
  12.     Dim rg As Range
  13.    
  14.     strShName = "每日公司汇总"
  15.     Set shData = Sheets(strShName)
  16.     Set shResult = Sheets("个人每日明细")
  17.     lngRows = shData.Range("A" & Rows.Count).End(xlUp).Row
  18.    
  19.     Set Conn = CreateObject("ADODB.Connection")
  20.     Set Rst = CreateObject("ADODB.Recordset")
  21.     strPath = ThisWorkbook.FullName
  22.     Select Case Application.Version * 1
  23.         Case Is <= 11
  24.             strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & strPath
  25.         Case Is >= 12
  26.             strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties=""Excel 12.0;HDR=NO"";"""
  27.     End Select
  28.     Conn.Open strConn

  29.     '''''''''''''''''''''''''''''''''
  30.     strSQL = "SELECT [F2],[F4],[F5],[F6],[F7],[F8],[F9],[F10],[F11],[F12] " & _
  31.               "FROM [" & strShName & "$A4:L" & lngRows & "] " & _
  32.               "WHERE [F1] LIKE '" & strDate & "'"

  33.     Rst.Open strSQL, Conn, 3, 1 '执行查询,并将结果输出到记录集对象
  34.    
  35.     shResult.Range("A3:J" & Rows.Count).Clear
  36.     Set rg = shResult.Range("A3")
  37.    
  38.     rg.CopyFromRecordset Rst

  39.     Set Rst = Nothing
  40.     Set Conn = Nothing
  41. End Function

复制代码

评分

1

查看全部评分

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 01:38 , Processed in 0.051817 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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