首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel宏用于引导变化条件的零

Excel宏用于引导变化条件的零
EN

Stack Overflow用户
提问于 2014-08-06 23:34:31
回答 2查看 5.7K关注 0票数 0

我正在开发一个宏,以自动化将大量(数千) excel工作簿准备成标准格式以导入数据库的过程。

一个问题是向某些数字/字母组合中添加前导零。

目前我有一个临时解决方案,但它的一个关键错误是它需要用户通过对话框输入来处理这个过程。我的目标是最终以vbs的形式从命令行运行这个宏。

在我看来,我所拥有的条件是相当普通的,但我很困惑如何创建宏代码来处理它。在导入工作流期间,它可能在Access中得到更好的实现。然而,将excel文件以适当的格式保存是额外的好处,也是我决定追求宏解决方案的原因。

有两列需要操作,这两列都由宏设置为文本格式。

A列是一个建筑物号,需要长度为4位数。目前,它们的格式没有前导零。有些建筑物的数字后面有一个字母或组合字母。

一些例子:7763991010

一些带字母的:76A93B812W

有几个人比较古怪:76A-G812A-S

这些需要重新格式化,使其具有前导零,例如:0076A-G00071000A等。

B栏是一个文件编号,在性质上与A栏几乎相同,但附加详细信息:76-X-00176A-X-02376A-X-R-005。这些需要成为0076-X-001等。只有前面的数字'-‘需要前导零,也是4位的长度。

目前,我正在使用宏开头的两个用户输入框来设置函数#和前导零的变量,而不是使用查找和替换来对这两列执行更新。这很好,但必须对文件中的每个数字运行。大多数文件只有一个或两个数字,但有些文件有4-5号。这也意味着我不能自动化整个过程,需要有人坐下来为每个文件手动运行宏。

有人愿意给我指出一个自动化解决方案的方向吗?我看了其他领先的零解,但它们似乎都是针对数字的情况。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-08 05:01:40

我现在有解决办法了。特别感谢Teeroy。

代码语言:javascript
复制
Sub Change_Number_Format_In_String()
Dim iFirstLetterPosition As Integer
Dim sTemp As String
For Each c In Range("A2:A100")
   If Len(c) > 0 Then
    iFirstLetterPosition = Evaluate("=MATCH(TRUE,NOT(ISNUMBER(1*MID(" & c.Address & ",ROW($1:$20),1))),0)")
    sTemp = Left(c, iFirstLetterPosition - 1) 'get the leading numbers
    sTemp = Format(sTemp, "0000") 'format the numbers
    sTemp = sTemp & Mid(c, iFirstLetterPosition, Len(c)) 'concatenate the remainder of the string
    c.NumberFormat = "@"
    c.Value = sTemp
End If
Next
End Sub
票数 1
EN

Stack Overflow用户

发布于 2017-09-05 11:14:35

A栏

代码语言:javascript
复制
=RIGHT("0000"&A1,4)

B栏

代码语言:javascript
复制
=RIGHT("0000"&LEFT(B1,FIND("-",B1,1)),5)&MID(B1,FIND("-",B1,1)+1,LEN(B1))

在整个范围内都要这样做:

代码语言:javascript
复制
Sub TestFormatNumbers()
    Dim wsMaster As Worksheet
    Dim rgCellsToFormat As Range

    Set wsMaster = ActiveSheet
    Set rgCellsToFormat = wsMaster.Range("A1:A100")

    With rgCellsToFormat
        .NumberFormat = "@"
        .Value = Evaluate("=IF(ISTEXT(" & _
            .Address & "),RIGHT(""0000""&LEFT(" & _
            .Address & ",FIND(""-""," & .Address & ",1)),5)&RIGHT(" & _
            .Address & ",LEN(" & .Address & ")-FIND(""-""," & _
            .Address & ",1)),"""")")
    End With
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25171986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档