Excel精英培训网

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

[已解决]修改代码 在行空白单元格里添加数字

[复制链接]
发表于 2013-12-7 00:30 | 显示全部楼层 |阅读模式
本帖最后由 ymq123 于 2013-12-7 13:35 编辑

1、  表1、表2中每行有7个数字,还有3个空格,分别在每行空格里添加上该空格对应的1个数字,使每行变为8个数字.,把表1数字添加后放到表3里、把表2数字添加后放到表4里。
2、  如下表: 表1第一行里空格对应的数字是1、9、10,表2第一行里空格对应的数字是1、4、9.有颜色单元格是空格,红字是对应单元格的数字。
表1 表2
1
2
3
4
5
6
7
8
9
10
 
1
2
3
4
5
6
7
8
9
10

3、  数字添加后如表3和表4,两表黑斜体字是在每行第一个空格添加数字、红色字是在每行第二个空格里添加数字、粗黑体字是在每行第三个空格里添加数字。

我编写的代码太慢,请您修改。谢谢

最佳答案
2013-12-7 12:37
  1. Option Base 1
  2. Function 组合数据(sRng As Range, tRng As Range)
  3.     Dim x%, y%, i%, m%, n%
  4.     Dim sArr(), tArr()
  5.     sArr = sRng
  6.     For y = 1 To 3
  7.         For x = 1 To UBound(sArr, 1)
  8.             For m = y To y + 7
  9.                 If sArr(x, m) = "" Then
  10.                     n = n + 1
  11.                     ReDim Preserve tArr(1 To 10, 1 To n)
  12.                     For i = 1 To 10
  13.                         If i = m Then tArr(i, n) = m Else tArr(i, n) = sArr(x, i)
  14.                     Next i
  15.                     Exit For
  16.                 End If
  17.             Next m
  18.         Next x
  19.     Next y
  20.     tRng.Resize(n, 10) = Application.Transpose(tArr)
  21.     'sRng.Copy
  22.     'tRng.Resize(n, 10).PasteSpecial Paste:=xlPasteFormats
  23. End Function
  24. Sub 生成数据()
  25.     tms = Timer
  26.     Range("Y2:AS6000").Clear
  27.     组合数据 Range(Cells(2, 1), Cells(17, 10)), Range("Y2")
  28.     组合数据 Range(Cells(2, 12), Cells(17, 21)), Range("AJ2")
  29.     MsgBox Format(Timer - tms, "0.000s ")
  30. End Sub
复制代码
我电脑上0.066秒

修改代码 在行空白单元格里添加数字.rar

17.57 KB, 下载次数: 15

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

使用道具 举报

发表于 2013-12-7 10:02 | 显示全部楼层
其实用数组直接就行了,数据不多,这个速度要求意义不大。
回复

使用道具 举报

 楼主| 发表于 2013-12-7 11:19 | 显示全部楼层
hwc2ycy 发表于 2013-12-7 10:02
其实用数组直接就行了,数据不多,这个速度要求意义不大。

老师你好,不需要保留格式,数据很多,越快越好,请帮助修改。谢谢
回复

使用道具 举报

发表于 2013-12-7 11:31 | 显示全部楼层
ymq123 发表于 2013-12-7 11:19
老师你好,不需要保留格式,数据很多,越快越好,请帮助修改。谢谢

直接用数组取巧,1-10直接填。
如果你要设置填入了数字的单元格的格式,那就得多写点代码才成。
  1. Sub test()
  2.     Dim arr1, arr2
  3.     arr1 = Range("a2:j17").Value
  4.     Dim i As Byte, j As Byte
  5.     For i = LBound(arr1) To UBound(arr1)
  6.         For j = LBound(arr1, 2) To UBound(arr1, 2)
  7.             arr1(i, j) = j
  8.         Next
  9.     Next
  10.     Range("y2").Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1
  11.     Range("aj2").Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1
  12. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-12-7 12:09 | 显示全部楼层
hwc2ycy 发表于 2013-12-7 11:31
直接用数组取巧,1-10直接填。
如果你要设置填入了数字的单元格的格式,那就得多写点代码才成。

老师你好:1、每行只添加一个数字,添加后每行只是8个数字,附件表3表4添加后结果,每行三个空格用不同的颜色标出来了
                2、表1数字添加后结果在表3表2添加后结果在表4
谢谢!
                 

修改代码 在行空白单元格里添加数字.rar

17.63 KB, 下载次数: 1

回复

使用道具 举报

发表于 2013-12-7 12:37 | 显示全部楼层    本楼为最佳答案   
  1. Option Base 1
  2. Function 组合数据(sRng As Range, tRng As Range)
  3.     Dim x%, y%, i%, m%, n%
  4.     Dim sArr(), tArr()
  5.     sArr = sRng
  6.     For y = 1 To 3
  7.         For x = 1 To UBound(sArr, 1)
  8.             For m = y To y + 7
  9.                 If sArr(x, m) = "" Then
  10.                     n = n + 1
  11.                     ReDim Preserve tArr(1 To 10, 1 To n)
  12.                     For i = 1 To 10
  13.                         If i = m Then tArr(i, n) = m Else tArr(i, n) = sArr(x, i)
  14.                     Next i
  15.                     Exit For
  16.                 End If
  17.             Next m
  18.         Next x
  19.     Next y
  20.     tRng.Resize(n, 10) = Application.Transpose(tArr)
  21.     'sRng.Copy
  22.     'tRng.Resize(n, 10).PasteSpecial Paste:=xlPasteFormats
  23. End Function
  24. Sub 生成数据()
  25.     tms = Timer
  26.     Range("Y2:AS6000").Clear
  27.     组合数据 Range(Cells(2, 1), Cells(17, 10)), Range("Y2")
  28.     组合数据 Range(Cells(2, 12), Cells(17, 21)), Range("AJ2")
  29.     MsgBox Format(Timer - tms, "0.000s ")
  30. End Sub
复制代码
我电脑上0.066秒

修改代码 在行空白单元格里添加数字.zip

54.18 KB, 下载次数: 3

评分

参与人数 1 +3 收起 理由
ymq123 + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-12-7 13:34 | 显示全部楼层
轩辕轼轲 发表于 2013-12-7 12:37
我电脑上0.066秒

请教下面两个问题:
1、Option Base 1   有什么作用?
2、在[模块1(代码)]与在[sheet1(代码)]中编代码有什么区别吗?
谢谢
回复

使用道具 举报

 楼主| 发表于 2013-12-7 13:40 | 显示全部楼层
ymq123 发表于 2013-12-7 13:34
请教下面两个问题:
1、Option Base 1   有什么作用?
2、在[模块1(代码)]与在[sheet1(代码)]中编代 ...

还有个问题需请教:
sArr = sRng 有什么作用?
谢谢!

点评

sRng 是你需要处理的数据区域 这句的意思是将数据区域内的数值赋值给数组sArr  发表于 2013-12-9 09:08
回复

使用道具 举报

发表于 2013-12-9 09:08 | 显示全部楼层
ymq123 发表于 2013-12-7 13:34
请教下面两个问题:
1、Option Base 1   有什么作用?
2、在[模块1(代码)]与在[sheet1(代码)]中编代 ...

1、VBE里面默认数组下标是从0开始的,Option Base 1的作用是强制数组下标从1开始;
2、代码放在sheet1里面也可以,没什么区别,我比较习惯放在标准模块里面。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 17:11 , Processed in 0.316718 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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