- ベストアンサー
EXCEL セル内い表示される文字が指定範囲内に何文字あるかカウントしたです。
A B C D 1 4 明 明日 2 2 投 投手 3 1 答 回答 4 5 情 個人情報 5 3 確 慎重に確認 : : : : このような表があり、 A列にはランダムで数字を出して、 A列の数字を下に、C列にvlookupを使って、まず漢字一文字を返します。 さらに、C列の一文字に対応する熟語や文章を 別の表からD列に表示させています。 今、B列1行~5行にそれぞれC列1行~5行の文字が 範囲C:D内の熟語内や文章内にいくつあるかを返したいのですが、 どうすればよいでしょうか。 注意点として、 ・C列の文字はころころと変わるようにしてあります。 そのためFIND("明",c:d)などでは対応できません。 ・C列には一文字だけ表示され、D列は必ずその一文字を含みます。 ただし、文字列の先頭にあったり、真ん中にあったりと配置パターンは一定しません。 countif(C1:D5,C1)でもだめです。 どうぞよろしくお願いします。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
D列の1セル中に同じ文字が2文字あるもの、例えば”一長一短”の ”一”には対応できませんがこれを1つと数えてよい前提であれば 下記で可能です。 B1に =COUNTIF(C$2:C$XX,C2)+COUNTIF(D$2:D$XX,"*"&C2&"*") 但しC$XX、D$XX はデータの最終行を設定してください。 B1セルを必要分下方向にコピー 以上で少なくとも、補足に書かれている内容はクリアします。
その他の回答 (9)
- bin-chan
- ベストアンサー率33% (1403/4213)
VBAのコードです。 function myfunc(strA as string, strB as string) as long myfunc = ubound(split(strB, strA)) end function これを「自作関数」として貼り付け、セルB2なら式[=myfunc(C2, D2)]としてください。 「自作関数」はシートの「コードの表示」では駄目でした。 貼り付けする方法は検索ワード[EXCEL 自作関数]で検索してみてください。
[回答番号:No.8]へのコメント、 私も最初は「さっぱり理解できない」状態でした。(^_^) 1 答 例えば下のような表に list なる名前を付けて 2 投 おけば、次式で質問文にある表のC列が得られ 3 確 ます。 4 明 C1: =VLOOKUP(A1,list,2) 5 情 6 日 さらに、質問者は「C列の一文字に対応する熟語 7 感 や文章を別の表からD列に表示させています」と 8 認 仰っているのでそこは詮索しないでおこうかと。 9 報 10 個
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 誰も言っていないようですから、あえて書かせていただきますが、 質問に出された内容は、さっぱり理解できないのです。 一体、どうやって、VLOOKUPで、「明 明日」というように、C列に出すことが出来るのか、見当がつきません。そういう前提がはっきりしていないと、その後に構築していく内容がナシ崩しになるのではないでしょうか? A列がランダムだから、RANDOMBETWEEN を使うにしても、 4 明 明日 4から、どうして、D1 の「明日」から、「明」を導きだすのでしょうね。 以下のようなら、絶対に、A列に、4は出てきません。 A列 A1: =RANDBETWEEN(1,LEN(D1)) C列 C1: =MID(D1,A1,1) B列 B1; =SUMPRODUCT(LEN($C$1:$D$7)-LEN(SUBSTITUTE($C$1:$D$7,C1,""))) ということでしょうか。1を足している人がいますが、ランダムで出されるものですから、C列もカウントに含めるということになるとは思います。必ず、ひとつはあるけれども、ひとつ以上ですね。COUNTIF は、2つあっても、3つあっても、セルがひとつなら、1つとしてカウントされるのから、使えません。 少なくとも、ランダムで数値を出すところから、その目的性が分からないのです。何か、どこかに食い違いがあるのかもしれません。だから、こちらが想定している話とは違う可能性もあると思います。
- KURUMITO
- ベストアンサー率42% (1835/4283)
B1セルに次の式を入力して下方にオートフィルドラッグします。 =IF(C1="","",COUNTIF(C:D,"*"&C1&"*"))
[回答番号:No.4この回答への補足]へのコメント、 A B C D 1 4 2 明 明日 2 2 2 投 投手 3 1 2 答 回答 4 5 3 情 個人情報 5 3 2 確 慎重に確認 6 7 2 感 感情的 7 9 4 報 スポーツ報知 8 6 3 日 日刊工業新聞 9 10 2 個 当該報告不備 10 8 3 認 認知症 B1: {=1+SUM(LEN(D$1:D$10)-LEN(SUBSTITUTE(D$1:D$10,C1,"")))} これは配列数式です。 【お断り】「配列数式とは何か?」の質問には回答しません。
》 B列1行~5行にそれぞれC列1行~5行の文字が範囲C:D内の熟語内や 》 文章内にいくつあるかを返したい… お示しの例の場合、「B列1行~5行」に表示されるべき数値を示してください。すべて 1 あるいは 2 ですか? それ以外の数値になる場合のD列のデータ例をも示してください。
補足
質問者です。 皆様、早速のご解答ありがとうございます。 また、質問文の説明内容が不十分で申し訳ありませんでした。 A B C D 1 4 2 明 明日 2 2 2 投 投手 3 1 2 答 回答 4 5 3 情 個人情報 5 3 2 確 慎重に確認 6 6 2 感 感情的 (B列には返してほしい数を記載しております。) ここでランダムでC1に表示された 「明」はC列&D列に2つあります。 「情」という文字はC列&D列に全部で3つあります。 つまり、C1に無作為に表示された一文字が C列とD列内にいくつあるかを数えていただきたいのです。 なにとぞよろしくお願いします。
- 135ok
- ベストアンサー率34% (26/75)
=LEN(D1)-LEN(SUBSTITUTE(D1,C1,""))+1
補足
質問者です。 皆様、早速のご解答ありがとうございます。 また、質問文の説明内容が不十分で申し訳ありませんでした。 A B C D 1 4 2 明 明日 2 2 2 投 投手 3 1 2 答 回答 4 5 3 情 個人情報 5 3 2 確 慎重に確認 6 6 2 感 感情的 : : : (B列には返してほしい数を記載しております。) ここでランダムでC1に表示された 「明」はC列&D列に2つあります。 「情」という文字はC列&D列に全部で3つあります。 つまり、B1には C1に無作為に表示された一文字が、 C列とD列内全てでいくつあるかを数えて その数を返していただきたいのです。 なにとぞよろしくお願いします。
- ASIMOV
- ベストアンサー率41% (982/2351)
B1 =LEN(D1)-LEN(SUBSTITUTE(D1,C1,"")) で、どうでしょう
補足
質問者です。 皆様、早速のご解答ありがとうございます。 また、質問文の説明内容が不十分で申し訳ありませんでした。 A B C D 1 4 2 明 明日 2 2 2 投 投手 3 1 2 答 回答 4 5 3 情 個人情報 5 3 2 確 慎重に確認 6 6 2 感 感情的 : : : (B列には返してほしい数を記載しております。) ここでランダムでC1に表示された 「明」はC列&D列に2つあります。 「情」という文字はC列&D列に全部で3つあります。 つまり、B1には C1に無作為に表示された一文字が、 C列とD列内全てでいくつあるかを数えて その数を返していただきたいのです。 なにとぞよろしくお願いします。
- bin-chan
- ベストアンサー率33% (1403/4213)
VBAを使う。 今、コードを書ける環境にないので考え方のみ。 シートの「コード」にfunctionを作成。 引数はStringで文字(セルC)と文字列(セルD)を渡す。 functionはSplitを用いて文字列(セルD)を文字(セルC)で区切り、UBoundで区切った結果の数をカウントし、戻り値とする。 で、セルBに式[=<自作のfucntion(セルC、セルD)>]を設定。
お礼
お忙しいところ、ご解答ありがとうございました。 ただ、恥ずかしながら私はVBAに関してまったくの無知です。 もし、ご回答者様にお時間がございましたら ぜひ、コードをご用意していただければと存じます。 恐れ多いお願いではございますが、 どうぞよろしくお願いいたします。
お礼
ありがとうございました。 無事に解決できました。