Excel精英培训网

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

[已解决]汇总分表数据到总表

[复制链接]
发表于 2021-11-10 09:15 | 显示全部楼层 |阅读模式
本帖最后由 oldwang 于 2021-11-10 09:17 编辑

大佬们,我想把表1 2 3的B:F列数据按照从上到下从左到右的顺序平均分配汇总到表“总”的1、4列,求大佬写个代码我学习学习。
最佳答案
2021-11-10 11:22
  1. Sub 宏2()
  2. Dim ws As Worksheet
  3. Dim i%, arr(1 To 1, 1 To 200), x%, j%, K%, L%, S As Integer, M, N
  4. For i = 1 To Sheets.Count
  5. If Sheets(i).Name <> "总" Then
  6.     S = Sheets(i).UsedRange.Rows.Count
  7.     For M = 1 To S
  8.     For N = 2 To 6
  9.            If Len(Sheets(i).Cells(M, N)) > 0 Then
  10.         j = j + 1
  11.         arr(1, j) = Sheets(i).Cells(M, N)
  12.         End If
  13.         Next
  14.         
  15.     Next
  16. End If
  17. Next
  18.         For K = 1 To Int((j + 1) / 2)
  19.             Cells(K, 1) = arr(1, K)
  20.         Next
  21.         For L = K To j
  22.             Cells(L - K + 1, 4) = arr(1, L)
  23.         Next
  24.     Application.ScreenUpdating = True
  25. End Sub
复制代码

我感觉 你原来的思路有BUG,当周边有其他数据的时候,就会把不相干 周边的列的内容给导过来。所以我重新换了一种思路
分表.png
总.png

11-10.zip

21.01 KB, 下载次数: 5

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-11-10 11:02 | 显示全部楼层
  1. Sub 宏1()
  2. Dim ws As Worksheet
  3. Dim i%, arr(1 To 1, 1 To 200), x%, j%, K%, L%
  4. For i = 1 To Sheets.Count
  5. If Sheets(i).Name <> "总" Then
  6.     Set rn = Sheets(i).UsedRange.Offset(0, 1).SpecialCells(xlCellTypeConstants, 23)
  7.     x = x + rn.Cells.Count / 2
  8.         End If
  9.     Next
  10.       If x - Int(x) >= 0 Then x = Int(x) + 1
  11.     y = 0
  12.     c = 1
  13.     Application.ScreenUpdating = False
  14.     For i = 2 To Sheets.Count
  15. If Sheets(i).Name <> "总" Then
  16.     For Each Rng In Sheets(i).UsedRange.Offset(0, 1)
  17.         If Len(Rng) > 0 Then
  18.         j = j + 1
  19.         arr(1, j) = Rng
  20.         End If
  21.         Next
  22.         End If
  23.     Next
  24.         For K = 1 To x - 1
  25.             Cells(K, 1) = arr(1, K)
  26.         Next
  27.         For L = K To K * 2
  28.             Cells(L - K + 1, 4) = arr(1, L)
  29.         Next
  30.     Application.ScreenUpdating = True
  31. End Sub
复制代码

我用你原来的思路,在你原来的基础上修改的。
见附件

11-10.rar

20.31 KB, 下载次数: 4

回复

使用道具 举报

发表于 2021-11-10 11:22 | 显示全部楼层    本楼为最佳答案   
  1. Sub 宏2()
  2. Dim ws As Worksheet
  3. Dim i%, arr(1 To 1, 1 To 200), x%, j%, K%, L%, S As Integer, M, N
  4. For i = 1 To Sheets.Count
  5. If Sheets(i).Name <> "总" Then
  6.     S = Sheets(i).UsedRange.Rows.Count
  7.     For M = 1 To S
  8.     For N = 2 To 6
  9.            If Len(Sheets(i).Cells(M, N)) > 0 Then
  10.         j = j + 1
  11.         arr(1, j) = Sheets(i).Cells(M, N)
  12.         End If
  13.         Next
  14.         
  15.     Next
  16. End If
  17. Next
  18.         For K = 1 To Int((j + 1) / 2)
  19.             Cells(K, 1) = arr(1, K)
  20.         Next
  21.         For L = K To j
  22.             Cells(L - K + 1, 4) = arr(1, L)
  23.         Next
  24.     Application.ScreenUpdating = True
  25. End Sub
复制代码

我感觉 你原来的思路有BUG,当周边有其他数据的时候,就会把不相干 周边的列的内容给导过来。所以我重新换了一种思路

点评

牛,牛,牛  发表于 2021-11-10 12:13

评分

参与人数 1学分 +2 收起 理由
oldwang + 2 学习了

查看全部评分

回复

使用道具 举报

发表于 2021-11-10 12:04 | 显示全部楼层
Sub demo()
   Cells.ClearContents
   For sh = 2 To Sheets.Count
      For Each Rng In Sheets(sh).UsedRange.Offset(, 1)
         If Rng.Value <> "" Then [a1].Offset(r) = Rng: r = r + 1
      Next
   Next
   [a1].Offset((r + 1) \ 2).Resize(r / 2).Cut [f1]
End Sub


祝順心,南無阿彌陀佛!

demo.rar

18.96 KB, 下载次数: 3

评分

参与人数 1学分 +2 收起 理由
oldwang + 2 学习了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-11-10 12:04 | 显示全部楼层
心正意诚身修 发表于 2021-11-10 11:22
我感觉 你原来的思路有BUG,当周边有其他数据的时候,就会把不相干 周边的列的内容给导过来。所以我重新 ...

感谢大佬,你这种很好
回复

使用道具 举报

 楼主| 发表于 2021-11-10 12:08 | 显示全部楼层
cutecpu 发表于 2021-11-10 12:04
Sub demo()
   Cells.ClearContents
   For sh = 2 To Sheets.Count

感谢大佬,简洁有效

评分

参与人数 1学分 +2 收起 理由
cutecpu + 2 不客气。祝顺心,南无阿弥陀佛!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 03:23 , Processed in 0.476211 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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