Excel精英培训网

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

[已解决]如何用代码判断连续四组且一三位同号的数据?

[复制链接]
发表于 2013-7-14 11:29 | 显示全部楼层 |阅读模式
如附件 判断连续四组且一三位同号数据.rar (7.4 KB, 下载次数: 5)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-7-14 12:04 | 显示全部楼层
  1. Sub test()
  2.     Dim i As Long
  3.     Dim k As Long
  4.     Dim l As Long
  5.     Dim m As Long
  6.     Dim arr
  7.     Dim lP As Long
  8.     l = Cells(Rows.Count, 1).End(xlUp).Row + 1
  9.     arr = Range("a1:g" & l)
  10.     Columns("p").ClearContents

  11.     For i = LBound(arr) To UBound(arr)
  12.         k = i
  13.         Do Until k = l Or Len(arr(k, 1)) = 0
  14.             k = k + 1
  15.         Loop
  16.         If k - i = 4 Then
  17.             Debug.Print i, k
  18.             For m = i To k
  19.                 If arr(m, 1) <> arr(m, 4) Then Exit For
  20.             Next
  21.             If m > k Then
  22.                 lP = lP + 1
  23.                 Cells(lP, "p") = arr(m - 2, 7)
  24.             End If
  25.         End If
  26.         i = k
  27.     Next
  28. End Sub
复制代码
回复

使用道具 举报

发表于 2013-7-14 12:07 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2.     Dim i As Long
  3.     Dim k As Long
  4.     Dim m As Long
  5.     Dim arr
  6.     Dim lP As Long

  7.     arr = Range("a1:g" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
  8.     Application.ScreenUpdating = False
  9.     Columns("p").ClearContents
  10.     For i = LBound(arr) To UBound(arr)
  11.         k = i
  12.         Do Until Len(arr(k, 1)) = 0
  13.             k = k + 1
  14.         Loop
  15.         If k - i = 4 Then
  16.             For m = i To k
  17.                 If arr(m, 1) <> arr(m, 4) Then Exit For
  18.             Next
  19.             If m > k Then
  20.                 lP = lP + 1
  21.                 Cells(lP, "p") = arr(m - 2, 7)
  22.             End If
  23.         End If
  24.         i = k
  25.     Next
  26.     Application.ScreenUpdating = True
  27.     MsgBox "提取完成", vbInformation + vbOKOnly
  28. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
YangYangg + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-7-14 12:15 | 显示全部楼层
hwc2ycy 发表于 2013-7-14 12:07

谢谢老师帮助。已完成完美组合了。再谢!
回复

使用道具 举报

发表于 2013-7-14 12:16 | 显示全部楼层
  1. Sub 方法2()
  2.     Dim i As Long
  3.     Dim k As Long
  4.     Dim m As Long
  5.     Dim arr
  6.     Dim lP As Long
  7.     Dim blExit As Boolean
  8.     Dim t#
  9.     t = Timer
  10.     arr = Range("a1:g" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
  11.     Application.ScreenUpdating = False
  12.     Columns("p").ClearContents
  13.     For i = LBound(arr) To UBound(arr)
  14.         k = i
  15.         blExit = True
  16.         Do Until Len(arr(k, 1)) = 0
  17.             If arr(k, 1) <> arr(k, 4) Then blExit = False ': Exit Do
  18.             k = k + 1
  19.         Loop

  20.         If blExit And k - i = 4 Then
  21.             lP = lP + 1
  22.             Cells(lP, "p") = arr(k - 1, 7)
  23.         End If
  24.         i = k
  25.     Next
  26.     Application.ScreenUpdating = True
  27.     t = Timer - t
  28.     MsgBox "提取完成" & vbCrLf & t & "秒", vbInformation + vbOKOnly
  29. End Sub
复制代码
回复

使用道具 举报

发表于 2013-7-14 12:17 | 显示全部楼层
  1. Sub 方法1()
  2.     Dim i As Long
  3.     Dim k As Long
  4.     Dim m As Long
  5.     Dim arr
  6.     Dim lP As Long
  7.     Dim t#
  8.     t = Timer
  9.     arr = Range("a1:g" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
  10.     Application.ScreenUpdating = False
  11.     Columns("p").ClearContents
  12.     For i = LBound(arr) To UBound(arr)
  13.         k = i
  14.         Do Until Len(arr(k, 1)) = 0
  15.             k = k + 1
  16.         Loop
  17.         
  18.         If k - i = 4 Then
  19.             For m = i To k
  20.                 If arr(m, 1) <> arr(m, 4) Then Exit For
  21.             Next
  22.             If m > k Then
  23.                 lP = lP + 1
  24.                 Cells(lP, "p") = arr(m - 2, 7)
  25.             End If
  26.         End If
  27.         i = k
  28.     Next
  29.     Application.ScreenUpdating = True
  30.     t = Timer - t
  31.     MsgBox "提取完成" & vbCrLf & t & "秒", vbInformation + vbOKOnly
  32. End Sub
复制代码
回复

使用道具 举报

发表于 2013-7-14 12:18 | 显示全部楼层
两个方法,你看看哪个效率高。
方法2的逻辑性感觉好点。
易于理解。
回复

使用道具 举报

发表于 2013-7-14 15:25 | 显示全部楼层
hwc2ycy 发表于 2013-7-14 12:17

花亲 真厉害
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 20:50 , Processed in 0.480074 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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