[[20051215100342]] 『色付けをカウントして数をだしたい!』(モカ) >>BOT

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

 

『色付けをカウントして数をだしたい!』(モカ)
 こんにちは。

 縦の表があり、その中に4種類の色付けがしてあります。
 (色が付いてないところもあります)
 それを色ごとに、カウントして一番下に設けた合計の欄に
 数字が自動的に入るようにしたいのですが・・・
 こんな説明で通じますでしょうか・・・

 一番下の合計欄というのは、ピンク ○個、青 ○個、黄色 ○個
 という感じです。

 よろしくお願い致します。

 ユーザー定義関数です。
 1) Alt + F11 でVBEを起動
 2) 「挿入」->「標準モジュール」で右空白部分に下記コードを貼り付け
 3) x をクリックしてエクセル画面に戻る

 セルに
 =moca(範囲,カウントする色の付いたセル)
 =moca(A1:A100,A1) とか....

 Function moca(rng As Range, c As Range) As Long
 Dim r As Range, x As Integer
 x = c.Interior.ColorIndex
 For Each r In rng
     If r.Interior.ColorIndex = x Then
         moca = moca + 1
     End If
 Next
 End Function

 注:範囲の中の色を変更しても再計算されませんので、F9で再計算させてください。
 (seiya)


 お返事ありがとうございます。
 やってみたのですが・・・
 #VALUE! と表示されました・・・

 もっと詳細を申しますと、

 顧客名   数量 
 A            5(黄色)  
 B            2
 C            3(青)
 D            1
 E            10(ピンク)
 F            2
 G            8(黄色)
 H            5(黄色)
 I            7(黄色)
 J            15(ピンク)
_____________
     合計 58(SUM)

      ピンク 2社
      黄色  4社
      青   1社 ※ここの3つを自動で入れたい。

 という感じの表です。

 先程の方法でよろしいですか?
 色を識別してくれるコードが入っているのですか?

 あと、

 >2) 「挿入」->「標準モジュール」で右空白部分に下記コードを貼り付け

 とありましたが、右空白部分というのがわかりませんでした。
 空白部分は、大きく下に一つしかなく、そこにコードを貼り付けました。
 で、そのまま×で閉じたのですが、もう一度「標準モジュール」を
 開けてみたところ、貼り付け前の状態でしたが、ちゃんとできてるんで
 しょうか??

 何度も申し訳ありません

 (moca)

 標準モジュールを挿入すると、(通常)枠が2つあり、左がプロジェクトエクスプローラ、
 右が、コード記述部になるはずです。

 >もう一度「標準モジュール」を開けてみたところ、貼り付け前の状態でしたが

 何かおかしいですね。記述部に残ってないといけません。

 もう一度、同じ手順でやり直してください。(seiya) 

 同じ手順でやってみたところ、標準モジュールを開くと下に大きい空白しか
 でてこないのは変わりないのですが、左下に小さくアイコンがあり
 (エクセルで言うと「左寄せ」と「右寄せ」のような絵のアイコン)
 左にカーソルを合わせると、ロジェクトエクスプローラ
 右〃コードとポップアップが出てきたのでコードの方に貼り付けました。

 たぶんあってますよね?
 コードは「Funct」から始まる英語部分だけでいいんですよね?
 そして、また同じくもう一度標準モジュールを開けてみると、コードが
 残っておりました。

 で、セルに=moca(範囲)にしたのですが
 「名前が適切でありません:moca」と出てきました・・・

 どこがおかしいのでしょうか??

 あと、「 注:範囲の中の色を変更しても再計算されませんので、F9で再計算させてください」
 というのはどういうことですか?
 どのタイミングで再計算のためにF9を押せばいいのでしょうか?
 まず、教えていただいた事ができないと、この件はわからないでしょうが・・・

 すいません。お手数お掛けします(> <)  (moca)

 =moca(範囲,カウントする色の付いたセル)

 たとえば、カウントする範囲全体が A1:A100
 カウントしたい色の付いたセルが A1 (黄色)

 の場合

 =moca(A1:A100,A1)

 で黄色のカウントができるはずです。

 F9で再計算させなければならないのは、既に数式が入力されていて、
 範囲内のセルの色を変更したときです。
 その変更を感知させるのにF9で再計算しないといけません。

 >標準モジュールを開くと下に大きい空白しかでてこない....

 「表示」->「プロジェクトエクスプローラ」で左右に分かれるはずです。
 これが一般的なスタイルですので、変更しておいたほうが良いと思います。(seiya)

 セルの入力が範囲だけだったので、=moca(範囲,色の付いたセル<横に二つなんですが>)
 とやってみましたが、先程と同じく「名前が適切でありません:moca」と出てきました・・・

 やはり、コードの貼り付けがきちんとできていないから、mocaというのが
 読み取れないっぽいですね・・・

 この表を見て頂けたらいいのに・・・

 あと、プロジェクトエクスプローラを表示で出しましたが、標準モジュール
 とは別のウィンドウででてきました。
 これが原因でしょうか?
 あと、先程のアイコン(右寄せとか)のポップアップは左が「プロシージャの表示」
 右が「モジュール全体を連続表示」でした・・・

 さっきは、前回書き込んだ様に書いてあったのに・・・???
 これとは関係ないですか?

 名前が適切ではありませんのヘルプに書いてある事を貼り付けておきます。
 ↓

 識別子が別の識別子と競合しているか、または修飾が必要です。エラーの原因と対処方法を次に示します。 

 同じ適用範囲にある複数のオブジェクトに、同じ名前の要素がある可能性があります。 
 要素名にオブジェクト名とピリオドを付加して修飾します。次に例を示します。 

 object.property

 モジュール レベル識別子とプロジェクト レベル識別子 (モジュール名と参照先プロジェクト名) はプロシージャ内で再使用できますが、プログラミングが複雑になり、デバッグも難しくなります。両方の項目を同じプロシージャで参照する場合、適用範囲が広い方の項目は修飾しなければなりません。たとえば、MyModule のモジュール レベルで MyID を宣言している場合、プロシージャ レベルの変数をそのモジュール内に同じ名前で宣言しているときは、モジュール レベルの変数を適切に修飾しなければなりません。

Dim MyID As String
Sub MySub
MyModule.MyID = "モジュールレベルの変数です。"
Dim MyID As String
MyID = "プロシージャ レベルの変数です。"
Debug.Print MyID
Debug.Print MyModule.MyID
End Sub

モジュール レベルで宣言された識別子が、プロシージャ名と競合しています。たとえば、変数 MyID をモジュール レベルで宣言し、プロシージャを同じ名前で定義すると、このエラーになります。
Public MyID
Sub MyID
. . .
End Sub

この場合、共有モジュール名で修飾しても特定できないため、いずれかの名前を変更しなければなりません。プロシージャ名は特に指定しない限り、既定の Public ですが、変数名は Public と指定しない限り Private です。

詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。


 > この表を見て頂けたらいいのに・・・
 Yahooブリーフケースでも利用しては如何でしょう?
  (INA)

 >Yahooブリーフケースでも利用しては如何でしょう?
 良い方法だと思いますが、私は試用した経験がありません.....

 これの他に何かマクロ書いてますか?

 moca は予約語でもなんでも無いです。

 一度新しいブックで試してみては?(seiya)


 出来ました!!!
 ありがとうございました!!

 マクロが付いてるってナゼ分かったんですか?!
 開く度にマクロを有効か無効か聞かれて、嫌だな〜と思ってました。
 (マクロの意味も分かっておりません・・・)
 新しいBOOKにコピペして同じ作業すると、出来ました。

 で、始めの方の質問にもどるのですが・・・
 作成している表は、毎月横に先月分をコピペして増やしていくんですが、
 毎月、先月と比べて自分で数字を見て色づけしていきます。

 先程出来た所をコピペして次月に付けると莫大な数字が表示されました。
 数式を見てみると、先月の色付けした所が指定されております。
 (きっと言わなくてもお分かりでしょうが・・・)

 F9での更新の方法を教えて下さい。  
 PS. INAさんアドバイスありがとうございました。
 (moca)

 >=moca(範囲,色の付いたセル<横に二つなんですが>)
 これのことですか?

 いまいちよく理解できてないのですが....

 =moca(A1:B100,A1)

 てな感じですか?(seiya)

 p.s. F9ですが、上記の式が既に入力されていて、たとえば、どこかの色が変わったときなどです。


 説明不足で申し訳ありません。
 >=moca(範囲,色の付いたセル<横に二つなんですが>)
 というのは、問題ありませんでした。
 忘れて下さい。

 seiyaさんのおかげで、私がしたかったことは完成致しました。
 で、先程の件なんです・・・

 >作成している表は、毎月横に先月分をコピペして増やしていくんですが、
 毎月、先月と比べて自分で数字を見て色づけしていきます。

 先程出来た所をコピペして次月に付けると莫大な数字が表示されました。
 数式を見てみると、先月の色付けした所が指定されております。
 (きっと言わなくてもお分かりでしょうが・・・)

 F9での更新の方法を教えて下さい。 

 に対して
 > F9ですが、上記の式が既に入力されていて、たとえば、どこかの色が変わったときなどです。
 とお返事頂きました。

 先月のをコピペしたのでおかしくなった数式のセルを指定してF9ですか?
 どこでF9を押しても何も変変化がありません・・・
 色が毎回変わるのに、前月の欄で指定したから、色を覚えていてくれて
 F9を押せばその色を探してカウントして数字を表示してくれるんですか?

 質問の仕方が難しくて・・・

 伝わりますでしょうか?

 長い間お付き合い頂いてありがとうございます。(moca)

 たとえば、
 =A1+B1 という数式があり、A1,B1どちらでも変更があった場合は、自動的に再計算されますよね?
 それが無いのです。
 F9を押して、シートを再計算させないと、変更があったとき正しい数値が表示されません。
 わかりますか?(seiya)

 おっしゃることは理解いたしました。

 1月      2月
 ・       ・
 ・       ・
 ・       ・
 ピンク ○社
 青   ○社
 黄色  ○社

 となっていて、2月の列の下に、1月の色づけカウントのセルをコピーして
 貼り付けると、例えばピンクの○のセルに(A1:A100,A5)とかのままなので
 2月のA5はピンクの色付けはないので、間違いの数字が表示されます。

 どうしたら、次の月も色で見分けてカウントできるようにできますか?
 (A1:A100,A5)のA5を消して、2月のピンクのセルを指定しないとダメでしょうか?

 そうだとすれば、4種類の色に全てその作業が必要でしょうか?

 あと、意味は理解したのですが、F9で再計算させる時は実際何をした時なのか
 わかりません。

 あと、試しにちゃんと出来た所で1つの色付けを消してみました。
 が、カウントの数字が20→19など、反映されませんでした。
 このことかと思い、F9してみましたが、反応なしです。

 ご親切に教えて頂いたので、とても長い質問ボードになってしまったので、
 新しくボードを作成します。

 そちらにお返事頂ければ幸いです。
 (moca)

 再計算は Ctrl + Alt + F9 でできませんか? (アカギ)


 Function moca(rng As Range, c As Range) As Long
 Dim r As Range, x As Integer
 Application.Volatile '←追加
 x = c.Interior.ColorIndex
 For Each r In rng
     If r.Interior.ColorIndex = x Then
         moca = moca + 1
     End If
 Next
 End Function
 
このようにするとF9で再計算になりますが。
http://ryusendo.no-ip.com/cgi-bin/fswiki/wiki.cgi?page=ExcelVBA#p28
http://miyahorinn.fc2web.com/tips/s_02_02_04.html
(みやほりん)

 みやほりんさんの仰っている、マクロ関数で作ってみました。

     A     B       C            E          F      G        H
 1 	1月	   2月					
 2 顧客名 数量 	   数量					
 3 A	 5(黄色)     5				6	0
 4 B	 2	     2(ピンク)			0	7
 5 C	 3(青)	     3				5	0
 6 D	 1	     1(青)			0	5
 7 E	10(ピンク)  10				7	0
 8 F	 2	     2(青)			0	5
 9 G	 8(黄色)     8				6	0
10 H	 5(黄色)     5				6	0
11 I	 7(黄色)     7(黄色)			6	6
12 J	15(ピンク)  15(黄色)			7	6
13
14 合計	58	58					
15 
16 ピンク	 2	1					
17 黄色	 4	2
18 青	 1	2

 作業列を使用します。(ここでは仮にG列と、H列を使用しています)
 1)G3 にカーソルを持っていく
 2)挿入 → 名前 → 定義
 3)名前:iro (名前は、ご自身で分かるものなら何でもOK)
   参照範囲:=GET.CELL(24,B3)+NOW()*0 
   OK
 4)G3 =iro と、入力
 5)H12 までコピペ
 6)B16 =COUNTIF(G$3:G$12,LOOKUP($A16,{"ピンク","黄色","青";"7","6","5"}))
 7)C18 までコピペ

 文字色に変更(追加・削除・変更など)があった場合に、F9 で再計算してみてください。
 ※あくまで例になります。後は、ご自身の表に合わせて行ってみてください。

 (キリキ)(〃⌒o⌒)b

 んーー。
 application.volatile 落としてました。
 みやほりんさん、フォローありがとうございます。(seiya)

 皆さん色々ありがとうございました。
 何度もやってみたのですが、次の月にも反映させる事はできませんでした。
 けれど、色の付いている所を、毎月指定すると出来るので、
 それでやってみます。

 F9の再計算は出来ました(^^)

 長々とありがとうございました。感謝してます☆
 (moca)

コメント返信:

[ 一覧(最新更新順) ]


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