Excel vba向单元格添加空格以达到一定长度

时间:2016-06-01 15:14:58

标签: excel vba excel-vba

我试图使A1到A6范围内的单元格达到18的长度。

其中的当前值:

A233333
A0399
30000
3993833
11111
22222

请注意,并非单元格中的所有值都具有相同的长度。

我想用空格(“”)填充剩余的长度。所以我编写了以下代码,但它似乎不起作用:

Sub PMAP_BAC_Code()

Dim rCell As Range
Dim rRng As Range
Set rRng = Sheet1.Range("A1:A6")

For Each rCell In rRng.Cells
If Len(xCell) <> 18 Then
    xCell.FormulaR1C1 = " "
End If
Next rCell

End Sub

有人能帮助我吗?

3 个答案:

答案 0 :(得分:4)

为什么不使用Left$("foo" & String$(17," ") ,17)

Sub PMAP_BAC_Code()

    Dim rCell As Range
    Dim rRng As Range
    Set rRng = Sheet1.Range("A1:A6")

    For Each rCell In rRng.Cells
    Const lMY_LENGTH As Long = 18
    If Len(rCell) <> lMY_LENGTH Then
        rCell.Value2 = IIf(IsNumeric(rCell.Value2), "'", "") & Left$(rCell.Value2 & String$(lMY_LENGTH, " "), lMY_LENGTH)
    End If
    Next rCell

End Sub

折叠有关数字的评论反馈,我为数字添加了单引号。关于不排列文本结尾的其他评论仍然是正确的。

答案 1 :(得分:2)

试试这个:

Sub PMAP_BAC_Code()

Dim str As String
Dim wk As Worksheet
Set wk = Sheet1

For i = 1 To 6
    str = wk.Range("A" & i).Value

    Do While Len(str) < 18
    str = str & " "
    Loop

    wk.Range("A" & i) = str
    str = ""

Next i


End Sub

如果col A只有1之类的数字,则上面的代码将转换字符串&#34; 1&#34;到&#34; 1&#34;再次,所以我用来连接NBSP,这是chr(160),它将负责它

Sub PMAP_BAC_Code()

Dim str As String
Dim wk As Worksheet
Set wk = Sheet1

For i = 1 To 6
    str = wk.Range("A" & i).Value

    Do While Len(str) < 18
        str = str & Chr(160)
    Loop

    wk.Range("A" & i) = CStr(str)
    Debug.Print Len(wk.Range("A" & i))
    Debug.Print Len(str)
    str = ""

Next i


End Sub

答案 2 :(得分:2)

不要忘记Format也可用于格式化字符串:

Public Function myFormat(str As String) As String
    myFormat = Format(str, "!" & String(18, "@"))
End Function

编辑:我的功能应用于当前问题:

Sub PMAP_BAC_Code()

    Dim rCell As Range
    Dim rRng As Range
    Set rRng = Sheet1.Range("A1:A6")

    For Each rCell In rRng.Cells
        rCell.NumberFormat = "@"
        rCell.Value = myFormat(rCell.Value)
    Next rCell

End Sub