• 締切済み

Excel2010 セルのカウント

Excel2010で、E4~G103の範囲内に、M3~M17に入力された文字列のいずれかを含む言葉が入力されています。さらに、E4~G103の範囲内には、色のついているセルとついていないセルがあります。 E4~G103の中で、色がついていて、かつM3に入力されている文字列を含む言葉の個数を、N3に返すにはどのように対応すればいいでしょうか。 よろしくお願いします。

みんなの回答

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.9

ANo.3です。 何度もすみません。 ユーザ定義関数にするなら範囲は引数渡しの方が良いので訂正します。 セルN3に =fSample3(E4:G103,M3) と入れてください。 Function fSample3(rArea As Range, sTarget As String) As Long    Dim rRng As Range    For Each rRng In rArea.Cells       If (rRng.Interior.ColorIndex > 0) And (InStr(rRng.Value, sTarget) > 0) Then fSample3 = fSample3 + 1    Next End Function

ri09ri0308
質問者

補足

ありがとうございます!無事数字が入りました!

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.8

ANo.3です。 すみません、よく確認せずにちょこっとコードを直してユーザ定義関数にしたつもりになっていました。 Find関数はユーザ定義関数で使用するには色々と問題があったことを思い出して修正しました。 セルN3に =fSample2() と入れてください。 Function fSample2() As Long    Dim rRng As Range    For Each rRng In Range("E4:G103").Cells       If (rRng.Interior.ColorIndex > 0) And (InStr(rRng.Value, Range("M3")) > 0) Then fSample2 = fSample2 + 1    Next End Function

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.7

ANo.3です。 「CountIFColor」が何のことかさっぱり解りませんでしたが、ようやく理解しました。 この質問↓のANo.3の方が回答されたユーザ関数ですね。 http://oshiete1.nifty.com/qa9256327.html 当方は、その質問に回答された方とは別人です。 もし、CountIFColorの様にユーザ関数が良いなら以下のコードを標準モジュールに入れ、セルN3に =fSample() と入れてください。 Function fSample() As Long    Dim rRng As Range, nCount, sAddress    nCount = 0    Set rRng = Range("E4:G103").Find(What:=Range("M3"))    If Not rRng Is Nothing Then       sAddress = rRng.Address       Do          If rRng.Interior.ColorIndex > 0 Then nCount = nCount + 1          Set rRng = Range("E4:G103").FindNext(rRng)          If rRng Is Nothing Then Exit Do       Loop Until rRng.Address = sAddress    End If    fSample = nCount End Function

ri09ri0308
質問者

補足

たびたびありがとうございます。すみません、ごっちゃになってしまっていたようです、失礼いたしました。 教えていただいたコードをコピーし、=fSample() も入れましたが・・・「1」と返ってきて、私自身、意味が分かっていない状況です・・・引数不要らしいですが・・・。例で栄養は書きましたがこれが15個あるのですが・・・。 今回「文字列に(たとえば)栄養を含む」「色つきのセル」を聞きたかったので、そもそもCountIFColorがおかしかったんですね・・・。すみません。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.6

ANo.3です。 > =CountIFColor("*"&P3&"*",$D$4:$G$103,6)はQ3に入力されています。 このユーザ関数と私のサンプルマクロ(ANo.3)の関係が良く解りません。 念のために確認しますが、Module3に入れたサンプルマクロを実行してもセルN3には0が入ると言う状態でよろしいでしょうか。 M3に入る文字列や、E4:G103に入る文字列の具体例を挙げてみてください。

ri09ri0308
質問者

補足

M列の1例として「栄養」、それがE4:G103だと「栄養バランスのよい食事をとる」だったり「栄養バランス」だったり「栄養バランス」だったりとかするので、栄養でまとめればカウントできると思った次第です。各行は人で、挑戦した項目が入力されていて、条件をクリアしていたら黄色で塗りつぶしてあります。項目別にクリアしている人数を出す式になっていると思ったのですが・・・。 実行とは、Alt+F11で出てくる、コード入力されている画面の実行のことでしょうか?今まで(というか今回の集計作業で初めてマクロを使ったので数えるほどですが)コードを入力して閉じればよかったのですが、違うのでしょうか?とりあえずコードが入っている画面の実行ボタンはクリックしてみました。やはり0が入る状態です。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

>E4~G103の中で、色がついていて、かつM3に入力されている文字列を含む言葉の個数を、N3に返すにはどのように対応すればいいでしょうか。 関数のみでカウントするには「4.0マクロ関数」を使って作業用のSheetを使う必要があるようです。 http://miyahorinn.fc2web.com/faq/faq030.html 質問の対象シートがSheet1で作業用にSheet2を使うとすれば次のように色付きセルを検出します。 Sheet1のA1セルをアクティブ(作業対象)にして「数式」タブの「名前の定義」で「cellcolor」等の名前を定義します。 「範囲」へは次の数式を入力します。 =GET.CELL(63,Sheet1!A1)+NOW()*0 作業用のSheet2!E4へは次の数式を入力します。 =cellcolor Sheet2!E4セルをオートフィルでG4までコピーします。 そのままオートフィルでG103まで更にコピーすればSheet1!E4:G103の色付きセルに対応するSheet2のセルに0以外の数値が代入されます。(黄色のときは6になるでしょう) 「塗りつぶしなし」が0で「白」は2になるようです。 Sheet1のセルの色塗りを変更しても再計算を実行しないとSheet2!E4:G103の値は変化しないかも知れませんので注意してください。 N3セルには次の数式を入力すれば目的のセル数を算出できるはずです。 =SUMPRODUCT((LEN(SUBSTITUTE($E$4:$G$103,M3,""))<LEN($E$4:$G$103))*1,(Sheet2!$E$4:$G$103>0)*1)

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.4

ANo.3です。 > 現在 > =CountIFColor("*"&P3&"*",$D$4:$G$103,6) > となっています。 これはどのセルに入っているのでしょうか? 「CountIFColor」と言う関数はExcelにはありませんのでユーザ関数を作成されていませんか? セルP3やD列に何が入っているのかも気になります……。

ri09ri0308
質問者

補足

=CountIFColor("*"&P3&"*",$D$4:$G$103,6)はQ3に入力されています。 ユーザー関数とはマクロのことですかね・・・であれば、使っています。 先の回答(No.3)の Sub Sample()以下はModule3にそのまま投入しました。 D4~G103の範囲に入力されている項目名が詳しく書かれており、M3~M17に羅列した項目名と文言が必ずしも100%一致していません。(書きながら、D4ではなく「E4~G103の範囲」が正しかったと気付き、念のため訂正しました。 なお、色のついたセルとついていないセルがあるのは、項目をクリアしたかどうかを提出書類で確認しクリアしていれば色をつけてあります。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

色は検索条件としては不向きです。 と、言うのも普通にセルを塗りつぶした場合と、条件付き書式でセルを塗りつぶした場合で見た目は一緒ですが、VBAで条件付き書式でセルを塗りつぶした物を取得する事は出来ません。 と、言う事で色がついているセル=普通にセルを塗りつぶした と、言う前提で作ってみました。 Sub Sample()    Dim rRng As Range, nCount, sAddress        nCount = 0    Set rRng = Range("E4:G103").Find(What:=Range("M3"))    If Not rRng Is Nothing Then       sAddress = rRng.Address       Do          If rRng.Interior.ColorIndex > 0 Then nCount = nCount + 1          Set rRng = Range("E4:G103").FindNext(rRng)          If rRng Is Nothing Then Exit Do       Loop Until rRng.Address = sAddress    End If    Range("N3") = nCount End Sub

ri09ri0308
質問者

補足

ありがとうございます。 色の塗りつぶしは、手動ですので大丈夫そうです。 しかし、そちらを入れた結果全部ゼロになってしまい・・・数式が間違っているようです。 現在 =CountIFColor("*"&P3&"*",$D$4:$G$103,6) となっています。 エラーではなくゼロが出るのは、意図しない数式になっていると思うのですが、こちらの数式の意味を教えていただけますか? 質問のとおり、「E4~G103の中で、色(黄色です)がついていて、かつM3に入力されている文字列を含む言葉の個数を、N3に返す」ということをしたいのですが・・・。 よろしくお願いいたします。

回答No.2

VBAを使わないのであれば、作業領域として Sheet2,Sheet3を使います。 Sheet2のE4~G103を選択して 「数式」→ 「名前の定義」とすすみ 「名前」に color 「参照範囲(R)」に =GET.CELL(63,Sheet1!E4)+NOW( )*0 を入力 (添付画像を参考にしてください) Sheet2の E4に =color と入力して G4 までコピペ それから G103 までコピペ 背景色に合わせて 色のついているところは数字がでてくるとおもいます。なにもないところは”0” 今度は Sheet3 の E4に =Sheet1!E4&Sheet2!E4 と入力 G4までコピペ その後 G103 までコピペ Sheet1の N3 に =COUNTIF(Sheet3!$E$4:$G$103,Sheet1!M3&6) ここでは黄色の6ですが、Sheet2の色の数字を入れるようにします。 N17までコピペ あとから色を付けた場合は 「数式」 「再計算実行」をしてください。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

Option Explicit Sub Test() Dim c, i, j As Long c = 0 For i = 4 To 103 For j = 5 To 7 If Cells(i, j).Interior.ColorIndex > 0 And InStr(Cells(i, j).Value, Range("M3").Value) > 0 Then c = c + 1 End If Next j Next i Range("N3").Value = c End Sub 簡単な説明です。 c = 0 数をカウントする用で、初期値を設定しています。 For i = 4 To 103 行「4」から行「103」まで繰り返し。 For j = 5 To 7 列「E」から列「G」まで繰り返し。 If Cells(i, j).Interior.ColorIndex > 0 And InStr(Cells(i, j).Value, Range("M3").Value) > 0 Then もし、セル「i, j」の背景色が「0」以上(「0」は白)で、かつセル「i, j」の中にセル「M3」の文字が含まれていたら c = c + 1 1個プラス。 Range("N3").Value = c 「c」の合計をセル「N3」に入力。

関連するQ&A

  • EXCEL2007で、ある範囲のセルに文字が入っていて、その文字の中に

    EXCEL2007で、ある範囲のセルに文字が入っていて、その文字の中に"肝"という文字が入っているセルの個数を数えるには、どうするのでしょうか?

  • Excel2007のマクロで文字列を分解

    Excel2007のマクロで文字列を分解したいのですがうまくいきません。 1、セルM29からAG29までかそれ以上にデータが3つずつ入ってます。 2、1のデータの1つずつをを3列ずつに分解してM31から列上にコピー。 例えば、セルM29あいう、セルN29えおか、…、→ならM31あ、N31い、O31う、P31え、Q31お、R31か、…。 という具合に。お願いいたします 画像を添付する

  • 列にセル値と同じ文字があればその行の個数を返す

    セルM5に=IF(L5="","",SUMPRODUCT(($A$5:$A$11=L5)*MONTH($B$5:$E$11)=M$3)))を入力した結果指定範囲の個数2を示しM11まで順に12月のセル数を返しますが、N5セルに 同じようにIF(L5="","",SUMPRODUCT(($F$5:$F$11=L5)*MONTH($G$5:$J$11)=N$3)))を入力した場合なぜか1月の範囲内個数2ではなく空白を含めた全セル数4を返し以降も同じよう返します。他の月では問題ないのですが1月だけなぜか指定月の個数が帰りませんどなたか関数の解る方宜しくお願いします。

  • Excel;特定の文字を含むセルを書き出す方法

    お世話になります。 あるExcelシートの2列×300行ぐらいの範囲のセル内に 文字が入っています。 セル内(例A23idokensi)に特定の文字(例:A23)を含んでいたら、 もしくはセルを抜き出す方法はあるでしょうか? やりたいことは、アトランダムに入力されているところから、 特定の文字を含んだセルだけ取り出して内容とセルの個数を 数えることです。

  • 条件に一致するセルのカウントと色付けと置換

    こんにちは。 指定した文字列を選択範囲から検索し、 文字列を含むセルの個数のカウント& セルの色付け&文字列の置換ができる コードを教えてください。 <シート1> A列:検索文字列 B列:置換後の文字列 <対象範囲> 別ブックの指定した範囲のみ 文字列の置換のみであればエラーなく 実行することができたのですが、 個数のカウントとセルの色付け方法が いまいちわかりません。 vba初心者のため、簡単な解説を つけていただけると嬉しいです。 なお、文字列の置換は以下のサイトを参考に しています。 http://extan.jp/?p=5749

  • excel2010で個数を数えたい

    Windows7でexcel2010を使用しています。 曜日を入力した行とその下の行に曜日に応じてセルの背景色が変わるように条件付き書式設定をしています。曜日の行とその下の行は同じ色になる設定です。 曜日の下の行には文字を入力します。 条件付き書式設定で変更されたセルの背景色で特定の色かつ特定の文字列が入力されたセルの個数を数えたいのですが何か方法はありますでしょうか? たとえば、A1~AE1に曜日を入力していて、平日は背景色なし、土曜日は背景色青、日曜日は背景色赤になるように条件付き書式設定をします。 A2~AE2には色々な文字を入力しますが、上のセルと同じ色になるようにしています。 A2~AE2に〇と入力されていて、且つ背景色なしのセルの個数を数えたい場合はどうすれば良いでしょうか?〇と入力されていて背景が青の場合、赤の場合のセルの個数も数えたいです。 本当は背景色ではなく文字色を条件付き書式設定で変更してその個数を数えたいのですが、色々検索したところ文字色では難しそうなので背景色を変更することにしました。 説明が下手で申し訳ありませんが、どなたかご教授しただけますと幸いです。

  • Excel2007でカウントしたいのですが

    Excel2007でカウントしたいですがご協力お願い致します。 今ところはセルU6~U4363にデータが入ってますが、それ以上にデータは増えていきます。 幾つか背景カラー(ミドリ)が入ってるセルがありまして、U列の6行目から下のカラーセルの合計個数をセルU4に表したいです。 どなたかご協力お願い致します。

  • 文字列が同じ場合、セルに色を塗りたい

    エクセル VBAでリストにある文字列と他のセルの文字列が末尾まで完全に同一の場合、 セルに色を塗るにはどのようなコードを記入すればよろしいでしょうか? 具体的には下記のような動きができればと考えております。 G列にリストがあります。(G列のリストの数は変動します) このリストの文字列とB2:B7とE2:E7の範囲の文字列が末尾まで完全に同一の場合、 B2:B7とE2:E7のセルに黄色で色を塗る。 また、リストにはあるけど、B2:B7とE2:E7のセルにない文字列がある場合、 リストのその文字列があるセルに緑で色を塗る。 上記のような動きをするには、エクセル VBA でどのようなコードを記入すればよろしいでしょうか? エクセルは2010及び2007を使用しております。 よろしくお願いします。

  • 塗りつぶしたセルをカウントする関数(エクセル)

    エクセルを使っている者です。 エクセルを使って、文化祭のシフト表を作っているのですが、 その作業のなかで、セルを何色か使って塗りつぶし、色別に仕事内容を見やすくしました。(行:時間 列:人の名前) そこまではいいんですが、みな平等に仕事を割り当てるため、選択した範囲内で塗りつぶされたセルの個数を色別に数えたいのです。 どんな関数を使えばよいでしょうか? 塗りつぶされたセルを、しかも色別にカウントする、そんな関数はあるのでしょうか?

  • excel2002で全角文字のあるセル

    Excel2002を使用しています。 入力するデータで仮にB列のみ半角のみの入力にしたくて、入力規則を設定しました。 しかし、他からデータをコピーなどもできてしまいます。 できれば、全角文字を含んだ場合には、えらーメッセージが出るとか、セルの色が変わるなど分かるようにしたいのですが、無理でしょうか?

専門家に質問してみよう