Excel自定义格式检查字符

我需要的是自定义格式来更改值,根据这些规则:

  1. 如果“/”不存在且数字长度小于6,则开始加零。
  2. 如果“/”存在且“/”之前的数字长度小于6,则开始加零。
  3. 如果“/”存在,并且“/”之后的数字长度为1,则在最后一个字符之前加零。
  4. 如果“/”存在,并且“/”之后的数字长度是2,则保持原样。
  5. 带“/”string的总长度是8,没有它 – 6

未格式化的数据:

-534 1083 386840/2 12345/10 

预期结果:

 000534 001083 38684002 01234510 

我到目前为止:
000000; 000000; 0是相当明显的部分,没有“/”的值将被作为数字读取。 如果它是一个数字,我会使用[>1000]0或类似的东西,但它不能用于Text据我所知。
公式我正在使用(只是现在),而不是所需的自定义格式:

 =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);"/";""))) 

任何人都可以给我一个提示吗?

这是使用NumberFormat完成你想要的一种方法。 适当的数字格式由VBA事件代码生成。

有一个很大的缺点,就是每个包含"/"唯一条目需要不同的数字格式,并且允许的数字格式数量可能是有限制的。

但是,它不需要帮助列,也不会更改存储在单元格中的原始数据。

列A中input的内容将根据规则进行格式化。 如果斜线存在,代码将改变数字部分; 但不testing看到两者都是数字。 所以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