Excel精英培训网

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

[已解决]求自动生成序号,并循环1次,再以4的倍数往下生成序号

[复制链接]
发表于 2017-6-6 20:42 | 显示全部楼层 |阅读模式
将sheet5中的数据在前面增加一列,从1开始编序号,依次编到批号回到初始值,再循环一次,编到批号回到初始值,再按4的倍数开始编号,并将第二次编号的化验号都改为X,第三次编号的化验号变成Y,做好后成为表6的样子。
最佳答案
2017-6-8 10:04
  1. Sub aaa()
  2. Dim i&, n&, m&, b As Boolean
  3. Columns(1).Insert
  4. For i = 2 To [b65536].End(3).Row
  5.   If Cells(i, 2) = Cells(2, 2) And b = True Then
  6.     m = m + 1
  7.     If m = 2 Then n = 4 Else n = 1
  8.     b = False
  9.   Else
  10.     If m = 2 Then n = n + 4 Else n = n + 1
  11.   End If
  12.   If Cells(i, 2) <> Cells(i + 1, 2) Then b = True
  13.   Cells(i, 1) = n
  14.   If m = 1 Then Cells(i, 3) = "X" Else If m = 2 Then Cells(i, 3) = "Y"
  15. Next i
  16. End Sub
复制代码

加序号.rar

144.49 KB, 下载次数: 14

发表于 2017-6-7 12:40 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2017-6-8 09:32 | 显示全部楼层

顺着1234567……,B列从小到大,然后到192后又回到了B列的第一个值
回复

使用道具 举报

发表于 2017-6-8 10:03 | 显示全部楼层
直接用sheet5数据运行以下代码测试,会自动添加列,如果你手工添加列的话结果会出错。
回复

使用道具 举报

发表于 2017-6-8 10:04 | 显示全部楼层    本楼为最佳答案   
  1. Sub aaa()
  2. Dim i&, n&, m&, b As Boolean
  3. Columns(1).Insert
  4. For i = 2 To [b65536].End(3).Row
  5.   If Cells(i, 2) = Cells(2, 2) And b = True Then
  6.     m = m + 1
  7.     If m = 2 Then n = 4 Else n = 1
  8.     b = False
  9.   Else
  10.     If m = 2 Then n = n + 4 Else n = n + 1
  11.   End If
  12.   If Cells(i, 2) <> Cells(i + 1, 2) Then b = True
  13.   Cells(i, 1) = n
  14.   If m = 1 Then Cells(i, 3) = "X" Else If m = 2 Then Cells(i, 3) = "Y"
  15. Next i
  16. End Sub
复制代码
回复

使用道具 举报

发表于 2017-6-8 20:57 | 显示全部楼层
野狼大大真的好樣,小弟想了兩天,覺得有點難度,硬湊還碰到卡關,拜讀一下,真的很厲害,希望有機會可以跟您多多請教
回复

使用道具 举报

发表于 2017-6-9 11:23 | 显示全部楼层
idnoidno 发表于 2017-6-8 20:57
野狼大大真的好樣,小弟想了兩天,覺得有點難度,硬湊還碰到卡關,拜讀一下,真的很厲害,希望有機會可以跟 ...

同胞兄弟过奖了,论坛就是我们交流学习的平台
回复

使用道具 举报

发表于 2017-6-9 16:15 | 显示全部楼层
謝謝您的回覆,可否對於您上面的代碼,可以解說,讓我好好的學學,謝謝
回复

使用道具 举报

发表于 2017-6-9 17:21 | 显示全部楼层
还是不太容易理解的,主要必须看明白b变量的用法。
  1. Sub aaa()
  2. Dim i&, n&, m&, b As Boolean
  3. Columns(1).Insert '最左边插入1列
  4. For i = 2 To [b65536].End(3).Row  从第2行循环遍历至最后一行
  5.   If Cells(i, 2) = Cells(2, 2) And b = True Then  'Cells(2, 2)为初始值,找到等于初始值的单元格时,判断b开关变量状态,b=false时,属于连续相同行,反之说明又从头开始了
  6.     m = m + 1  'm变量加1,m变量的值为回到初始值的次数,用来判断是加“X”还是“Y”,序号是1递增还是4递增
  7.     If m = 2 Then n = 4 Else n = 1  '根据m变量的值来判断序号初值是4还是1
  8.     b = False   '判断从头开始后,将b变量恢复初始值,以便下次再用
  9.   Else    '判断没有从头开始时,仅根据m变量的值对序号进行1或4的递增
  10.     If m = 2 Then n = n + 4 Else n = n + 1
  11.   End If
  12.   If Cells(i, 2) <> Cells(i + 1, 2) Then b = True 'b变量的使用比较关键,也不容易说清楚,这里是在上下单元格值不同时,改变b开关,说明连续相同行结束了,下次再找到跟初始值一样的单元格时,就证明又从头开始了
  13.   Cells(i, 1) = n  '将n变量(序号)填入A列
  14.   If m = 1 Then Cells(i, 3) = "X" Else If m = 2 Then Cells(i, 3) = "Y"  '根据m的值来改变C列值X或Y,m等于0时说明第一次循环还没结束,不用改变
  15. Next i
  16. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 17:31 , Processed in 0.422602 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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