Excel精英培训网

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

[已解决]SOS插入行的问题

[复制链接]
发表于 2013-12-5 23:10 | 显示全部楼层 |阅读模式
本帖最后由 h486 于 2013-12-6 15:25 编辑

请高手和老师帮忙。1、如何从第4行开始每30行下或合计行下,插入一行在h,i格显示“第几页,共几页”(如“第1页,共4页”,未遇到合计行,运行到第二页显示“第2页,共4页”直至第4页),遇到合计行重新计算“第几页,共几页”(如“第1页,共2页”)。2、从数据行到合计行不足30行插入空白行格式不变,使其满足每页数据30行,合计行是31行。
最佳答案
2013-12-6 14:35
是不是这个意思
Sub a()
Application.ScreenUpdating = False
arra = Range("a4:a" & Range("a65536").End(xlUp).Row)
Dim arrb(1 To 10000, 1 To 1)
j = 1
arrb(1, 1) = 3 '标题行 4行为数据
For i = 1 To UBound(arra)
   If arra(i, 1) = "合 计" Then '找合计所在行
      j = j + 1
      arrb(j, 1) = i + 3
   End If
Next i
For ii = j To 2 Step -1 '循环合计次数的行
     r = arrb(ii, 1) - arrb(ii - 1, 1)  '合计行这间有相差多少行
     If r Mod 30 > 0 Then
         pa = Int(r / 30) + 1  '计算有几页
       Else
         pa = Int(r / 30)
      End If
      ins = pa * 30 - r '计算插入多少行
       For jj = pa To 1 Step -1 '循环页
           If jj = pa Then
              Rows(arrb(ii, 1) & ":" & arrb(ii, 1) + ins - 1).Insert
              Rows(arrb(ii, 1) + ins + 1).Insert
              Cells(arrb(ii, 1) + ins + 1, 8) = "第" & jj & "页, 共" & pa & "页"
            Else
              Rows(arrb(ii - 1, 1) + jj * 30 + 1).Insert
              
              Cells(arrb(ii - 1, 1) + jj * 30 + 1, 8) = "第" & jj & "页, 共" & pa & "页"
           End If
       Next jj
Next ii
Application.ScreenUpdating = True
End Sub

插入行问题.rar

12.02 KB, 下载次数: 7

插入行问题

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2013-12-6 11:09 | 显示全部楼层
回复

使用道具 举报

发表于 2013-12-6 11:36 | 显示全部楼层
h486 发表于 2013-12-6 11:09
老师or高手你们在哪?SOS

请测试:
插入行问题.rar (15.15 KB, 下载次数: 14)
回复

使用道具 举报

 楼主| 发表于 2013-12-6 12:31 | 显示全部楼层
本帖最后由 h486 于 2013-12-6 12:33 编辑

yyyydddd8888 兄弟你幸苦了,这也能做的到,太强了,我想了半年没想出来。
还有些问题就是
1、数据行需要是每30行插入第几页共几页,代码运行是29行插入第几页共几页。2、合计页不足30行插入空白行到30行,合计行在31行,这个没实现。3、建议增加删除a列为空的代码,再次运行不会出错。
回复

使用道具 举报

发表于 2013-12-6 12:51 | 显示全部楼层
用倒循环呀
回复

使用道具 举报

发表于 2013-12-6 13:21 | 显示全部楼层
h486 发表于 2013-12-6 12:31
yyyydddd8888 兄弟你幸苦了,这也能做的到,太强了,我想了半年没想出来。
还有些问题就是
1、数据行需要 ...

不懂你的意思,
1、从第4行开始,到第33行刚好30行,所以在第33行插入了一个空行,如果在第34行插入空行,那么就是满31行插入空行了。
2、合计页不足30行插入空白行到30行,合计行在31行,这个没实现。
     这句彻底不理解什么意思。
3、建议增加删除a列为空的代码,再次运行不会出错。
     现在已经增加了删除行的代码。
插入行问题.rar (19.17 KB, 下载次数: 10)
回复

使用道具 举报

 楼主| 发表于 2013-12-6 13:47 | 显示全部楼层
本帖最后由 h486 于 2013-12-6 14:13 编辑

不好意思没表达清楚。我把想实现的效果表格发上来。

插入行问题.zip

9.4 KB, 下载次数: 6

回复

使用道具 举报

发表于 2013-12-6 13:52 | 显示全部楼层
Sub a()
Application.ScreenUpdating = False
arra = Range("a4:a" & Range("a65536").End(xlUp).Row)
Dim arrb(1 To 10000, 1 To 1)
j = 1
arrb(1, 1) = 3 '标题行 4行为数据
For i = 1 To UBound(arra)
   If arra(i, 1) = "合 计" Then '找合计
      j = j + 1
      arrb(j, 1) = i + 3
   End If
Next i

For ii = j To 2 Step -1 '循环合计
     r = arrb(ii, 1) - arrb(ii - 1, 1) - 1 '合计行这间有相差多少行
     If r Mod 30 > 0 Then
         pa = Int(r / 30) + 1  '计算有几页
       Else
         pa = Int(r / 30)
      End If
      ins = pa * 30 - r '计算插入多少行
      
       For jj = pa To 1 Step -1 '循环页
           
           If jj = pa Then
              Rows(arrb(ii, 1) & ":" & arrb(ii, 1) + ins).Insert
              Cells(arrb(ii, 1) + ins, 8) = "第" & jj & "页, 共" & pa & "页"
            Else
              Rows(arrb(ii - 1, 1) + jj * 30 + 1).Insert
              Cells(arrb(ii - 1, 1) + jj * 30 + 1, 8) = "第" & jj & "页, 共" & pa & "页"
           End If
       Next jj
Next ii
Application.ScreenUpdating = True

End Sub

评分

参与人数 1 +6 收起 理由
yyyydddd8888 + 6

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-12-6 14:08 | 显示全部楼层
本帖最后由 h486 于 2013-12-6 14:26 编辑

谢谢雪高山,但你这段代码还是有问题。上图&表格。

QQ图片20131206141224.zip

24.2 KB, 下载次数: 2

插入行问题2.rar

18.77 KB, 下载次数: 2

回复

使用道具 举报

发表于 2013-12-6 14:35 | 显示全部楼层    本楼为最佳答案   
是不是这个意思
Sub a()
Application.ScreenUpdating = False
arra = Range("a4:a" & Range("a65536").End(xlUp).Row)
Dim arrb(1 To 10000, 1 To 1)
j = 1
arrb(1, 1) = 3 '标题行 4行为数据
For i = 1 To UBound(arra)
   If arra(i, 1) = "合 计" Then '找合计所在行
      j = j + 1
      arrb(j, 1) = i + 3
   End If
Next i
For ii = j To 2 Step -1 '循环合计次数的行
     r = arrb(ii, 1) - arrb(ii - 1, 1)  '合计行这间有相差多少行
     If r Mod 30 > 0 Then
         pa = Int(r / 30) + 1  '计算有几页
       Else
         pa = Int(r / 30)
      End If
      ins = pa * 30 - r '计算插入多少行
       For jj = pa To 1 Step -1 '循环页
           If jj = pa Then
              Rows(arrb(ii, 1) & ":" & arrb(ii, 1) + ins - 1).Insert
              Rows(arrb(ii, 1) + ins + 1).Insert
              Cells(arrb(ii, 1) + ins + 1, 8) = "第" & jj & "页, 共" & pa & "页"
            Else
              Rows(arrb(ii - 1, 1) + jj * 30 + 1).Insert
              
              Cells(arrb(ii - 1, 1) + jj * 30 + 1, 8) = "第" & jj & "页, 共" & pa & "页"
           End If
       Next jj
Next ii
Application.ScreenUpdating = True
End Sub

评分

参与人数 1 +1 收起 理由
北纬37度 + 1

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 14:43 , Processed in 0.288479 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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