[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字入力有り、かつ背景色無しセルのカウント』(まとな)
マクロ初心者の者です。以前、背景色有りセルのカウント方法について、 「関数で処理するにはどうしたらよいか」と質問し、ヒントをいただいた のですが、その後、あるところでユーザー設定関数を利用する方法がある ということを知りました。 「エクセルの学校」で全文検索をかけたところ、たくさんの事例があり ましたが、小生が考えている「文字入力が有り、かつ背景色が無いセルを 数える」マクロを利用したユーザー設定関数の事例を見つけることができ ませんでした。 どなたかご教授願えませんか。 因みに次のようなイメージのことをしたいのです。 ユーザー設定関数名は仮に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.