ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA跨表取3列数据复制到另外一个工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-12-6 20:47 | 显示全部楼层
中华美德 发表于 2019-12-6 20:37
先感谢忙中抽时间给解答,老师的VBA程序可以执行,您没有理解我的意思,是我表达不清楚:1结账数据源的日 ...

这个代码是今天运行可以替换昨天的日期
其他日期就要看具体是什么日期在结合需求处理了

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-6 21:17 | 显示全部楼层
本帖最后由 中华美德 于 2019-12-6 21:19 编辑
liulang0808 发表于 2019-12-6 20:47
这个代码是今天运行可以替换昨天的日期
其他日期就要看具体是什么日期在结合需求处理了

就处理当天的。比如今天2019.12.06

TA的精华主题

TA的得分主题

发表于 2019-12-6 21:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-12-6 21:32 | 显示全部楼层
  1. Sub THS导入导出()
  2.      Application.DisplayAlerts = False
  3.      With Workbooks.Open(Filename:=ThisWorkbook.Path & "\1结账数据源.xls", AddToMru:=True)
  4.         .Sheets(1).Columns("A:H").Copy ThisWorkbook.Sheets(1).Columns("B:I")
  5.         .Close
  6.     End With
  7.     ThisWorkbook.Activate
  8.     Application.DisplayAlerts = True

  9.     Dim arr, brr, d, i&, j%
  10.     Set d = CreateObject("scripting.dictionary")
  11.         str1 = "代码,名称,1部门金额(元)2019.11.29,2部门金额(元)2019.11.29,比(%)2019.11.29,结账时间2019.11.29,离开时间2019.11.30连续(天)2019.11.29"
  12.         With CreateObject("vbscript.regexp")
  13.             .Global = True
  14.             .Pattern = "\d{4}\.\d{2}\.\d{2}"
  15.             For Each mh In .Execute(str1)
  16.                 d(mh.Value) = 1 + d(mh.Value)
  17.             Next mh
  18.             
  19.         
  20.         End With
  21.         str1 = Replace(str1, d.keys()(1), Format(Date + 1, "yyyy.mm.dd"))
  22.         str1 = Replace(str1, d.keys()(0), Format(Date, "yyyy.mm.dd"))
  23.         d.RemoveAll
  24.         w = Split(str1, ",")
  25.     arr = Sheet1.Range("a1").CurrentRegion
  26.     ReDim brr(1 To UBound(arr), 1 To UBound(w) + 1)
  27.     For i = 0 To UBound(w)
  28.         d(w(i)) = i + 1
  29.     Next
  30.     For j = 1 To UBound(arr, 2)
  31.         If d.exists(arr(1, j)) Then
  32.             n = d(arr(1, j))
  33.             For i = 1 To UBound(arr)
  34.                 brr(i, n) = arr(i, j)
  35.             Next
  36.         End If
  37.     Next
  38.     Sheet2.Activate
  39.     Range("a1").Resize(UBound(brr), UBound(brr, 2)) = brr
  40. End Sub
复制代码

重新看了下,之前的理解有误,这次看看吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-6 21:38 | 显示全部楼层
本帖最后由 中华美德 于 2019-12-6 21:47 编辑
liulang0808 发表于 2019-12-6 21:32
重新看了下,之前的理解有误,这次看看吧

1结账数据源.xls中的数据是每天都在变化的。还是不能执行2019.12.06的数据   2019.11.29是以前的数据了,现在是2019.12.06,明天2019.12.07,一直递增下去每一天都在变化,全部的难点就是在日期是动态变化

TA的精华主题

TA的得分主题

发表于 2019-12-6 22:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
中华美德 发表于 2019-12-6 21:38
1结账数据源.xls中的数据是每天都在变化的。还是不能执行2019.12.06的数据   2019.11.29是以 ...

        str1 = "代码,名称,1部门金额(元)2019.11.29,2部门金额(元)2019.11.29,比(%)2019.11.29,结账时间2019.11.29,离开时间2019.11.30连续(天)2019.11.29"
        With CreateObject("vbscript.regexp")
            .Global = True
            .Pattern = "\d{4}\.\d{2}\.\d{2}"
            For Each mh In .Execute(str1)
                d(mh.Value) = 1 + d(mh.Value)
            Next mh
            
        
        End With
        str1 = Replace(str1, d.keys()(1), Format(Date + 1, "yyyy.mm.dd"))
        str1 = Replace(str1, d.keys()(0), Format(Date, "yyyy.mm.dd"))
       msgbox str1
楼主这行这段代码看看,返回的str1对应的字符串是不是已经改成今天对应的字符串了

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-6 22:19 | 显示全部楼层
本帖最后由 中华美德 于 2019-12-6 22:22 编辑
liulang0808 发表于 2019-12-6 22:11
str1 = "代码,名称,1部门金额(元)2019.11.29,2部门金额(元)2019.11.29,比(%)2019.11.29,结账时间 ...

对,就是每一天的日期,今天2019.12.06,明天2019.12.07,后天2019.12.08

TA的精华主题

TA的得分主题

发表于 2019-12-7 09:59 | 显示全部楼层
中华美德 发表于 2019-12-6 22:19
对,就是每一天的日期,今天2019.12.06,明天2019.12.07,后天2019.12.08

如果27楼的代码满足需求,还需要解决什么问题吗?如果还有问题,具体还有什么问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-12-7 12:30 | 显示全部楼层
liulang0808 发表于 2019-12-7 09:59
如果27楼的代码满足需求,还需要解决什么问题吗?如果还有问题,具体还有什么问题

希望老师认真看一下:1结账数据源.xls中没有2019.11.29的字段了,全部变化为含有2019.12.06的字段,你的VBA代码不应该还有2019.11.29的字符串,它的数据是每天都在变化的。还是不能执行2019.12.06的数据   2019.11.29是以前的数据了,现在是2019.12.06,明天2019.12.07,一直递增下去每一天都在变化,全部的难点就是在日期是动态变化

TA的精华主题

TA的得分主题

发表于 2019-12-7 12:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
中华美德 发表于 2019-12-7 12:30
希望老师认真看一下:1结账数据源.xls中没有2019.11.29的字段了,全部变化为含有2019.12.06的字段,你的VB ...

w = Array("代码", "名称", "1部门金额(元)2019.11.29", "2部门金额(元)2019.11.29", "比(%)2019.11.29", "结账时间2019.11.29", "离开时间2019.11.30", "连续(天)2019.11.29")
这个是楼主原来的需求,就是其中日期要修改成当天的


26楼的代码是不是已经修改成当前的,然后生成w数组? 关于str1初始赋值里的日期是哪天有关系吗?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-11 21:58 , Processed in 0.031296 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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