ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请问怎样用宏把指定的区域复制到指定的另外区域(是动态的)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-19 21:13 | 显示全部楼层 |阅读模式
请问怎样用宏把指定的数据区域(第5行到第8行)中的一行数据(不是完整行) 复制到 指定的区域,这个要求看起来简单,但是有些额外的难度
1.指定行不是固定的,是动态的,为了方便动态操作,简化一点,所以在A16单元格设置了指定行的取值,比如A16的值取6,代表
的是把第6行的数据复制到指定区域
2,同样指定的复制区域也不是固定的,我在C16单元格设置了要覆盖的行的取值,比如C16取1,代表的是上边第一步中的第6行的数据复制到第一行
3,同理,单元格A17和C17也是对指定的数据复制的要求,即把第7行的数据复制到指定的第3行
我想通过A16,A17,以及C16和C17这4个单元格来控制整个数据的复制,请问能写出这样的宏吗,谢谢、、


QQ图片20190119211107.png

公式表.rar

6.32 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2019-1-19 22:17 | 显示全部楼层
数据源的格式不一样,写出的代码就会不一样

TA的精华主题

TA的得分主题

发表于 2019-1-19 22:33 | 显示全部楼层
Sub test()
    Dim rng As Range
    Dim arr
    Dim i As Byte
    arr = Range([a16], Cells(Rows.Count, 1).End(xlUp).End(xlToRight))
    For i = 1 To UBound(arr)
        Range(Cells(arr(i, 1), 2), Cells(arr(i, 1), 2).End(xlToRight)).Copy Cells(arr(i, 3), 1)
    Next i
End Sub

有什麼難度啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-20 13:39 | 显示全部楼层
感谢你的回复,在我给出的表中 ,你的公式是可以用的,但是一放到原始的大表中,宏公式出现错误。说实话对excel用公式我略微懂,但是用宏写,没有基础太难,我本来是想给一个简单例子,然后根据你的答案倒推演绎到改动后的表上,谁知比公式难多了,我把更详细的大表放出来,现在基本上数据行列是一样的了,我现在想把a1055单元格对应的行1055的数据从1055的c列开始复制到单元格c1069对应的行593去,而且是从行593的b列开始对应粘贴
现在行593的数据实际上是我手动粘贴上去的,请问怎么写宏,能用宏把类似的单元格a1070,c1070给的参数对应的行复制到行524去

QQ图片20190120133835.png

公式表2.rar

226.6 KB, 下载次数: 4

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-20 13:40 | 显示全部楼层
chis3 发表于 2019-1-19 22:33
Sub test()
    Dim rng As Range
    Dim arr

感谢你的回复

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-20 13:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-1-20 14:59 | 显示全部楼层
naizhu2 发表于 2019-1-20 13:40
能再帮忙看下上边的总表吗

Sub test()
    Dim arr
    Dim i As Byte
    arr = [a1069:c1071]
    For i = 1 To 3
        If arr(i, 1) = "" Then Exit Sub
        Range(Range("b" & arr(i, 1)), Cells(arr(i, 1), Columns.Count).End(xlToLeft)).Copy Cells(arr(i, 3), "b")
    Next i
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-20 15:13 | 显示全部楼层
chis3 发表于 2019-1-20 14:59
Sub test()
    Dim arr
    Dim i As Byte

基本实现了,但是数据是错位的,能不能只从c列的1019行的数据开始复制粘贴到524行,否则524行的标题和后边数据错位了
2.png

TA的精华主题

TA的得分主题

发表于 2019-1-20 15:27 | 显示全部楼层
naizhu2 发表于 2019-1-20 15:13
基本实现了,但是数据是错位的,能不能只从c列的1019行的数据开始复制粘贴到524行,否则524行的标题和后 ...


Sub test()
    Dim arr
    Dim i As Byte
    arr = [a1069:c1071]
    For i = 1 To 3
        If arr(i, 1) = "" Then Exit Sub
        Range(Range("c" & arr(i, 1)), Cells(arr(i, 1), Columns.Count).End(xlToLeft)).Copy Cells(arr(i, 3), "b")
    Next i
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-20 19:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
chis3 发表于 2019-1-20 15:27
Sub test()
    Dim arr
    Dim i As Byte

基本上是没有问题了,但是有一点尴尬的是,我原始的复制区域的数据是带有公式的,复制的数据能不能只复制数值到524行,不要带公式,带了公式后复制到指定区域后结果全变了,
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 00:54 , Processed in 0.046060 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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