• ベストアンサー

エクセルの文字数カウントに関して

エクセル初心者なのでお恥ずかしい質問かもしれませんが、ご協力よろしくお願いいたします。 A列   B列   C列 123   124   1 122   122   0 124   12    1 上記のようにA列・B列を比較して、違う文字の文字数をC列に 出したいのですが、どうもうまくいきません。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 はっきりとした法則性は見出せませんでしたが、今回は、見切ってしまいます。 それで、以下のような数式でできるよな気がします。ただし、256文字までです。 =IF(LEN(A1)<LEN(B1),ABS(LEN(A1)-LEN(B1)),0)+SUMPRODUCT((MID(A1,ROW($A$1:$A$256),1)<>MID(B1,ROW($A$1:$A$256),1))*1) 別途、ユーザー定義関数を作ってみました。 標準モジュールに貼り付けて、後は、一般の関数と同じように使います。 ------------------------------------------------ Function CompStr(rng1 As Range, rng2 As Range)   Dim i As Integer, j As Integer   Dim cnt As Integer   Dim w1 As String   Dim w2 As String   '文字の比較・TextCompare は、全角・半角同等   Const CP As Integer = vbTextCompare 'vbBinaryCompare   If Len(rng1.Value) >= Len(rng2.Value) Then     w1 = rng1.Value: w2 = rng2.Value   Else     w2 = rng1.Value: w1 = rng2.Value   End If   If StrComp(w1, w2) <> 0 Then     For i = 1 To Len(w2)       j = StrComp(Mid(w1, i, 1), Mid(w2, i, 1), CP)       If j <> 0 Then         cnt = cnt + 1       End If     Next i     cnt = cnt + Len(w1) - Len(w2)   End If   CompStr = cnt End Function ------------------------------------------------ #1さんの修正部分を指摘しておきます。  i を r に換えれば可能だと思います。   a = Range("A" & r).Cells 'A列のデータを取得 If a = "" Then Exit Do 'A列が空なら終了 b = Range("B" & r).Cells 'B列のデータを取得

tsuka_kana
質問者

お礼

どうもありがとうございました! うまくいきました!

その他の回答 (4)

noname#204879
noname#204879
回答No.5

お示しのデータが Sheet1 のセル A1 から並んでいると仮定します。 1.Sheet2 のセル A1 に式 =MID(Sheet1!$A1,COLUMN(A1),1) を入力し   て、此れを右方(此処では列Gまでとしておく)および下方にズズ   ーッとドラッグ&ペースト(右方の列数は Sheet1 のA列の最大桁   数以上) 2.Sheet3 のセル A1 に式 =MID(Sheet1!$B1,COLUMN(A1),1) を入力し   て、此れを右方(此処では列Gまで)および下方にズズーッとドラ   ッグ&ペースト 3.Sheet1 のセル C1 に次の配列数式を入力して、此れを下方にズズ   ーッとドラッグ&ペースト   {=SUM(NOT(Sheet2!A1:G1=Sheet3!A1:G1)+0)}

tsuka_kana
質問者

お礼

どうもありがとうございました。 おかげさまで、無事に解決する事ができました。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

一例です Sub test() Dim i As Integer, ii As Integer, iii As Integer Dim a As String, b As String Dim c As Integer For i = 1 To Range("a65536").End(xlUp).Row ii = Len(Cells(i, 1).Value) a = Cells(i, 1).Value b = Cells(i, 2).Value c = 0 For iii = 1 To ii If InStr(iii, b, Mid(a, iii, 1)) <> iii Then c = c + 1 Next iii Cells(i, 3).Value = c Next i End Sub 参考になれば

tsuka_kana
質問者

お礼

ありがとうございました。 参考にさせて頂きます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 ご質問を読む限りは、VBAでないと無理ではないかと思います。 きちんと確認してほしいことがあります。 >違う文字の文字数をC列に 例えば  A    B    C 123   312   0  同じ 212   122   0  同じ 1111  312    3 A側からみれば、3 です。 そういう考え方でよいのでしょうか。

tsuka_kana
質問者

補足

こんにちは。 A列が基準になりますので、 >例えば > A    B    C >123   312   0  同じ この場合C列→3 >212   122   0  同じ この場合C列→2 >1111  312    3 A側からみれば、3 です。 になります。 よろしくお願いいたします。

回答No.1

文字を比較する関数はありますが、何文字違うかを返す関数は無いと思いますので、VBAによる操作になると思います。 1.表示 → ツールバー → コントロールボックス 2.コントロールボックスのツールバーが表示されたら、その中のコマンドボタン(ボタンの絵のやつ)をクリックします。 3.ワークシートの上でマウスをドラッグして適当な大きさのボタンを配置します。 4.配置したボタンをダブルクリックします。 5.別のウィンドウが開くので以下の内容を入力します。 Private Sub CommandButton1_Click() Dim a As String, b As String Dim r As Long Dim j As Integer, k As Integer Dim count As Integer i = 0 j = 0 k = 0 Do While (1) r = r + 1 '行カウンタ count = 0 '検査結果の初期化 a = Range("A" & i).Cells 'A列のデータを取得 If a = "" Then Exit Do 'A列が空なら終了 b = Range("B" & i).Cells 'B列のデータを取得 If a <> b Then 'A列とB列のデータが違う場合 If Len(a) > Len(b) Then 'Aの方が長い場合 調べる文字数=Bの文字数 k = Len(b) Else 'Bの方が長いか同じ場合 調べる文字数=Aの文字数 k = Len(a) End If For j = 1 To k '1文字づつ比較して違う場合は検査結果+1 If Mid(a, j, 1) <> Mid(b, j, 1) Then count = count + 1 Next j '文字列の長さが違いを検査結果に足す count = count + ((Len(a) + Len(b)) - (k * 2)) End If '検査結果の記入 Range("C" & r).Cells = count Loop MsgBox "調べ終わりました!", vbOKOnly End Sub 6.タスクバーからエクセルのウィンドウを選択します。 7.配置したコマンドボタンをクリックして、周りに○が付いているならコントロールボックスツールバー内の三角定規のボタンをクリックします。 8.配置したコマンドボタンをクリックすると結果が表示されます。 もっと簡単な方法があるかもしれません。取りあえず急ぎで書きましたので・・・。

tsuka_kana
質問者

お礼

早々のご返答ありがとうございます。 やってみましたところ、下記のようなエラーがでてしまいました。 何か、間違ってしまったのでしょうか。。。 実行時エラー'1004' 'Range'メソッドは失敗しました:'_Worksheet'オブジェクト とでます。その後、下記内容の所が黄色になります。 a = Range("A" & i).Cells 'A列のデータを取得 何が悪いのかが分かりません。 お分かりになるようでしたら、確認頂けないでしょうか。。。 よろしくお願いいたします。

関連するQ&A

  • Excel2007の文字数カウント(半角0.5)

    Excel(エクセル)2007で、 ある1列のすべてのセル内の文字を「半角文字⇒0.5文字」、「全角文字⇒1文字」とカウントした場合の文字数表示をしたいのですが、方法がわかりません。 ----------------------------- たとえば、↓のように表示されるようにしたいです。 【A列 (文字)】     A1:いぬ A2:犬 A3:イヌ A4:dog ↓↓↓ 【B列 (文字数)】 B1:2 B2:1 B3:1 B4:1.5 ※「A3:イヌ」の"イヌ"は全角カタカナではなく半角カタカナなので、1(0.5×2)文字となります。 【補足】 ※極力、マクロとVBAを使わない方法を知りたいです。 ※マクロやVBAを使わなければ上記の条件を満たすカウントと文字数表示ができない場合、その方法やVBAソースが知りたいです。できれば、コマンドボタンを押すと文字数を表示する仕様にしたいです。 ※上記の【A列 (文字)】 の文字はあくまで例です。実際は、どんな文字や数字にも対応できる応用の利く仕様にしたいです。 ※上記の【A列 (文字)】が4行というのもあくまで例です。実際には、何行にでも対応できる仕様にしたいです(具体的には、時間はかかると思いますが10000行くらいまで対応できるのが理想です)。 ここまでの条件を満たす「文字数カウント」の方法、 もし分かる方がいましたらどうかよろしくおねがいします。

  • エクセルでセル内の文字をカウントしたい

    エクセルでセル内の文字をカウントしたいです。 例えば A| B| 1|1,2| 2|1,3| 3|2,3| 4|2 | 5|3 | というエクセルでB列の1の数、2の数、3の数をカウントしたいです。 B列の中には数字と数字の間は,が入っています。 困っています!よろしくお願いします!

  • Excel ユニーク数1のものだけを数えたい

    Excelに関しての質問です。 例えばA列に「犬」「ねこ」「うさぎ」という文字列がそれぞれ複数散らばっているとして、B列には「犬A」、「犬B」、「犬C」… 、「ねこA」、「ねこB」…というように文字列がそれぞれ複数入っているとします。(アルファベットはA以降、どこまで入っているかわからないとします)(A列とB列の動物の種類はそれぞれ一致するものとします。) C列で、B列のユニーク数をカウントものを出します。 →ここからが本題なのですが、A列の動物に対して、B列の「ABC...」の数はいくつかを出したい(=D列)のですが、関数はどのようになりますか? ユニーク数が「1」であるものの数を数えればいいと思うのですが、式を教えていただきたいです。

  • エクセルで文字の数をカウントしたいのですが、

    エクセルで文字の数をカウントしたいのですが、 うまくできません。 データを文字列で 112 134 234 235 567 とあり、「1」の数を数えたいです。 関数で =COUNTIF(B1:B5,"*1*") とやると結果は 2 になってしまいます。(本当は3と出てほしい) データ、区切り位置でやる方法も見つけましたが、 この方法で結果を出すことはできないでしょうか? よろしくお願いします。

  • EXCEL、文字の数をカウントしたい。

    エクセル関数を使って、文字(100文字以上)の数をカウントしたいのですが、可能でしょうか。 例えば:セルに一つずつ、ABCAAACDを入力した場合に、A=4、B=1、C=2、D=1 のように表示したいんです。 ※Aを数える場合に、IF関数を使ってAのとき1となるように IF(A1="A",1)+IF(A2="A",1)+・・・+・・・のように順次足していけば短い文字であれば可能ですが、文字数が多くなってくると、セル内に関数がはいりきらずに計算できなくなります。別の関数をつかってより簡単に計算できないでしょうか?

  • エクセルで文字の個数をカウントする

    エクセルについての質問です。A1,B1,C1,・・・・の中に、○、△、空白が入力されているとします。その時、A1,D1G1,・・・と4列おきに○の数と△の数を別々に求めたいのですが、どのようにしたらよいでしょうか。

  • 文字列カウントと並び替え

    初めての質問です。PC初心者です。宜しくお願い致します。 エクセルの関数で、 A列の文字列をカウントして小さい順にB・C列に表示したいです。 A列 :B列 :C列 200 :100 :2件 100 :200 :1件 100 :500 :1件 500 : こんな感じです。 色々調べてB列に並べかえましたが、カウントできず。。。 カウントできたら、並べ替えできず。。。 知識不足で申し訳ありませんが、お力添え下さい。

  • エクセルである文字列をカウントしたい

    例えば、シート1のA列のセルごとに下記のいずれかの文字列が入っているとします。(文字列の1部ではなく、完全一致の文字列です。) おはよう こんにちは こんばんは そこで、シート2で上記の各文字列が記入されているセルがいくつあるか集計したいのですが、どうしたらよいでしょうか。 シート2は、A列に上記3つの文字列、B列にはそれぞれのカウント数を入れようと思っています。

  • エクセルでカウントした数を特定のセルに入力したい

    エクセルの関数について質問させてください。 A列  B列   C列 8/9       リンゴ 8/10      ミカン 8/11      リンゴ 8/12      ブドウ 8/13      ミカン 8/14      リンゴ 8/15      ブドウ 上記のような表で、C列でカウントしたリンゴの数を 前日の日付の行の、B列に入力したいのです。 ※今が8/10だとすると、リンゴの数「3」を  8/9の行のB列の欄に入力したい。 COUNTやCOUNTIFSで色々試してみたのですが、 どうしてもうまくいきません。 どうぞ宜しくお願いします。

  • Excelで文字列を独自の二進数で表したい。

    A,B,C,D,Eのいずれかを含む文字が順不同でセルに入っているものから、 A=10000 B=1000 C=100 D=10 E=1 と置換して足した、二進数であらわしたり、逆にその二進数から文字列に戻したりしたいです。 (例:DAなら10010、EBCなら1101) VBAの自作関数を含めてExcelの関数でできる方法があればお教えくださると助かります。

専門家に質問してみよう