- ベストアンサー
エクセルの文字数カウントに関して
エクセル初心者なのでお恥ずかしい質問かもしれませんが、ご協力よろしくお願いいたします。 A列 B列 C列 123 124 1 122 122 0 124 12 1 上記のようにA列・B列を比較して、違う文字の文字数をC列に 出したいのですが、どうもうまくいきません。 よろしくお願いいたします。
- tsuka_kana
- お礼率31% (9/29)
- オフィス系ソフト
- 回答数5
- ありがとう数4
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 はっきりとした法則性は見出せませんでしたが、今回は、見切ってしまいます。 それで、以下のような数式でできるよな気がします。ただし、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列のデータを取得
その他の回答 (4)
お示しのデータが 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)}
お礼
どうもありがとうございました。 おかげさまで、無事に解決する事ができました。
- hige_082
- ベストアンサー率50% (379/747)
一例です 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 参考になれば
お礼
ありがとうございました。 参考にさせて頂きます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 ご質問を読む限りは、VBAでないと無理ではないかと思います。 きちんと確認してほしいことがあります。 >違う文字の文字数をC列に 例えば A B C 123 312 0 同じ 212 122 0 同じ 1111 312 3 A側からみれば、3 です。 そういう考え方でよいのでしょうか。
補足
こんにちは。 A列が基準になりますので、 >例えば > A B C >123 312 0 同じ この場合C列→3 >212 122 0 同じ この場合C列→2 >1111 312 3 A側からみれば、3 です。 になります。 よろしくお願いいたします。
- hosohoso13
- ベストアンサー率44% (138/313)
文字を比較する関数はありますが、何文字違うかを返す関数は無いと思いますので、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.配置したコマンドボタンをクリックすると結果が表示されます。 もっと簡単な方法があるかもしれません。取りあえず急ぎで書きましたので・・・。
お礼
早々のご返答ありがとうございます。 やってみましたところ、下記のようなエラーがでてしまいました。 何か、間違ってしまったのでしょうか。。。 実行時エラー'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行くらいまで対応できるのが理想です)。 ここまでの条件を満たす「文字数カウント」の方法、 もし分かる方がいましたらどうかよろしくおねがいします。
- ベストアンサー
- その他MS Office製品
- エクセルでセル内の文字をカウントしたい
エクセルでセル内の文字をカウントしたいです。 例えば 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」であるものの数を数えればいいと思うのですが、式を教えていただきたいです。
- ベストアンサー
- その他(Windows)
- エクセルで文字の数をカウントしたいのですが、
エクセルで文字の数をカウントしたいのですが、 うまくできません。 データを文字列で 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列おきに○の数と△の数を別々に求めたいのですが、どのようにしたらよいでしょうか。
- ベストアンサー
- その他MS Office製品
- 文字列カウントと並び替え
初めての質問です。PC初心者です。宜しくお願い致します。 エクセルの関数で、 A列の文字列をカウントして小さい順にB・C列に表示したいです。 A列 :B列 :C列 200 :100 :2件 100 :200 :1件 100 :500 :1件 500 : こんな感じです。 色々調べてB列に並べかえましたが、カウントできず。。。 カウントできたら、並べ替えできず。。。 知識不足で申し訳ありませんが、お力添え下さい。
- 締切済み
- Excel(エクセル)
- エクセルである文字列をカウントしたい
例えば、シート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で色々試してみたのですが、 どうしてもうまくいきません。 どうぞ宜しくお願いします。
- ベストアンサー
- その他MS Office製品
- Excelで文字列を独自の二進数で表したい。
A,B,C,D,Eのいずれかを含む文字が順不同でセルに入っているものから、 A=10000 B=1000 C=100 D=10 E=1 と置換して足した、二進数であらわしたり、逆にその二進数から文字列に戻したりしたいです。 (例:DAなら10010、EBCなら1101) VBAの自作関数を含めてExcelの関数でできる方法があればお教えくださると助かります。
- 締切済み
- その他MS Office製品
お礼
どうもありがとうございました! うまくいきました!