web-dev-qa-db-ja.com

Excel-1つのセルで文字と数字を別々に数える

1つのセル内で数字と文字を別々に数える方法が必要です。

たとえば、セルに_1234567ABC_が含まれている場合、これを次のように出力できる必要があります。

  • 「7つの数字」と
  • 「3文字」。

動作するlen()関数を使用する方法を考えることはできず、countifはセル自体のみをカウントします。

どんな助けでもいただければ幸いです。

6
CvR

各セルが数字と文字だけで埋められている場合、これを実現するためのvba以外の簡単な方法は、代替関数を10回ネストして、10個の数字を削除することです。残っているのはアルファのみです。次に、アルファテキストをlen()するか、元の長さからその数値を減算して、数値の長さを取得できます。

「1234567ABC」がセルA1にあると仮定します。

この式は文字数を示します。 (3)

=LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,0,""),1,""),2,""),3,""),4,""),5,""),6,""),7,""),8,""),9,""))

この式は総数を与えます:(7)

=LEN(A1)-LEN(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,0,""),1,""),2,""),3,""),4,""),5,""),6,""),7,""),8,""),9,""))

他の方法で/より詳細にデータの処理を開始したい場合は、VBAソリューションが必要になる可能性があります。

元の投稿の要件を満たすには、上記の数式の最後に次の接尾辞を追加します。

=x & " Numbers / Letters" 

ここで、x =上記の2つの式。これにより、計算された数値の後にテキストが追加されます。

参考資料:

次のリンクは、同様のことを行うVBA UDFの詳細です。 http://www.mrexcel.com/forum/Excel-questions/16364-how-remove-numbers.html

追加の更新(ありがとうlori_m)

この式は非常に読みやすく、更新しやすいものです。

=SUM(LEN(A1)-LEN(SUBSTITUTE(A1,{1,2,3,4,5,6,7,8,9,0},"")))
7
danielpiestrak

英数字の文字列の形式を分析する の私の答えから:

より詳細な回答については、この文字列_1234567ABC456_は_7N3L3N_として報告されます。

このような正規表現は仕事をします

  • altf11 を一緒に押してVBEに移動します
  • モジュールの挿入
  • 以下のコードをコピーして貼り付けます
  • altf11 を同時に押してExcelに戻ります

次に、Excel内、つまりB1で関数(無効な文字列も検出します)を使用できます。
=AlphaNumeric(A1)

enter image description here

_Function AlphaNumeric(strIn As String) As String
    Dim objRegex As Object
    Dim objRegMC As Object
    Dim objRegM As Object
    Dim strOut As String
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
        .Global = True
        .ignorecase = True
        .Pattern = "[^\w]"
        If .test(strIn) Then
            AlphaNumeric = "One or more characters is invalid"
        Else
            .Pattern = "(\d+|[a-z]+)"
            Set objRegMC = .Execute(strIn)
            For Each objRegM In objRegMC
                strOut = strOut & (objRegM.Length & IIf(IsNumeric(objRegM), "N", "L"))
            Next
            AlphaNumeric = strOut
        End If
    End With
End Function
_
2
brettdj