我试图使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
有人能帮助我吗?
答案 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