Excel精英培训网

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

[已解决]求助、能否帮我分析下这个代码错在哪里?或者怎样改进?

[复制链接]
发表于 2011-12-12 19:47 | 显示全部楼层 |阅读模式
5学分
我的想法是通过汇总表第二列的内容与其他工作表对比,如果名字相等,就将该工作表选中,并在选中的工作表中第一列查找“绩效得分",然后将绩效得分偏移7列的值输入汇总表的第三列,具体见附件
现在问题的是,我将汇总表中内容从第三行开始到最后一行形成一个数组(里面全部是其他的工作表名字),因为我是从数组中的第一个开始查找的,就for a =1 to ubound(arr),这样a=1,但是我通过查找到工作表,及输入工作表的时候,我利用cells(a+2,4),按道理,a+2=3,应该输入在工作表中第三行,但是缺输入到了汇总表中的第四行,另外,其他的行都没有结果,所以请高手帮忙看看,到底问题出在哪里。谢谢
最佳答案
2011-12-12 20:16
arr = .Range("b3:e" & .Range("e65536").End(xlUp).Row)
修改为
arr = .Range("b3:b" & .Range("b65536").End(xlUp).Row)
下面2句:
Sheet38.Cells(a + 1, 4).Value = sh.Cells(b, 7).Value
Sheet38.Cells(a + 1, 5).Value = sh.Cells(b, 8).Value
修改为
Sheet38.Cells(a + 2, 4).Value = sh.Cells(b, 7).Value
Sheet38.Cells(a + 2, 5).Value = sh.Cells(b, 8).Value

表.zip

34.15 KB, 下载次数: 9

发表于 2011-12-12 20:01 | 显示全部楼层
感觉这个用公式更快一些,前提是B列的部门名称和工作表名称对应.
D3输入公式
=SUM(INDIRECT($B3&"!c"&COLUMN(G1),))/2
向右向下填充

vba的话我没仔细看你的代码,你可以试试这个
  1. Sub huizongkaohedefen()
  2.     For i = 2 To Sheets.Count
  3.         With Sheets(i)
  4.             r = .Cells.Find("绩效得分").Row
  5.             Cells(i + 1, 4) = .Cells(r, 7)
  6.             Cells(i + 1, 5) = .Cells(r, 8)
  7.         End With
  8.     Next
  9. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2011-12-12 20:14 | 显示全部楼层
Zipall 发表于 2011-12-12 20:01
感觉这个用公式更快一些,前提是B列的部门名称和工作表名称对应.
D3输入公式
=SUM(INDIRECT($B3&"!c"&COLU ...

前辈,谢谢你,函数可以,但是代码的话我是想找出其中的原因在哪里,你能不能按照我那代码的思路,找出问题来,我知道可能勉强了你,但是我真的想的知道这其中的原因,我想了好久还没想出来
回复

使用道具 举报

发表于 2011-12-12 20:16 | 显示全部楼层    本楼为最佳答案   
arr = .Range("b3:e" & .Range("e65536").End(xlUp).Row)
修改为
arr = .Range("b3:b" & .Range("b65536").End(xlUp).Row)
下面2句:
Sheet38.Cells(a + 1, 4).Value = sh.Cells(b, 7).Value
Sheet38.Cells(a + 1, 5).Value = sh.Cells(b, 8).Value
修改为
Sheet38.Cells(a + 2, 4).Value = sh.Cells(b, 7).Value
Sheet38.Cells(a + 2, 5).Value = sh.Cells(b, 8).Value
回复

使用道具 举报

 楼主| 发表于 2011-12-12 20:19 | 显示全部楼层
Zipall 发表于 2011-12-12 20:01
感觉这个用公式更快一些,前提是B列的部门名称和工作表名称对应.
D3输入公式
=SUM(INDIRECT($B3&"!c"&COLU ...

还有就是我的工作汇总表未必是第一张表,所以,因为 其实表有三十多张的,你那代码对很有规律的可行
回复

使用道具 举报

发表于 2011-12-12 20:21 | 显示全部楼层
如果要汇总到第3列和第4列
Sheet38.Cells(a + 2, 3).Value = sh.Cells(b, 7).Value
Sheet38.Cells(a + 2, 4).Value = sh.Cells(b, 8).Value
回复

使用道具 举报

 楼主| 发表于 2011-12-12 21:38 | 显示全部楼层
zgwei050 发表于 2011-12-12 20:16
arr = .Range("b3:e" & .Range("e65536").End(xlUp).Row)
修改为
arr = .Range("b3:b" & .Range("b65536" ...

B换成e就不行了吗?这是因为什么原因呢?
回复

使用道具 举报

发表于 2011-12-12 21:49 | 显示全部楼层
jiangslly 发表于 2011-12-12 21:38
B换成e就不行了吗?这是因为什么原因呢?

前面 .Range("b3:e"   不改还凑合可用,
但后面 .Range("e65536").End(xlUp).Row——代表e列最后有数据行的行号——不是b列数据最后行的行号,非改不可——因为你的数据中,b列和e列数据行数是不相同的(这就是说,如果e列数据行数与b列数据行数相同,也是可用使用的!)
回复

使用道具 举报

 楼主| 发表于 2011-12-12 21:53 | 显示全部楼层
zgwei050 发表于 2011-12-12 21:49
前面 .Range("b3:e"   不改还凑合可用,
但后面 .Range("e65536").End(xlUp).Row——代表e列最后有数据行 ...

原来如此,我还一直在找原因,晕死,谢谢了啊
回复

使用道具 举报

 楼主| 发表于 2011-12-12 21:55 | 显示全部楼层
Zipall 发表于 2011-12-12 20:01
感觉这个用公式更快一些,前提是B列的部门名称和工作表名称对应.
D3输入公式
=SUM(INDIRECT($B3&"!c"&COLU ...

前辈,其实你的答案很好,提供我两种方法,对这个题目的话,我没有办法,呵呵,不要介意啊
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 21:12 , Processed in 0.252815 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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