Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1750|回复: 8

[已解决]增加最后代码,谢谢帮忙

[复制链接]
发表于 2013-3-27 10:47 | 显示全部楼层 |阅读模式
大家帮忙一下代码,把L列坐标加在K列一样刀序坐标最后面,结果如M列,谢谢!!
最佳答案
2013-3-27 11:10
  1. Sub 复制()
  2.     Dim i As Long
  3.     Dim lStart As Long
  4.     Dim lEnd As Long
  5.     Dim lRow As Long
  6.     Dim rg As Range

  7.     Columns("k").Copy Columns("p")
  8.     i = 1
  9.     lRow = Cells(Rows.Count, "l").End(xlUp).Row
  10.     Do While Not (Cells(i, "l") Like "T#" Or Cells(i, "l") Like "T##") And i <= lRow
  11.         i = i + 1
  12.         lStart = i
  13.     Loop
  14.     If i > lRow Then Exit Sub
  15.     i = i + 1
  16.     Do While Not (Cells(i, "l") Like "T#" Or Cells(i, "l") Like "T##" Or Cells(i, "l") Like "M30") And i <= lRow
  17.         i = i + 1
  18.         lEnd = i
  19.     Loop
  20.     If i > lRow Then Exit Sub
  21.     Set rg = Range("p:p").Find(what:=Cells(lStart, "l"), lookat:=xlWhole)
  22.     If rg Is Nothing Then Exit Sub
  23.     i = rg.Row + 1
  24.     lRow = Cells(Rows.Count, "p").End(xlUp).Row
  25.     Do While Not (Cells(i, "p") Like "T#" Or Cells(i, "p") Like "T##" Or Cells(i, "l") Like "M30") And i <= lRow
  26.         i = i + 1
  27.     Loop
  28.     If i > lRow Then Exit Sub
  29.     Range(Cells(lStart + 1, "l"), Cells(lEnd - 1, "l")).Copy
  30.     Cells(i, "p").Insert shift:=xlDown
  31.     Application.CutCopyMode = False
  32. End Sub
复制代码

增加.rar

7.42 KB, 下载次数: 12

发表于 2013-3-27 11:10 | 显示全部楼层    本楼为最佳答案   
  1. Sub 复制()
  2.     Dim i As Long
  3.     Dim lStart As Long
  4.     Dim lEnd As Long
  5.     Dim lRow As Long
  6.     Dim rg As Range

  7.     Columns("k").Copy Columns("p")
  8.     i = 1
  9.     lRow = Cells(Rows.Count, "l").End(xlUp).Row
  10.     Do While Not (Cells(i, "l") Like "T#" Or Cells(i, "l") Like "T##") And i <= lRow
  11.         i = i + 1
  12.         lStart = i
  13.     Loop
  14.     If i > lRow Then Exit Sub
  15.     i = i + 1
  16.     Do While Not (Cells(i, "l") Like "T#" Or Cells(i, "l") Like "T##" Or Cells(i, "l") Like "M30") And i <= lRow
  17.         i = i + 1
  18.         lEnd = i
  19.     Loop
  20.     If i > lRow Then Exit Sub
  21.     Set rg = Range("p:p").Find(what:=Cells(lStart, "l"), lookat:=xlWhole)
  22.     If rg Is Nothing Then Exit Sub
  23.     i = rg.Row + 1
  24.     lRow = Cells(Rows.Count, "p").End(xlUp).Row
  25.     Do While Not (Cells(i, "p") Like "T#" Or Cells(i, "p") Like "T##" Or Cells(i, "l") Like "M30") And i <= lRow
  26.         i = i + 1
  27.     Loop
  28.     If i > lRow Then Exit Sub
  29.     Range(Cells(lStart + 1, "l"), Cells(lEnd - 1, "l")).Copy
  30.     Cells(i, "p").Insert shift:=xlDown
  31.     Application.CutCopyMode = False
  32. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
fangniuji + 3

查看全部评分

回复

使用道具 举报

发表于 2013-3-27 11:11 | 显示全部楼层
一对一的,没有通用性,下面要是有很多就不管用了。
回复

使用道具 举报

发表于 2013-3-27 11:11 | 显示全部楼层
你只要知道思路就会了。
回复

使用道具 举报

发表于 2013-3-27 11:13 | 显示全部楼层
把找寻序号和定位,如果做成单独的函数出来,再加个可选参数,从哪个位置开始找起,可能会更好。
回复

使用道具 举报

发表于 2013-3-27 11:42 | 显示全部楼层
呆会重新写个函数,有通用的做法。
回复

使用道具 举报

发表于 2013-3-27 12:22 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-3-27 12:26 编辑
  1. Sub 模式复制()
  2.     Dim i As Long
  3.     Dim lStart As Long
  4.     Dim lEnd As Long
  5.     Dim lRow As Long
  6.     Dim rg As Range
  7.     Dim lDstRow As Long
  8.     Dim lSrcCol As String

  9.     lSrcCol = "l"
  10.     Columns("k").Copy Columns("p")
  11.     lStart = GetPosition(lSrcCol, "T#", 1)
  12.     lRow = Cells(Rows.Count, lSrcCol).End(xlUp).Row

  13.     Do While lStart < lRow
  14.         If lStart = 0 Then Exit Sub

  15.         lEnd = GetPosition(lSrcCol, "T#", lStart + 1)
  16.         If lEnd = 0 Then Exit Sub

  17.         Set rg = Range("p:p").Find(what:=Cells(lStart, lSrcCol), lookat:=xlWhole)
  18.         If rg Is Nothing Then Exit Sub

  19.         lDstRow = GetPosition("p", "T#", rg.Row + 1)
  20.         If lDstRow = 0 Then Exit Sub

  21.         Application.ScreenUpdating = False
  22.         Range(Cells(lStart + 1, lSrcCol), Cells(lEnd - 1, lSrcCol)).Copy
  23.         Cells(lDstRow, "p").Insert shift:=xlDown
  24.         Application.CutCopyMode = False
  25.         Application.ScreenUpdating = True
  26.         lStart = GetPosition(lSrcCol, "T#", lEnd)
  27.     Loop
  28. End Sub

  29. Function GetPosition(lCol, Pattern As String, Optional lRow As Long = 1) As Long
  30. '参数lCol,查找的指定列
  31. '参数Pattern,匹配表达式,可用通配符,通配符格式与LIKE相同
  32. '参数lRow,指定行,默认为1
  33. '---------------------------------------------------------------------------------------
  34. ' Procedure : GetPosition
  35. ' Author    : hwc2ycy
  36. ' Date      : 2013/3/27
  37. ' Purpose   : 在某列从指定行开始查找匹配的行的位置,
  38. '---------------------------------------------------------------------------------------
  39. '
  40.     Dim lLastRow As Long

  41.     lLastRow = Cells(Rows.Count, lCol).End(xlUp).Row
  42.     Dim i As Long
  43.     i = lRow
  44.     Do While Not (Cells(i, lCol) Like Pattern Or Cells(i, lCol) Like Pattern & "#" Or Cells(i, lCol) Like "M30") And i <= lLastRow
  45.         i = i + 1
  46.     Loop
  47.     If i <= lLastRow Then GetPosition = i
  48. End Function
复制代码
回复

使用道具 举报

发表于 2013-3-27 12:22 | 显示全部楼层
L列有多个序列号要复制的都可以解决。
回复

使用道具 举报

 楼主| 发表于 2013-3-27 12:24 | 显示全部楼层
hwc2ycy 发表于 2013-3-27 12:22
L列有多个序列号要复制的都可以解决。

谢谢,谢谢!!!!!!!!!!!!!!!
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 17:37 , Processed in 1.084616 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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