- 締切済み
エクセル 文字列に使われている文字のカウント
セルの文字列に使われている文字を数えるにはどのようにしたら良いでしょうか?文字列は半角の英数字記号です。 例) 11111 -> 1 sdsdsd -> 2 xyzxyz -> 3 abc777 -> 4 g&id#d -> 5 qwerty -> 6
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- takana_
- ベストアンサー率44% (21/47)
CoalTarさんとmaron--5さんの回答を参考にさせていただき、すべての文字種でもOKの方法を考えました B1に =SUM(INDEX(ISERROR(FIND(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),A1,ROW(INDIRECT("1:"&LEN(A1)))+1))*1,)) 特に配列を返させるINDEX関数は非常に参考になりました。 ※参考にされる方のために、 ROW(INDIRECT("1:"&LEN(A1)))の部分を置き換えると上の式は以下と同じです。(A1の文字数が5文字の時) =SUM(INDEX(ISERROR(FIND(MID(A1,{1,2,3,4,5},1),A1,{1,2,3,4,5}+1))*1,))
- gyouda1114
- ベストアンサー率37% (499/1320)
- maron--5
- ベストアンサー率36% (321/877)
◆前回答が誤りでした ◆無視してください
- maron--5
- ベストアンサー率36% (321/877)
◆関数による方法です A B 1 11111 1 2 sdsdsd 2 3 xyzxyz 3 4 abc777 4 5 g&id#d 5 6 qwerty 6 7 asedsaa 4 B1=MAX(INDEX(FIND(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1),A1),)) ★下にコピー
お礼
11212 が 3 と判定されるようです。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
では数式バージョンを CHAR(33) ~ CHAR(126) まで判定 =INDEX(FREQUENCY(FREQUENCY(CODE(MID(A1,ROW(A$1:INDEX(A:A,LEN(A1))),1)),ROW($A$33:$A$126)),0),2) B1セルに 下へオートフィル
お礼
上手くいきました。ありがとうございます。
- merlionXX
- ベストアンサー率48% (1930/4007)
文字列の構成要素が半角英数字記号だけの場合の回答はもう出ているのですべての文字種でもOKのようにしてみました。 例示のようにA1からA6まで縦にデータがある場合、B1~B7に重複を除いた文字数を入力するVBAの例です。 以下の手順をおためしください。 1.AltキーとF11キーを一緒に押して Visual Basic Editor画面を呼び出します。 2.画面上部のメニューバーから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。 '*****ここから下をコピペ***** Sub test01() Dim myDic As Object Set myDic = CreateObject("Scripting.Dictionary") For Each c In Range("A1:A6") For i = 1 To Len(c.Value) myDic(Mid(c.Value, i, 1)) = vbEmpty Next i c.Offset(0, 1).Value = myDic.Count myDic.RemoveAll Next c End Sub '*****ここより上までをコピペ***** 3.またAlt+F11キーでワークシートへもどります. 4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行 これでできます。
お礼
Scripting.Dictionary というのは知りませんでした。 ありがとうございます。
- mt2008
- ベストアンサー率52% (885/1701)
セル演算で出来ないことも無いとおもいますが、VBAを使う方が良いでしょうね。 手抜き版ですが、文字列の構成要素が半角英数字記号ならこんな感じでどうでしょう。 Sub Sample() Dim sText As String Dim sOne As String Dim nAscii(128) As Long Dim nCount As Long sText = Range("A1") '文字種をカウントしたい文字列がA1にあると仮定 For i = 1 To Len(sText) sOne = Mid(sText, i, 1) '文字列を1文字づつ分解(例:ABC→A) nAscii(Asc(sOne)) = 1 'アスキーコード(例:A=65)に該当する配列に1を代入 Next i '配列の値を合計=文字種の数 For i = 0 To 128 nCount = nCount + nAscii(i) Next i MsgBox ("文字の種類:" & nCount) End Sub
お礼
VBAを使うとわかりやすくできますね。 ありがとうございました。
お礼
質問の仕方がわかりにくかったかもしれませんが、 単に文字数を知りたいのではないのです。例を見てください。