【问题标题】:Excel VBA - add zero's inbetween two valuesExcel VBA - 在两个值之间添加零
【发布时间】:2016-07-13 17:51:44
【问题描述】:

我已经为这个做了很多搜索......但我没有找到任何地方。

我有一个电子表格(特定列),其值如下:

42153-95    
54126-3    
13613-6331    
16136-336

我的目标是在 - 之后和现有 # 之前添加零(到 4 个位置)。喜欢:

42153-0095    
54126-0003    
13613-6331    
16136-0336

我在 NumberFormat 的引号中尝试了很多不同的选项:

Worksheets("Sheet1").Columns("C"). _ NumberFormat = "00000-0000"

到目前为止没有运气。 :(

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 这必须是 VBA 吗?你可以用一个公式来做到这一点:=LEFT(A1,6)&TEXT(MID(A1,FIND("-",A1)+1,LEN(A1)),"0000") 然后只需复制 -> 粘贴特殊 -> 值

标签: excel vba


【解决方案1】:
Sub testFunc()

    MsgBox addZero("54126-3")

End Sub

'/ 加零函数

Public Function addZero(strVal As String) As String

    Dim arrTemp
    Dim strTemp

    arrTemp = Split(strVal, "-")

    strTemp = arrTemp(0) & "-" & String(4 - Len(arrTemp(1)), "0") & arrTemp(1)

    addZero = strTemp

End Function

【讨论】:

    【解决方案2】:

    正如@tigeravatar 所说,它可以通过公式来完成。通过 Evaluate 函数,我们可以使用他在评论中给出的公式的数组形式。

    您可以将此应用于 C 列中的值:

    Worksheets("Sheet1").Range("C1:C4").Value = Worksheets("Sheet1").Evaluate("=INDEX(LEFT(C1:C4,6) & TEXT(--MID(C1:C4,7,LEN(C1:C4)),""0000""),)")
    

    如果您的范围是动态的,并且您在 lstrow 这样的变量中有最后一行,您可以将所有 C4 替换为 C" & lstrow & "

    Worksheets("Sheet1").Range("C1:C" & lstrow).Value = Worksheets("Sheet1").Evaluate("=INDEX(LEFT(C1:C" & lstrow & ",6) & TEXT(--MID(C1:C" & lstrow & ",7,LEN(C1:C" & lstrow & ")),""0000""),)")
    

    【讨论】:

      【解决方案3】:

      选择您要处理并运行的单元格:

      Sub dural()
          Dim r As Range
      
          bry = Array("0000", "000", "00", "0", "")
          For Each r In Selection
              ary = Split(r.Value, "-")
              ary(1) = bry(Len(ary(1))) & ary(1)
              r.Value = Join(ary, "-")
          Next r
      End Sub
      

      之前:

      之后:

      【讨论】:

      • 到目前为止,我最喜欢您的解决方案,但是它很常见。它似乎工作了一半......然后在这条线上不断死亡:ary(1) = bry(Len(ary(1))) & ary(1) 有趣的是,当它爆炸时,如果我点击停止调试,然后再试一次,它会暂时起作用,然后很快就会出现同样的错误。
      • 数据后面必须有破折号和零到四个字符
      • 炸毁上544117-30 porttion这个数据:454117-0120 454117-0070 454117-0040 454117-0020 454117-30 454107-010 454117-080 454107-020 454868-020 454868-050
      • 所有在同一列的单元格中。前 4 次成功,第 5 次停止
      猜你喜欢
      • 2017-04-10
      • 1970-01-01
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多