我需要的是自定义格式,可根据以下规则更改值:
未格式化的数据:
-534
1083
386840/2
12345/10
期望的结果:
000534
001083
38684002
01234510
到目前为止我的目标:
000000; 000000; 0是非常明显的部分,没有" /"无论如何都将被读作数字。如果是一个数字,我会使用[>1000]0
或类似的东西但据我所知,它不能与Text
一起使用。
公式I使用(仅适用于现在)而不是理想的自定义格式:
=IF(ISERROR(FIND("/";A1));
CONCATENATE(REPT("0";6-LEN(A1));A1);
IF((LEN(A1)-FIND("/";A1))=1;
SUBSTITUTE(CONCATENATE(REPT("0";7-FIND("/";A1));A1);"/";"0");
SUBSTITUTE(CONCATENATE(REPT("0";7-FIND("/";A1));A1);"/";"")))
任何人都可以给我一个提示吗?
答案 0 :(得分:1)
以下是使用NumberFormat
完成所需内容的一种方法。适当的数字格式由VBA事件代码生成。
有一个很大的缺点是,对于包含"/"
的每个唯一条目,您将需要不同的数字格式,并且允许的数字格式的数量可能会受到限制。
但是,它不需要辅助列,也不会改变存储在单元格中的原始数据。
A列中输入的任何内容都将根据规则进行格式化。
如果存在斜杠,代码将改变数字部分;但不测试看两者都是数字。所以abc/1
- > abc01
,但如果您愿意,可以更改。
这是工作表代码:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim FormatRange As Range, C As Range
Const Fmt As String = "000000;000000;000000;@"
Dim V As Variant
Set FormatRange = Range("A:A")
If Not Intersect(Target, FormatRange) Is Nothing Then
For Each C In Intersect(Target, FormatRange)
If InStr(C.Text, "/") = 0 Then
C.NumberFormat = Fmt
Else
V = Split(C.Text, "/")
V(0) = Format(V(0), "000000")
V(1) = Format(V(1), "00")
C.NumberFormat = ";;;" & Chr(34) & Join(V, "") & Chr(34)
End If
Next C
End If
End Sub