VBA在Excel中的应用非常灵活,可以满足常用函数不可实现的功能,其强大的功能使我们的工作变得非常轻松!
本文,我们来学习一例,如何应用VBA批量修改诸如考号、编号、身份证号等数字号码的批量修改!
请认真看下图,在A列,存在数据量非常多的一大堆编号!
上表,每个号码的长度共有11位,现在,我们要做的就是,每个号码前面的9位保持不变,后面的三位分别依次变为001、002、003等,我们该如何做呢?
也许部分网友可能会提出这样的解决方案,即,将前面两个的后三位变为001、002,之后使用填充功能不就行了吗?
这就犯了“兵家”大忌了,由于这些号码前九位不是连续的,使用填充功能将会改变前面九位的号码,就失去原来的意义了,所以,使用填充功能是不可能实现的,要不,本例就没有任何意义了!
针对诸如此类的问题,使用VBA最适合不过了!
以下为实现的方法!
首先,执行“视图”→“工具栏”→“控件工具箱”;弹出控件工具箱!
如上图,在Excel窗口中拖出一个按钮控件!
之后右键点击按钮控件,执行“属性”;
如上图,在相应位置修改按钮上面的文字为“批量修改”!
最后,左键双击按钮,打开按钮的“Microsoft Visual Basic”VBA代码编写窗口,在窗口中输入如下图的代码即可!
代码输好之后,点击“Microsoft Visual Basic”窗口的运行按钮即可!
返回到Excel窗口,点击按钮,即可实现命题想要的结果!
为方便大家的学习,下面贴出源代码:
'以下为代码开始
StartScanNum = 1 '扫描范围起始值
EndScanNum = 50 '扫描范围终止值
MyNum = "" '替换字符串
AddNum = 0 '自增量!
For m = StartScanNum To EndScanNum
'按顺序检查A列号码
If Len(Worksheets(1).Cells(m, 1).Value) <> 0 Then '号码不为空
MyNum = Left(Trim(Worksheets(1).Cells(m, 1).Value), 8) '截取前面8个号码
AddNum = AddNum + 1 '自增量加1
If Len(AddNum) = 1 Then '不足十位的以两个0填充
MyNum = MyNum + "00" + Trim(AddNum)
End If
If Len(AddNum) = 2 Then '不足百位的以一个0填充
MyNum = MyNum + "0" + Trim(AddNum)
End If
Worksheets(1).Cells(m, 2).Value = MyNum '将截取并修改好的号码赋值给原来的单元格
End If
Next
'代码结束
知识扩展:
以上实现的功能是修改后三位的编号为001、002、……,仅作学习之用,如果您的需求并非如此,请适当修改相应代码即可实现!或者,有啥需求,请联系站长!