[[20070208152128]] 『文字入力有り、かつ背景色無しセルのカウント』(まとな) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字入力有り、かつ背景色無しセルのカウント』(まとな)

 マクロ初心者の者です。以前、背景色有りセルのカウント方法について、
「関数で処理するにはどうしたらよいか」と質問し、ヒントをいただいた
のですが、その後、あるところでユーザー設定関数を利用する方法がある
ということを知りました。
 「エクセルの学校」で全文検索をかけたところ、たくさんの事例があり
ましたが、小生が考えている「文字入力が有り、かつ背景色が無いセルを
数える」マクロを利用したユーザー設定関数の事例を見つけることができ
ませんでした。
 どなたかご教授願えませんか。
 因みに次のようなイメージのことをしたいのです。
 ユーザー設定関数名は仮にmatonaとし、関数設定はmatona(適用セル範囲)
とします。範囲指定はA1:A5のように指定することを考えています。
 (ダメなら他の指定方法でもよろしいです。その場合は指定方法もお教え
ください。)

 イメージ
     A         B         C         D         E         
 1                       大山      笹川     2←ユーザー設定関数を
   ↑        ↑        ↑        ↑      入力しておいて
   背景有り  背景有り  背景無し  背景無し   文字入力が有り、
                                                かつ背景色無し
 2   山川                19                  2←セルの数をカウント
     ↑        ↑        ↑        ↑       して表示
     背景無し  背景有り  背景無し  背景無し    (以下の行も同じ) 

 3   25        山本      大川   太田      3←
   ↑        ↑        ↑        ↑
   背景有り 背景無し 背景無し  背景無し

 4   佐藤      横田                          1←
   ↑        ↑        ↑        ↑
   背景有り  背景無し  背景有り  背景有り

 5   1         2         3         2
   ↑        ↑        ↑        ↑
   ユーザー設定関数を入力しておき文字入力有り、
    かつ背景色無しセルの数をカウントして表示

 (Excel2003)(WindowsXP)

 かようなことでっか?
     (弥太郎)
 '------------
 Function matona(adrs As Range)
    Dim c As Range
    Application.Volatile
    For Each c In adrs
        If c.Interior.ColorIndex = xlNone And c.Value <> "" Then
            matona = matona + 1
        End If
    Next c
 End Function


 こんな感じでは?

 Function matona(rng As Range) As Long
 Dim r As Range
 Application.Volatile
 For Each r In rng
      If (TypeName(r.Value) = "String") * _
         (r.Interior.ColorIndex = xlNone) Then matona = matona + 1
 Next
 End Function
 (seiya)

 弥太郎様、Seiya様、早速ありがとうございました。
 Seiya様には、またまたお世話になりました。感謝です!
 動きました。うれしい限りです。
 「かつ」条件を弥太郎様は「Aand」、Seiya様は「*」で処理するなど
 お二人の処理のための記述に違いがあり、プログラミングの学習に
 本当に役立ちます。
 お二人のものを読解して、他にも活かせるように頑張ります。
                          (まとな)

 私のは、"文字列" で色無しセルのカウントですけど?
 数値の入ったセルはカウントしません、念のため...
 (seiya)

 またまた、やってしまったようです。動いた!という喜びで、
細かいところまで確認しないで有頂天になる、悪い点です。
 言われるとおり数値セルはカウントしませんね。数値セルも
カウントするようにはできないのでしょうか?そうなら、数値
セルはカウントし、文字セルはカウントしないとするにはどこ
をどう変更すればよいのでしょうか?
 加えて、セルの情報(文字あるいは数値を入力する・取り消し
て空白にする、背景色をつける・取り消す)を変更した場合に
再計算をさせる方法をお教えください。F9あるいはShift+F9
操作したのですが、計算結果が変更されません。シート上にマ
クロを貼ったボタンを用意するなんてことはできませんか?
 我が儘を言って済みませんが、お願いします。
                                           (まとな)

 (TypeName(r.Value) = "String")
 を

 1) (r.Value <> "")   すべてカウント
 2) (TypeName(r.Value) = "Double"   数値のみカウント

 TypeName関数の返り値は
 String
 Double
 Date
 Boolean
 等がありますので、組み合わせればいろいろと...

 Application.Volatile があるので F9で再計算されると思いますが?
 (seiya)

 大変失礼しました。前のコメントの前半は、Seiya様宛でした。
 Seiya様、早々のご回答、ありがとうございます。
 お名前を書かずに載せてしまいました。お許しください。
 失敗ばかりの50歳、恥ずかしい限りです。
 後半は、私の捜査上の問題なのでしょうか?
 もう一度、挑戦してみます。
 ところでボタンというのは、当該セル入力データを変更した後、
 シート上に用意したボタンを押すと再計算が自動で行われるこ
 とはできないだろうかと考えています。
  どなたか、ご教授願えませんか。
                   (まとな)

 F9 で再計算されませんか?

 Application.Volatile がコードにあることを確認してください。

 同じことですが、CommandButtonを配置するなら

 Private Sub CommandButton1_Click()
     Application.CalCulate
 End Sub

 ちなみに、TypeNameの返り値を調べるには

 Sub test()
 Dim r As Range
      For Each r In Selection
           MsgBox "Value :=" & vbTab & r.Value & vbLf & _
                  "Text  :=" & vbTab & r.Text & vbLf & _
                  "DataType:=" & vbTab & TypeName(r.Value)
      Next
 End Sub

 いろいろな値をセルに入力して調べてください。
 (seiya)

  Seiya様、ありがとうございます。F9で再計算されました。やはり、
 私の操作ミスだったようです。
  また、ボタンについてもお教えくださり、感謝、感謝です。
 TypeNameの返り値を調べる方法に付いてはぜひ試してみたいと思い
  ます。いろいろいじってみる?ことがプログラム理解には大切では
 ないですかと、友人も言いますので。いじくり回してみます。
                          (まとな)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.