字符的Excel自定义格式检查

字符的Excel自定义格式检查,excel,format,Excel,Format,我需要的是根据以下规则更改值的自定义格式: 如果缺少“/”且数字的长度小于6,则将零添加到 开始 如果存在“/”且“/”之前的数字长度小于6,则添加 零开始 如果存在“/”,且“/”后的数字长度为1,则添加零 在最后一个字符之前 如果存在“/”,且“/”后的数字长度为2,则保持不变 是 带“/”的字符串的总长度为8,不带“/”的字符串的总长度为-6 未格式化数据: -534 1083 386840/2 12345/10 000534 001083 38684002

我需要的是根据以下规则更改值的自定义格式:

  • 如果缺少“/”且数字的长度小于6,则将零添加到 开始
  • 如果存在“/”且“/”之前的数字长度小于6,则添加 零开始
  • 如果存在“/”,且“/”后的数字长度为1,则添加零 在最后一个字符之前
  • 如果存在“/”,且“/”后的数字长度为2,则保持不变 是
  • 带“/”的字符串的总长度为8,不带“/”的字符串的总长度为-6
  • 未格式化数据:

    -534  
    1083  
    386840/2  
    12345/10  
    
    000534  
    001083  
    38684002  
    01234510  
    
    所需结果:

    -534  
    1083  
    386840/2  
    12345/10  
    
    000534  
    001083  
    38684002  
    01234510  
    
    到目前为止我的想法:
    000000;000000;0是非常明显的部分,不带“/”的值无论如何都将被读取为数字。如果它是一个数字,我会使用
    [>1000]0
    或类似的东西,但据我所知,它不适用于
    文本。
    我正在使用的公式(就目前而言)而不是理想的自定义格式:


    有人能给我一个提示吗?

    这里有一种方法可以使用
    NumberFormat
    实现您想要的功能。VBA事件代码生成适当的数字格式

    有一个很大的缺点是,对于每个包含
    “/”
    的唯一条目,您将需要不同的数字格式,并且允许的数字格式的数量可能会受到限制

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

    在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
    

    您不能要求数字格式检查您的数字。因此,在提交数字格式之前,必须将40/2转换为4002,将5/10转换为510。你应该可以用一个helper列(你可以隐藏它),但如果不可能的话,你唯一的办法就是VBA。@Variatus不能这样做,这就是为什么要使用数字格式,否则我会使用公式。你必须告诉我更多。是否允许更改所在列中的数据?只是忘了用数字格式。必须找到其他解决方案。Excel中的数字格式仅影响数字。它们不能用于更改文本的表示方式。@RonRosenfeld这可能不是可靠的来源,但它表明,文本的表示方式可以更改,尽管没有任何示例。遗憾的是,如果没有宏,这是无法完成的,尽管它看起来像我需要的东西。忘了我实际上可以将字符串分成两部分并连接起来,非常感谢,我明天会仔细查看。不需要检查字符串的部分是否为数字,每次都是100%的数字,忘了提及。@AntiDrondert使代码更简单。此方法的主要警告是,工作簿仅限于具有64000种独特的单元格格式/单元格样式。用“format”替换该值会更健壮,但会阻止在没有辅助列的情况下保留原始数据。至于值,我很确定其他人将来可能需要原始数据。