识别具有 Dr 和 Cr 值混合的列

识别具有 Dr 和 Cr 值混合的列

我有一个 Excel 文件,其中 E 列至 BB 列包含金额值,这些单元格使用自定义格式设置为“0.00”Cr 或“0.00”Dr

我想检查任何给定列是否都具有 Dr 的所有值或所有 Cr 的所有值,或者该列是否包含 Dr 和 Cr 值的混合。

如果不对 E 到 BB 列中的每个列使用单独的辅助列,是否有快速检查方法?如果有帮助,我可以使用单个辅助列,但希望避免每个列都有一个辅助列。宏也可以,但我更喜欢没有宏的解决方案。

例如,单元格 E4 在公式栏中显示值为 24279.97,但实际单元格显示值为 24279.97 Dr,自定义格式为“"0.00" Dr”

在此处输入图片描述

在此处输入图片描述

答案1

在 2016 版本中,用 VBA 编写的 UDF 函数可能效果最好。
正如我之前所写,您需要区分单元格已格式化但不使用该格式的情况,因为它是空的或不包含数字。因此,当您比较格式代码时,您可能会得到与比较单元格显示内容不同的结果。
要比较格式代码,您可以使用以下函数:

  Function CompNFs(x As Range) As String
       ' compares NumberFomats in columns of an x Range
       Dim c As Range, cc As Range, cel As Range
       Dim CountCR As Long, CountDr As Long
       For Each c In x.Rows(1).Cells
          CountDr = 0: CountCR = 0
          Set cc = Intersect(c.EntireColumn, ActiveSheet.UsedRange)
          For Each cel In cc
             If InStr(cel.NumberFormat, "Dr") > 0 Then
                CountDr = CountDr + 1
             ElseIf InStr(cel.NumberFormat, "Cr") > 0 Then
                CountCR = CountCR + 1
             End If
          Next cel
          If CountDr * CountCR > 0 Then CompNFs = CompNFs & _
             Split(c.EntireColumn.Address(0, 0), ":")(0) & ", "
       Next c
       If Len(CompNFs) > 0 Then
          CompNFs = "Columns with mixed formats: " & Left(CompNFs, Len(CompNFs) - 2)
       Else
          CompNFs = "No mixed formats."
       End If
    End Function

比较显示文本的函数看起来完全相似(区别仅在于所使用的属性):

Function CompText(x As Range) As String
       ' compares formatted Output in columns of an x Range
       Dim c As Range, cc As Range, cel As Range
       Dim CountCR As Long, CountDr As Long
       For Each c In x.Rows(1).Cells
          CountDr = 0: CountCR = 0
          Set cc = Intersect(c.EntireColumn, ActiveSheet.UsedRange)
          For Each cel In cc
             If InStr(cel.Text, "Dr") > 0 Then
                CountDr = CountDr + 1
             ElseIf InStr(cel.Text, "Cr") > 0 Then
                CountCR = CountCR + 1
             End If
          Next cel
          If CountDr * CountCR > 0 Then CompText = CompText & _
             Split(c.EntireColumn.Address(0, 0), ":")(0) & ", "
       Next c
       If Len(CompText) > 0 Then
          CompText = "Columns with mixed output: " & Left(CompText, Len(CompText) - 2)
       Else
          CompText = "No mixed ouput."
       End If
    End Function

在工作表中调用该函数时,您指定单行单元格范围。作为响应,该函数将返回使用两个代码的列的列表。将检查指定列中所有使用的单元格。

截图来自波兰语版本的 Excel。 NumberFormat_symbols

相关内容