ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 求跨薄添加表中几列数据的VBA

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-27 18:41 | 显示全部楼层 |阅读模式
本帖最后由 feilv205 于 2018-8-28 10:55 编辑

需要解决的问题:


将“任务表”中A-D列、G-Q列数据添加到另一工作薄名为sc1的工作表名为sc11的表中,列标题一致。

当“任务表”有新数据需要添加时,在sc11所添加的数据不覆盖前面的数据。


sc1工作薄路径为D:\sc\sc1,密码123456

用拷贝法已经实现,但数据稍多就慢,所以求各位老师帮弄个快捷的代码。谢谢!


搞定,代码见回复。
可能不是最优办法,但较拷贝法要快,继续学习!

测试.rar

78.97 KB, 下载次数: 26

TA的精华主题

TA的得分主题

发表于 2018-8-27 19:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你需要把SC1的工作簿,最好也上传一份,如果要提供速度的话,肯定要用数组,但是不清楚,SC11工作表里面的标题顺序,是否与测试工作表的一致,所以无法直接写代码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-27 19:30 | 显示全部楼层
chaohuahch 发表于 2018-8-27 19:16
你需要把SC1的工作簿,最好也上传一份,如果要提供速度的话,肯定要用数组,但是不清楚,SC11工作表里面的 ...

你好!

这点忽略没说明白,sc11表的列结构与上传的一致,就是少了不需要添加的列,即把不需要添加的列删除就是sc11表。

在坛里曾看到个类似的例子,好像是用字典+数组,取得已有数据行的代码后,直接用列相等就搞定,但偶再找那个贴子一直没找到。

TA的精华主题

TA的得分主题

发表于 2018-8-27 20:09 | 显示全部楼层
用字典套数组的方式会更好。参考我回复的一个帖子。

http://club.excelhome.net/forum. ... 6orderby%3Ddateline

你可以用采购的任务编号(如果它是唯一值)作为字典的key。你要的A~D列,G~Q列,联合起来的区域,作为字典的item。然后再新的表格里面查询字典,就可以了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-27 20:29 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
chaohuahch 发表于 2018-8-27 20:09
用字典套数组的方式会更好。参考我回复的一个帖子。

http://club.excelhome.net/forum.php?mod=viewthre ...

非常感谢,明天我试试看。A列、C列是唯一值。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-28 09:48 | 显示全部楼层
chaohuahch 发表于 2018-8-27 20:09
用字典套数组的方式会更好。参考我回复的一个帖子。

http://club.excelhome.net/forum.php?mod=viewthre ...

老师,小白的我真搞不定,麻烦出手救助一下!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-28 10:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
用前不久求助按列中条件分配信息的代码修改后搞定!

Sub sc任务()
Dim myr%, m%, wb As Workbook, Rng As Range
myr = Range("b65535").End(3).Row
ar = Range("a1:t" & myr)
Set wb = Workbooks.Open("d:\sc\sc1.xlsm", Password:="123456")
    With wb.Sheets("sc11")
    m = Range("a1").End(3).Row
    am = Range("a" & m).Value
    Set Rng = ThisWorkbook.Sheets("任务表").Columns(1).Find(am, , , xlWhole)
    If Rng Is Nothing Then
        wb.Close: Exit Sub
    Else
        R = Rng.Row
    End If
    If myr = R Then wb.Close: Exit Sub
    ReDim br(1 To myr, 1 To 16)
    For i = R To myr
       'If Val(Mid(ar(i, 15), 2, 1)) >= 2 Or Val(Mid(ar(i, 15), 3, 1)) >= 2 Then (原来用的条件)
            n = n + 1
            br(n, 1) = ar(i, 1)
            br(n, 2) = ar(i, 2)
            br(n, 3) = ar(i, 3)
            br(n, 4) = ar(i, 4)
            br(n, 5) = ar(i, 7)
            br(n, 6) = ar(i, 8)
            br(n, 7) = ar(i, 9)
            br(n, 8) = ar(i, 10)
            br(n, 9) = ar(i, 12)
            br(n, 10) = ar(i, 13)
            br(n, 11) = ar(i, 14)
            br(n, 12) = ar(i, 15)
            br(n, 13) = ar(i, 16)
            br(n, 14) = ar(i, 17)
            br(n, 15) = ar(i, 18)
            br(n, 16) = ar(i, 20)
       'End If
    Next
        .Range("a" & m).Resize(n, 16) = br
    End With
wb.Close 1
Set wb = Nothing
MsgBox "sc分配完成"

End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-28 14:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
加了三列数据,出现“下标越界”,搞半天还是。
才发现是
ar = Range("a1:t" & myr)
中“a1:t”设定的范围只到t列,修改为:
ar = Range("a1:w" & myr)
就OK

继续学习!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 23:44 , Processed in 0.023598 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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