• 締切済み

excel関数・網掛けの個数を数える

お世話になっています。 excel2000で、行ごとに網掛けされている個数を数える関数を作りたいのです。 =COUNTIF(H5:W5,)ここまで考え、この後に「網掛け」を意味する検索条件を入れればいいのかな、と思うのですが、わかりません。 ご教授いただきたく、宜しくお願い致します。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

補足を参考に行単位の網掛け条件に合致する個数をカウントするモデルのマクロです。 単に、網掛けの条件を羅列しているだけです。 使い方は、=AmikakeTTL(行数) です。 合計したい行のどこかに =AmikakeTTL(ROW()) とすればコピーもできます。 同一列でのカウントも同じようにできることになります。 ご参考に。 Public Function AmikakeTTL(rw As Long)   Dim TTL As Integer '網掛け個数   Application.Volatile '自動再計算関数にする   With ActiveSheet 'Sheetが決まっていたら固定していい     '列Hでは10未満(の会社)     If IsNumeric(.Range("H" & rw)) And .Range("H" & rw) < 10 Then       TTL = TTL + 1     End If     '列Iでは100以上     If IsNumeric(.Range("I" & rw)) And .Range("I" & rw) >= 100 Then       TTL = TTL + 1     End If     '列Jでは・・・・・     '列Kでは・・・・・   End With   AmikakeTTL = TTL End Function

noname#63648
質問者

お礼

nishi6さま たびたびほんとうにありがとうございます。 私には、ぱっと見ただけでは理解できませんが、マクロを全く未体験というわけではないので、本を参考にしながら、理解し、トライしてみようと思います。 とにかく、お返事を頂き感激致しましたので、まずはお礼まで。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

>条件付き書式の網掛けはだめなんですか。今回まさにそれなので 条件付き書式の場合、網掛けをする条件さえわかれば簡単でしょう。 COUNTIF(範囲,条件) か 面倒な条件なら網掛けをする条件をコード化すればいいでしょう。 質問からは条件付き書式とは読みきれないですね。デハ。

noname#63648
質問者

補足

ふたたびのご回答、本当にありがとうございます。m(__)m >質問からは条件付き書式とは読みきれないですね。 教えて頂くには、どういう情報が必要なのか、なかなか判断が付きかねてしまい・・・。説明不足ですみませんでした。 >条件付き書式の場合、網掛けをする条件さえわかれば簡単でしょう。 >COUNTIF(範囲,条件) か 面倒な条件なら網掛けをする条件をコード化すればいいでしょう。 それが、各列に入っている条件が、ちがうのです。例えば列Lでは50以上、列Mでは10以下、というように。ですので、難しいと思うのですが。 ご厚意に甘えて、もう少し説明させて頂くと、行5は○○商事、行6は○○食品、というように、各行が会社ごとの情報になっています。そして、列Hでは取引年数、列Iでは従業員数、などの項目となっています。そして、列Hでは10未満(の会社)、列Iでは100以上が網掛けされるように設定してあります。そして、タテの合計(取引年数10年未満の会社は何社あるか)は、設定できましたが、ヨコの合計(○○商事は、いくつの項目が当てはまるか)の設定に苦労している次第です。 もし何かお知恵を拝借できるととても助かります。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

通常のワークシート関数では難しいでしょう。ユーザー定義関数を作ってみました。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入し、そこに下記コードを貼り付けます。 シートに戻り、例えば、範囲A1:B10を調べる場合は、   =PatternCellsCount(A1:B10) のようにします。 対象範囲の網掛け設定を変更した場合は、再計算を行ってください。また、これは条件付書式の網掛けは感知できません。 ↓ここから Function PatternCellsCount(rgSel As Range)   Dim rg As Range 'セル   Dim ct As Long 'カウンタ   Application.Volatile '自動再計算関数にする   For Each rg In rgSel     '網掛け設定されていればカウントする     If rg.Interior.ColorIndex <> xlNone Then       ct = ct + 1     End If   Next   PatternCellsCount = ct End Function

noname#63648
質問者

お礼

nishi6さま、いつもいつもありがとうございます。 ありゃ、条件付き書式の網掛けはだめなんですか。今回まさにそれなので、じゃあせっかく教えて頂いたけれど、だめですね。 申し訳ありません、でも勉強になりました。

関連するQ&A