单元格字符计数公式?

时间:2018-12-06 21:44:14

标签: excel excel-formula

我需要一个公式,该公式可以计算一个单元格中字符的总数,但也可以计算出现该字符数的次数。

例如在A列中:

10个单元格的范围,其中包含201、202、203、204、205、1001、1002、1003、1004、1005。

有5个单元格的3个字符和5个单元格的4个字符。

此公式将是什么?不知道在每个单元格中要计算多少个字符方面我需要提高多少,但我希望以后在公式中可以轻松进行编辑。

4 个答案:

答案 0 :(得分:2)

A 列中有数据,在 B1 中输入:

=SUMPRODUCT(--(LEN(A:A)=ROW()))

并向下复制:

enter image description here

答案 1 :(得分:1)

添加具有公式=len(A1)的帮助列,并将其复制到A列。 然后,您可以获取不同值3,4,5 ...和countif(B:B,C1)的列表,这将为您提供长度为3的值的计数。enter image description here

答案 2 :(得分:0)

关于字符数,请在=len(cell)中使用另一列。

然后创建一个动态表,在其中将len列放在表的左侧,再将len列放在中间。确保表格中显示“ len的数量”或与此类似的内容。

答案 3 :(得分:0)

单元格字符计数数组版本

Option Explicit

Sub CellCharactersCount()

  Const cVntWsName As Variant = "Sheet1"    ' Worksheet Name or Index
  Const cStrFirstSource As String = "A1"    ' First Cell of Source Column
  Const cStrFirstTarget As String = "B1"    ' First Cell of Target Column

  Dim vntSource As Variant                  ' Source Array
  Dim vntLngTarget As Variant               ' Target Array (As Long)
  Dim lng1 As Long, lng2 As Long            ' Array Row Counters
  Dim lngMax As Long                        ' Maximum Characters

  ' Paste range into Source Array
  With ThisWorkbook.Worksheets(cVntWsName)
    vntSource = .Range(.Range(cStrFirstSource), .Cells(Rows.Count, _
        .Range(cStrFirstSource).Column).End(xlUp))
  End With

  ' Count the maximum number of chars.
  For lng1 = 1 To UBound(vntSource)
    If Len(vntSource(lng1, 1)) > lngMax Then
      lngMax = Len(vntSource(lng1, 1))
    End If
  Next

  ' Copy Len Data to Target Array.
  ReDim vntLngTarget(1 To lngMax, 1 To 1) As Long
  For lng1 = 1 To UBound(vntSource)
    If Len(vntSource(lng1, 1)) <> 0 Then
      For lng2 = 1 To lngMax
        If Len(vntSource(lng1, 1)) = lng2 Then
          vntLngTarget(lng2, 1) = vntLngTarget(lng2, 1) + 1
        End If
      Next
    End If
  Next

  With ThisWorkbook.Worksheets(cVntWsName)
    ' Clear contents of Target Column Range.
    .Range(cStrFirstTarget) _
        .Resize(Rows.Count - .Range(cStrFirstTarget).Row + 1).ClearContents
    ' Paste Target Array into Target Range.
    .Range(cStrFirstTarget).Resize(lngMax) = vntLngTarget
  End With

End Sub