ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1678|回复: 4

请守柔版主帮忙优化代码!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-8-5 11:24 | 显示全部楼层 |阅读模式

要将表1的数据转换为表三的数据。所编代码如下,可运行时总不能达到预期效果,请帮忙修正。图表见附件。

Dim j As Integer Dim K As Integer Dim L As Integer Sub 转换数据() Application.ScreenUpdating = False '关闭执行程序时发生的屏幕更新,加快运行速度。 Sheets("Sheet1").Select iCount = Sheets("Sheet1").[A1].CurrentRegion.Rows.Count For j = 1 To iCount Rows(j).Select Sheets("Sheet3").Cells(1, 1) = Cells(j, 1) Sheets("Sheet3").Cells(1, 2) = Cells(j, 2) Sheets("Sheet3").Cells(1, 3) = Cells(j, 3) Sheets("Sheet3").Cells(1, 4) = Cells(j, 4) Sheets("Sheet3").Cells(1, 5) = Cells(j + 1, 1) Sheets("Sheet3").Cells(1, 6) = Cells(j + 1, 2) Sheets("Sheet3").Cells(1, 7) = Cells(j + 1, 3) Sheets("Sheet3").Cells(1, 8) = Cells(j + 1, 4) Sheets("Sheet3").Cells(1, 9) = Cells(j + 2, 1) Sheets("Sheet3").Cells(1, 10) = Cells(j + 2, 2) Sheets("Sheet3").Cells(1, 11) = Cells(j + 2, 3) Sheets("Sheet3").Cells(1, 12) = Cells(j + 2, 4) Sheets("Sheet3").Select L = WorksheetFunction.Count(Range("A1:A1000")) '假设转换后数据行数为1000,该值可变化。 Range(Cells(1, 1), Cells(1, 12)).Copy Cells(L + 1, 1).Select ActiveSheet.Paste Range("A1:L1").Select Application.CutCopyMode = False Selection.ClearContents Sheets("Sheet1").Select j = j + 3 Next j Sheets("Sheet3").Select Range("A1").Select End Sub

CyE7Dqwf.rar (7.15 KB, 下载次数: 17)

TA的精华主题

TA的得分主题

发表于 2005-8-5 12:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我简单地做了一下,请楼主运行一下,有问题,再交流: Option Explicit Sub Example() Dim MyRange As Range, I As Range, aRange As Range, EndRow As Long Application.ScreenUpdating = False With Sheets("Sheet1") '定义一个RANGE对象,从A2到A列最后一个数据单元格区域 Set MyRange = .Range("A2:" & .[A65536].End(xlUp).Address) '在指定RANGE对象中循环 For Each I In MyRange '定义一个Range对象 Set aRange = .Range(I, I.Offset(, 4)) With Sheets("Sheet3") If I.Row Mod 3 = 2 Then '取得目标工作表的最后一个数据单元格的下一个单元格(空白)行号 EndRow = .[A65536].End(xlUp).Offset(1, 0).Row '指定区域数值 .Range("A" & EndRow & ":" & "D" & EndRow).Value = aRange.Value ElseIf I.Row Mod 3 = 0 Then EndRow = .[E65536].End(xlUp).Offset(1, 0).Row .Range("E" & EndRow & ":" & "H" & EndRow).Value = aRange.Value Else EndRow = .[I65536].End(xlUp).Offset(1, 0).Row .Range("I" & EndRow & ":" & "L" & EndRow).Value = aRange.Value End If End With Next End With Application.ScreenUpdating = True End Sub '----------------------

[此贴子已经被作者于2005-8-5 12:09:20编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-8-5 16:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢,但不知自己写的代码错在哪里,还望指教。

TA的精华主题

TA的得分主题

发表于 2005-8-5 16:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

请楼主帮我解释一下这些代码的意义:

L = WorksheetFunction.Count(Range("A1:A1000")) Range(Cells(1, 1), Cells(1, 12)).Copy Cells(L + 1, 1).Select ActiveSheet.Paste Range("A1:L1").Select Application.CutCopyMode = False Selection.ClearContents Sheets("Sheet1").Select

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-8-6 12:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

计算表3中单元格A1:A1000中非空单元格的数量

L = WorksheetFunction.Count(Range("A1:A1000"))

选择并复制A1:A12区域 Range(Cells(1, 1), Cells(1, 12)).Copy 选择Cells(L + 1, 1).单元格,粘贴

Cells(L + 1, 1).Select ActiveSheet.Paste

清除A1:L1单元格内容 Range("A1:L1").Select Application.CutCopyMode = False Selection.ClearContents Sheets("Sheet1").Select

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 12:27 , Processed in 0.031601 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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