Excel精英培训网

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

[已解决]麻烦解释下代码?

[复制链接]
发表于 2013-6-28 11:32 | 显示全部楼层 |阅读模式
本帖最后由 sdada 于 2013-6-28 14:13 编辑

Sub suaa()
i = Range("A65536").End(xlUp).Row
Set m = Range("B65536").End(xlUp)
ReDim arr(1 To (i - m.Row), 1 To 1)
k = Left(m.Value, 4)
a = Mid(m.Value, 5, Len(m.Value) - 5)
L = Len(a)
a = a + 1
For j = 1 To i - m.Row
    n = n + 1
    If n > 3 Then
        n = 1
        a = a + 1
    End If
    If Len(a) < L Then
        For x = 1 To L - Len(a)
            a = "0" & a
        Next
    End If
    arr(j, 1) = k & a & n
Next
m.Offset(1, 0).Resize(j - 1, 1) = arr
End Sub
最佳答案
2013-6-28 14:07
你要看你的工作表的情况,前面补0为了好看。
保证号码对齐而已。

你要根据工作簿来看,离了了工作表的实际情况去想代码做什么是没有意义的。
  1.         If Len(a) < L Then
  2.             For X = 1 To L - Len(a)
  3.                 a = "0" & a
  4.             Next
复制代码
这里有长度差,所以给补上等差位的0
发表于 2013-6-28 12:33 | 显示全部楼层
  1. Sub suaa()
  2.     '取A列最后数据所在行
  3.     i = Range("A65536").End(xlUp).Row
  4.     m为B列最后数据所在单元格引用
  5.     Set m = Range("B65536").End(xlUp)
  6.     '重新定义动态数组,第一维为A列与B列数据数量之差
  7.     '这里有BUG,万一B列数据比A列多
  8.     ReDim Arr(1 To (i - m.Row), 1 To 1)
  9.     '取M单格的值的左4位
  10.     k = Left(m.Value, 4)
  11.     '取M单元格值的第5位开始直接结束
  12.     a = Mid(m.Value, 5, Len(m.Value) - 5)
  13.     '长度
  14.     L = Len(a)
  15.     'a自加1,
  16.     a = a + 1
  17.     For j = 1 To i - m.Row
  18.         n = n + 1
  19.         '设置有可能是3位一组的意思了。
  20.         If n > 3 Then
  21.             n = 1
  22.             a = a + 1
  23.         End If
  24.         '这里是在前面补0,
  25.         If Len(a) < L Then
  26.             For X = 1 To L - Len(a)
  27.                 a = "0" & a
  28.             Next
  29.         End If
  30.         '实际上就是 m & n 的
  31.         Arr(j, 1) = k & a & n
  32.     Next
  33.     在B列最后单元格后下一行写入结果
  34.     m.Offset(1, 0).Resize(j - 1, 1) = Arr
  35. End Sub
复制代码
回复

使用道具 举报

发表于 2013-6-28 12:34 | 显示全部楼层
最好是单步一次,观察变量,就明白了。
回复

使用道具 举报

 楼主| 发表于 2013-6-28 12:58 | 显示全部楼层
hwc2ycy 发表于 2013-6-28 12:34
最好是单步一次,观察变量,就明白了。

a = "0" & a
加个0是什么意思?

回复

使用道具 举报

发表于 2013-6-28 13:52 | 显示全部楼层
sdada 发表于 2013-6-28 12:58
a = "0" & a
加个0是什么意思?

前面补0对齐。
回复

使用道具 举报

发表于 2013-6-28 13:56 | 显示全部楼层
a = "0" & a
如果是a=a&"0"那就是后面补0。
回复

使用道具 举报

 楼主| 发表于 2013-6-28 14:04 | 显示全部楼层
hwc2ycy 发表于 2013-6-28 13:52
前面补0对齐。

为什么前面补0对齐,还是不懂?
回复

使用道具 举报

发表于 2013-6-28 14:07 | 显示全部楼层    本楼为最佳答案   
你要看你的工作表的情况,前面补0为了好看。
保证号码对齐而已。

你要根据工作簿来看,离了了工作表的实际情况去想代码做什么是没有意义的。
  1.         If Len(a) < L Then
  2.             For X = 1 To L - Len(a)
  3.                 a = "0" & a
  4.             Next
复制代码
这里有长度差,所以给补上等差位的0
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 09:03 , Processed in 0.329920 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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