Excel精英培训网

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

[已解决]Cells(3 * i - 6, 1))什么意思啊 多谢

[复制链接]
发表于 2009-12-26 22:10 | 显示全部楼层 |阅读模式

Cells(3 * i - 6, 1))什么意思A  “多谢

  i = 3 是定义的哪个变量啊?

For i = 3 To endrow
Worksheets(1).Range("2:2").Copy (Worksheets(2).Cells(3 * i - 7, 1))  '把每条数据抬头贴过去
Worksheets(1).Range(Cells(i, 1), Cells(i, 256)).Copy (Worksheets(2).Cells(3 * i - 6, 1))  '把数据贴过去
Next i

最佳答案
2009-12-26 23:19

没有大错,但有些小问题:

1、没有申明变量,最前面最好加下个:

Dim i%, endrow%
endrow = Sheet1.[a65536].End(xlUp).Row

2、没有清除二表的数据:

接着上面加一个

Sheet2.Cells.ClearContents

3、如果运行程序时,如果激活工作表不是表一,就会出错:

Worksheets(1).Range("2:2").Copy (Worksheets(2).Cells(3 * i - 7, 1))  '把每条数据抬头贴过去
Worksheets(1).Range(sheet1.Cells(i, 1), sheet1.Cells(i, 256)).Copy (Worksheets(2).Cells(3 * i - 6, 1))  '把数据贴过去

4、用copy不如直接取值

如果按这个思路,比较完整一点的代码:

Sub a()
Dim i%, endrow%
endrow = Sheet1.[a65536].End(xlUp).Row
Sheet2.Cells.ClearContents
For i = 3 To endrow
    Worksheets(1).Range("2:2").Copy (Worksheets(2).Cells(3 * i - 7, 1))  '把每条数据抬头贴过去
    Worksheets(1).Range(Sheet1.Cells(i, 1), Sheet1.Cells(i, 256)).Copy (Worksheets(2).Cells(3 * i - 6, 1))  '把数据贴过去
Next i

End Sub

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

Cells(3 * i - 6, 1))第一次表示a3,以后递增3行,即a6,a9依次类推
回复

使用道具 举报

 楼主| 发表于 2009-12-26 23:04 | 显示全部楼层

请问 那这段代码错误的地方是什么啊?我怎么运行不出来结果呢 非常感谢哦
回复

使用道具 举报

 楼主| 发表于 2009-12-26 23:11 | 显示全部楼层

For i = 9 To endrow

Worksheets(1).Range("1:1").Copy (Worksheets(2).Cells(1, 1))           '把标题贴过去
Worksheets(1).Range("2:2").Copy (Worksheets(2).Cells(3 * i - 3, 1))  '把每条数据抬头贴过去
Worksheets(1).Range(Cells(i, 1), Cells(i, 256)).Copy (Worksheets(2).Cells(3 * i - 6, 1))  '把数据贴过去
Next i

End Sub

回复

使用道具 举报

发表于 2009-12-26 23:19 | 显示全部楼层    本楼为最佳答案   

没有大错,但有些小问题:

1、没有申明变量,最前面最好加下个:

Dim i%, endrow%
endrow = Sheet1.[a65536].End(xlUp).Row

2、没有清除二表的数据:

接着上面加一个

Sheet2.Cells.ClearContents

3、如果运行程序时,如果激活工作表不是表一,就会出错:

Worksheets(1).Range("2:2").Copy (Worksheets(2).Cells(3 * i - 7, 1))  '把每条数据抬头贴过去
Worksheets(1).Range(sheet1.Cells(i, 1), sheet1.Cells(i, 256)).Copy (Worksheets(2).Cells(3 * i - 6, 1))  '把数据贴过去

4、用copy不如直接取值

如果按这个思路,比较完整一点的代码:

Sub a()
Dim i%, endrow%
endrow = Sheet1.[a65536].End(xlUp).Row
Sheet2.Cells.ClearContents
For i = 3 To endrow
    Worksheets(1).Range("2:2").Copy (Worksheets(2).Cells(3 * i - 7, 1))  '把每条数据抬头贴过去
    Worksheets(1).Range(Sheet1.Cells(i, 1), Sheet1.Cells(i, 256)).Copy (Worksheets(2).Cells(3 * i - 6, 1))  '把数据贴过去
Next i

End Sub

回复

使用道具 举报

 楼主| 发表于 2009-12-26 23:40 | 显示全部楼层

太感谢了

我整个的代码是

Sub MakeSalaryList()
Dim i As Integer
Dim endrow As Integer

endrow = Sheet1.Range("a65536").End(xlUp).Row - 1                       '测出数据的最后一行

Worksheets(1).Range("1:1").Copy (Worksheets(2).Cells(1, 1))           '把标题贴过去
For i = 3 To endrow
Worksheets(1).Range("2:2").Copy (Worksheets(2).Cells(3 * i - 7, 1))  '把每条数据抬头贴过去
Worksheets(1).Range(Cells(i, 1), Cells(i, 256)).Copy (Worksheets(2).Cells(3 * i - 6, 1))  '把数据贴过去
Next i

End Sub
 

您看还有什么问题啊?非常感谢

回复

使用道具 举报

 楼主| 发表于 2009-12-26 23:44 | 显示全部楼层

您刚才提供的代码程序很好,我刚试过 ,太谢谢了 ,请问如果按我开始的思路,除了您说的外,其它没可改的吗?可否发个完整的啊?[em04]
回复

使用道具 举报

发表于 2009-12-27 03:56 | 显示全部楼层

路过,学习,看看
回复

使用道具 举报

发表于 2009-12-27 08:06 | 显示全部楼层

请别人测试代码的时候最好将附件发上来。
回复

使用道具 举报

发表于 2014-7-9 08:30 | 显示全部楼层
感谢分享
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 06:00 , Processed in 0.287980 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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