ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教有点复杂的复制--查找--粘贴,用程序怎么写?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-21 20:27 | 显示全部楼层 |阅读模式
复制AA1:AB5,然后从最左边开始,查找第一个含有“123”的格子,进行数值粘贴。

复制AA6:AB15,查找第一个含有“456”的格子,进行粘贴(是全粘贴,不是数值粘贴)。

复制AA1:AB5,在A1:D15中从左至右,查找第一个空白的格子,进行粘贴。

复制AA6:AB15,在A1:D15中查找从左至右第2个空格,从上到下第4个空格,进行数值粘贴。

复制AA1:AB5,在A1:G15中查找从左至右第1个含有“123”的格子,从上到下第2个含有“123”的格子,进行数值粘贴。

复制AA6:AB15,在A1:G15中查找从左至右第2个含有“456”的格子,从上到下第1个含有“456”的格子,进行粘贴。




复制AA1:AB5,在H1:J15中查找从左至右第1个含有“123”的格子,从上到下第3个含有“123”的格子,进行粘贴。

复制AA6:AB15,在H1:J15中查找从左至右第1个含有“456”的格子,从上到下第5个含有“456”的格子,进行粘贴。

111.jpg
112.jpg
新建 XLSX 工作表.rar (8.83 KB, 下载次数: 1)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-21 23:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-22 10:23 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-22 13:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png

TA的精华主题

TA的得分主题

发表于 2024-8-22 13:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

总感觉有点问题

新建 XLSX 工作表.rar

24.71 KB, 下载次数: 4

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-22 19:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢,先下载来看看

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-22 21:51 | 显示全部楼层

大哥好,请教以下的这些设定是什么含义,谢谢:

Dim a, ar, arr, br, brr
Dim r As Range, rg As Range
Dim i%, j%, n%, n1%
Dim s1, s2, t

Application.ScreenUpdating = False
Application.DisplayAlerts = False
t = Timer: s1 = 123: s2 = 456
Set r = [AA1:AB5]: Set rg = [AA6:AB15]
a = [A1:J15]
b = [AA1:AB5].Value: br = [AA6:AB15].Value

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-22 22:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

大哥好,还有下面的内容,能详细讲解吗?谢谢:
round4:
ar = [A1:D15]
For i = 1 To UBound(ar)
    For j = 1 To UBound(ar, 2)
        If ar(i, j) = "" Then
            n = n + 1
        End If
        If n = 2 Then
        GoTo round41
        End If
    Next
Next
round41:
ar = [A1:D15]
For i = i + 1 To UBound(ar)
    If ar(i, j) = "" Then
    n1 = n1 + 1
        If n1 = 3 Then
        Cells(i, j).Resize(UBound(br), UBound(br, 2)) = br
        GoTo round5
        End If
    End If
Next
round5:
arr = [A1:G15]
For i = 1 To UBound(arr)
    For j = 1 To UBound(arr, 2)
        If arr(i, j) = s1 Then
            GoTo round51
        End If
    Next
Next
round51:
For i = i + 1 To UBound(arr)
    If arr(i, j) = s1 Then
        Cells(i, j).Resize(UBound(b), UBound(b, 2)) = b
        GoTo round6
    End If
Next

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-23 07:09 来自手机 | 显示全部楼层
扇扇扇 发表于 2024-8-22 13:50
总感觉有点问题

老师早上好,你写的程序很好用。但是我学习了一个晚上都没有学会,请你一点点的详细讲解一下可以吗?谢谢!

TA的精华主题

TA的得分主题

发表于 2024-8-23 07:48 | 显示全部楼层
Sub test()    '子程序 test()
    Dim a, ar, arr, br, brr    '定义变量 a,ar,arr,br,brr
    Dim r As Range, rg As Range    '定义变量 r 为 单元格区域,rg 为 单元格区域
    Dim i%, j%, n%, n1%    '定义变量 i%,j%,n%,n1%
    Dim s1, s2, t    '定义变量 s1,s2,t
    Application.ScreenUpdating = False    '关闭屏幕刷新(可以提高运行速度)
    Application.DisplayAlerts = False    '关闭警告信息显示
    t = Timer: s1 = 123: s2 = 456    't=当前计时: s1=123:s2=456
    Set r = [AA1:AB5]: Set rg = [AA6:AB15]    '设定 r=[AA1:AB5]:设定rg=[AA6:AB15]
    a = [A1:J15]    ' a=[A1:J15]
    b = [AA1:AB5].Value: br = [AA6:AB15].Value    'b=[AA1 :AB5]的值:br=[AA6 :AB15]的值
    For i = 1 To UBound(a)    '设定变量范围为i=1到<数组上限>(a)
        For j = 1 To UBound(a, 2)    '设定变量范围为j=1到<数组上限>(a,2)
            If a(i, j) = s1 Then    '如果 a(i,j)=s1 则执行
            Cells(i, j).Resize(UBound(b), UBound(b, 2)) = b    '<单元格坐标>(i,j )的<重调大小>(<数组上限>(b),<数组上限>(b,2))=b
            GoTo round2    ' 跳至 round2
        End If    'If判断过程结束
    Next    '下一个
Next    '下一个
round2:    'round2:
a = [A1:J15]    'a=[A1:J15]
For i = 1 To UBound(a)    '设定变量范围为i=1到<数组上限>(a)
    For j = 1 To UBound(a, 2)    '设定变量范围为j=1到<数组上限>(a,2)
        If a(i, j) = s2 Then    '如果 a(i,j)=s2 则执行
        rg.Copy Cells(i, j)    ' rg的复制  <单元格坐标>(i,j)
        GoTo round3    ' 跳至 round3
    End If    'If判断过程结束
Next    '下一个
Next    '下一个
round3:    'round3:
ar = [A1:D15]    'ar=[A1:D15]
For i = 1 To UBound(ar)    '设定变量范围为i=1到<数组上限>(ar)
    For j = 1 To UBound(ar, 2)    '设定变量范围为j=1到<数组上限>(ar,2)
        If ar(i, j) = "" Then    '如果 ar(i,j)=空值 则执行
        r.Copy Cells(i, j)    ' r的复制  <单元格坐标>(i,j)
        GoTo round4    ' 跳至 round4
    End If    'If判断过程结束
Next    '下一个
Next    '下一个
round4:    'round4:
ar = [A1:D15]    'ar=[A1:D15]
For i = 1 To UBound(ar)    '设定变量范围为i=1到<数组上限>(ar)
    For j = 1 To UBound(ar, 2)    '设定变量范围为j=1到<数组上限>(ar,2)
        If ar(i, j) = "" Then    '如果 ar(i,j)=空值 则执行
        n = n + 1    'n=n+1
    End If    'If判断过程结束
    If n = 2 Then    '如果 n=2 则执行
    GoTo round41    ' 跳至 round41
End If    'If判断过程结束
Next    '下一个
Next    '下一个
round41:    'round41:
ar = [A1:D15]    'ar=[A1:D15]
For i = i + 1 To UBound(ar)    '设定变量范围为i=i+1到<数组上限>(ar)
    If ar(i, j) = "" Then    '如果 ar(i,j)=空值 则执行
    n1 = n1 + 1    'n1=n1+1
    If n1 = 3 Then    '如果 n1=3 则执行
    Cells(i, j).Resize(UBound(br), UBound(br, 2)) = br    '<单元格坐标>(i,j )的<重调大小>(<数组上限>(br),<数组上限>(br,2))=br
    GoTo round5    ' 跳至 round5
End If    'If判断过程结束
End If    'If判断过程结束
Next    '下一个
round5:    'round5:
arr = [A1:G15]    'arr=[A1:G15]
For i = 1 To UBound(arr)    '设定变量范围为i=1到<数组上限>(arr)
    For j = 1 To UBound(arr, 2)    '设定变量范围为j=1到<数组上限>(arr,2)
        If arr(i, j) = s1 Then    '如果 arr(i,j)=s1 则执行
        GoTo round51    ' 跳至 round51
    End If    'If判断过程结束
Next    '下一个
Next    '下一个
round51:    'round51:
For i = i + 1 To UBound(arr)    '设定变量范围为i=i+1到<数组上限>(arr)
    If arr(i, j) = s1 Then    '如果 arr(i,j)=s1 则执行
    Cells(i, j).Resize(UBound(b), UBound(b, 2)) = b    '<单元格坐标>(i,j )的<重调大小>(<数组上限>(b),<数组上限>(b,2))=b
    GoTo round6    ' 跳至 round6
End If    'If判断过程结束
Next    '下一个
round6:    'round6:
arr = [A1:G15]    'arr=[A1:G15]
n = 0    'n=0
For i = 1 To UBound(arr)    '设定变量范围为i=1到<数组上限>(arr)
    For j = 1 To UBound(arr, 2)    '设定变量范围为j=1到<数组上限>(arr,2)
        If arr(i, j) = s2 Then    '如果 arr(i,j)=s2 则执行
        n = n + 1    'n=n+1
        If n = 2 Then    '如果 n=2 则执行
        GoTo round61    ' 跳至 round61
    End If    'If判断过程结束
End If    'If判断过程结束
Next    '下一个
Next    '下一个
round61:    'round61:
For i = i To UBound(arr)    '设定变量范围为i=i到<数组上限>(arr)
    If arr(i, j) = s2 Then    '如果 arr(i,j)=s2 则执行
    rg.Copy Cells(i, j)    ' rg的复制  <单元格坐标>(i,j)
    GoTo round7    ' 跳至 round7
End If    'If判断过程结束
Next    '下一个
round7:    'round7:
brr = [H1:J15]    'brr=[H1:J15]
For i = 1 To UBound(brr)    '设定变量范围为i=1到<数组上限>(brr)
    For j = 1 To UBound(brr, 2)    '设定变量范围为j=1到<数组上限>(brr,2)
        If brr(i, j) = s1 Then    '如果 brr(i,j)=s1 则执行
        GoTo round71    ' 跳至 round71
    End If    'If判断过程结束
Next    '下一个
Next    '下一个
round71:    'round71:
n = 0    'n=0
For i = i + 1 To UBound(brr)    '设定变量范围为i=i+1到<数组上限>(brr)
    If brr(i, j) = s1 Then    '如果 brr(i,j)=s1 则执行
    n = n + 1    'n=n+1
    If n = 2 Then    '如果 n=2 则执行
    r.Copy Cells(i, j + UBound(arr, 2))    ' r的复制  <单元格坐标>(i,j+<数组上限>(arr,2))
    GoTo round8    ' 跳至 round8
End If    'If判断过程结束
End If    'If判断过程结束
Next    '下一个
round8:    'round8:
brr = [H1:J15]    'brr=[H1:J15]
For i = 1 To UBound(brr)    '设定变量范围为i=1到<数组上限>(brr)
    For j = 1 To UBound(brr, 2)    '设定变量范围为j=1到<数组上限>(brr,2)
        If brr(i, j) = s2 Then    '如果 brr(i,j)=s2 则执行
        GoTo round81    ' 跳至 round81
    End If    'If判断过程结束
Next    '下一个
Next    '下一个
round81:    'round81:
n = 0    'n=0
For i = i + 1 To UBound(brr)    '设定变量范围为i=i+1到<数组上限>(brr)
    If brr(i, j) = s2 Then    '如果 brr(i,j)=s2 则执行
    n = n + 1    'n=n+1
    If n = 4 Then    '如果 n=4 则执行
    rg.Copy Cells(i, j + UBound(arr, 2))    ' rg的复制  <单元格坐标>(i,j+<数组上限>(arr,2))
    GoTo ok    ' 跳至 ok
End If    'If判断过程结束
End If    'If判断过程结束
Next    '下一个
ok:    'ok:
Application.ScreenUpdating = True    '开启屏幕刷新
Application.DisplayAlerts = True    '开启警告信息显示
MsgBox "用时" & Format(Timer - t, "0.00" & "秒")    '<消息框>:"用时" & 格式化字符串(当前计时-t,"0.00" & "秒")
End Sub    '子程序结束

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-18 16:44 , Processed in 0.046394 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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