基于上一个单元格中的数据的Excel VBA前导零

时间:2018-09-20 17:35:29

标签: excel vba excel-vba

我有一个Excel vba公式,该公式从数据库连接中提取数据,并在工作表中填写数据。这部分效果很好!

不过,我需要的是一列(E)作为字母数字指示符,它基于单元格中向左(D)的数据。例;如果是D=1-9然后E=1D=10-99然后E=01D=100-999然后E=001

我发现Sumit Bansal的一段代码似乎应该起作用。

Function AddLeadingZeroes(ref As Range, Length As Integer)

    Dim i As Integer
    Dim Result As String
    Dim StrLen As Integer

    StrLen = Len(ref)

    For i = 1 To Length
        If i <= StrLen Then
            Result = Result & Mid(ref, i, 1)
        Else
            Result = "0" & Result
        End If
    Next i

    AddLeadingZeroes = Result

End Function

这里是数据转储到工作表的一部分,我以为某种方式我认为是错误的,我也尝试了类型不匹配尝试1也没有引号。没事了

.Cells(intRow, 1).Value = "LockerTag.lwl"
.Cells(intRow, 2).Value = "3"
.Cells(intRow, 3).Value = rs("ID")
.Cells(intRow, 4).Value = rs("UnitQty")
.Cells(intRow, 5).Value = AddLeadingZeroes("1", StrLen(CStr(rs("UnitQty"))))
.Cells(intRow, 6).Value = rs("ID")

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

数字Log10(0-9、10-99等)给出前导零的数量。

Option Explicit

Sub test()
Debug.Print Log10(1)
Debug.Print Log10(10)
Debug.Print Log10(100)
Debug.Print Log10(1000)
End Sub

Private Function Log10(x)
Log10 = Log(x) / Log(10#)
End Function

输出:

0

1

2

3

答案 1 :(得分:0)

JNevill的建议非常有效。

转储函数并交换

.Cells(intRow, 5).Value = AddLeadingZeroes("1", StrLen(CStr(rs("UnitQty"))))

.Cells(intRow, 5).Value = String(Len(rs("UnitQty"))-1, "0") & "1"

非常感谢大家!