[[20080125104133]] 『マクロにて』(涙) ページの最後に飛ぶ

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

 

『マクロにて』(涙)

 いつもお世話になります。
 もしお分かりでしたら、またお力添えを頂きたく投稿させて頂きました。
 例えば、A列〜L列まで何かしらのデータが入っているとします。
 L列には住所データが入っているのですが、住所ごとに並び替えがされています。
 同じ住所ごとに、A列〜J列まで入っている数字データを計算し、同じ住所の一番上の
 行K列に計算結果を出すという事は可能でしょうか?

  A    B     C     D     E     F     G      H     I    J    K    L
 1月  2月   3月   4月   5月	   6月   7月    8月   9月  10月 合計 住所
  1          1           1                                      東京都○○区
       1                                                        東京都○○区
                   1           1                                東京都○○区
             1                 1                                東京都××市
  1                                  1                          東京都××市
                                            1     1             東京都××市
                   1                                   1        東京都××市
                         1                                      千葉県□□市
       1                 1                  1                   千葉県□□市

 分かりづらくてすみません。
 上記のような表だと、住所が同じ行が2行だったり3行だったりします。
 これを、同じ住所ごとにA列〜J列の数字を計算し、各住所の先頭行のK列に合計を反映させたいのです。
 このような事はマクロで可能でしょうか?
 どうぞ、宣しくお願い致します。


 マクロでないとダメですか?
 数式ですが、
 K2=IF($L2=$L1,"",SUMPRODUCT(($L$2:$L$10=$L2)*$A$2:$J$10))
 と入力し、フィルダウンでどうでしょう。
 (ROUGE)

 ROUGEさん、早々のコメントありがとうございます!!
 しかも出来ました♪
 マクロでないと出来ないとおもっていたので、関数で出来るなんて
 思っておりませんでした。
 本当にありがとうございました!!!
 (涙)

 度々申し訳ありません。
 先ほどの表に、A列に氏名を追加し、L列〜O列の各住所の先頭部分に10月の数字を抽出させたいと思います。
 先ほどROUGEさんに教えて頂いた式を参考に、SUMPRODUCTをVLOOKUP関数に変えてやってみたのですが、最初の行のみ成功し、ドロップダウンすると変になってしまいます。
 数時間悩んだのですが、どうしても分かりません。
 ちなみに、私の考えた関数は、L2に『=IF($Q2=$Q1,"",VLOOKUP(L1,$A:$K,11,0))』で、M,N,Oまで列部分を変更して入力しました。
 こんな分かりづらい説明で理解して頂けますでしょうか?
 申し訳ありませんが、どうぞ宜しくお願い致します。
 (涙)

 A        B     C     D     E     F     G      H     I    J      K    L   M    N    O    P   Q
     1月   2月   3月   4月   5月	   6月    7月   8月  9月   10月  加藤山田 鈴木佐々木  合計 住所
 加藤           1           1           1                                                     東京都○○区
 山田           1                                                                          東京都○○区
 鈴木                      1            1                                                  東京都○○区
 加藤           1                 1                                                        東京都××市
 山田     1                                  1                                             東京都××市
 鈴木                                                 1        1                           東京都××市
 佐々木                    1                                   1                           東京都××市
 加藤                             1                                                        千葉県□□市
 山田           1                 1                   1                                    千葉県□□市


 10月分だけで良いのですかね?
 L2に
=IF($Q2=$Q1,"",SUMPRODUCT(($Q$2:$Q$10=$Q2)*($A$2:$A$10=L$1)*$K$2:$K$10))
 としてみるのはどうでしょう。

 (HANA)


 (HANA)さん!
 できました!!
 いまさらですが、VLOOKUPを使用する為には、昇順に並んでいないとだめだと気づきました・・・
 お手数をおかけして、すみませんでした。
 助かりました♪♪♪ どうもありがとうございました☆☆
 (涙)

 済みません、夕方は少し時間が無かったもので あまりじっくり見れていませんでした・・・・。

 >いまさらですが、VLOOKUPを使用する為には、昇順に並んでいないとだめだと気づきました・・・
 VLOOKUP関数が使用できる条件として
 「必ず昇順に並んでいる必要がある」
 と思って居られる方は多いようですが
 「必ず」ではありません。
 VLOOKUP関数は
VLOOKUP(検索値,範囲,列番号,検索の型)
 ↑の様に書きますが、この時~~~~~~~~検索の型に
 【TRUEを指定】あるいは【省略】したときに
 昇順に並んでいる必要があります。
 【FALSEを指定】した場合はどの様な並びでも検索出来ます。

 (涙)さんの作成なさった式では
VLOOKUP(L1,$A:$K,11,0)
                    ~
 【0(FALSE)が指定】されているので、
 上手く行かなかった理由は
 「範囲の先頭列が昇順になっていなかったため」ではありません。

 この式が、入力した式のコピペで有れば 二つ問題があると思います。
 一つは
 >最初の行のみ成功し、ドロップダウンすると変になってしまいます。
 式を5行目までフィルドラッグすると
VLOOKUP(L4,$A:$K,11,0)
        ~~検索値として、L4の値が使用されます。
 ここは、常に1行目を参照する必要があるので 行を絶対参照にする必要があります。
VLOOKUP(L$1,$A:$K,11,0)

 もう一つの問題点としては、範囲の中に検索値が複数存在する事です。
 VLOOKUP関数は、最初にヒットした行の指定列の値を返します。
 上の様に式を直して、下にフィルドラッグしても、一行目に出た結果と
 同じ結果が表示されてしまいます。

 それぞれの行を違うものとして取り扱いたい場合は
 検索値をユニークな物とし、範囲の先頭列もそれに対応して
 ユニークになっている必要があります。
 例えば↓の様に、A列に一列挿入して 作業列を作ります。
 「名前&住所」の項目にすれば、各行がユニークになりますので
 検索値も「名前&住所」として、検索出来ます。
	[A]        	[B]	[C]	[D]	[E]	[F]	[G]	[H]
[1]	           		1月	2月	3月	4月	5月	6月
[2]	加藤_東京都○○区 	加藤		1		1		1
[3]	山田_東京都○○区 	山田		1				
[4]	鈴木_東京都○○区 	鈴木				1		1
[5]	加藤_東京都××市 	加藤		1			1	
[6]	山田_東京都××市 	山田	1					
[7]	鈴木_東京都××市 	鈴木						
[8]	佐々木_東京都××市	佐々木				1		
[9]	加藤_千葉県□□市 	加藤					1	
[10]	山田_千葉県□□市 	山田		1			1	
 
	[I]	[J]	[K]	[L]	[M]	[N]	[O]	[P]	[Q]	[R]
[1]	7月	8月	9月	10月	加藤	山田	鈴木	佐々木	合計	住所
[2]					0	0	0	#N/A	#N/A	東京都○○区
[3]					0	0	0	#N/A	#N/A	東京都○○区
[4]					0	0	0	#N/A	#N/A	東京都○○区
[5]					0	0	1	1	2	東京都××市
[6]	1				0	0	1	1	2	東京都××市
[7]		1		1	0	0	1	1	2	東京都××市
[8]				1	0	0	1	1	2	東京都××市
[9]					0	0	#N/A	#N/A	#N/A	千葉県□□市
[10]		1			0	0	#N/A	#N/A	#N/A	千葉県□□市

 A2:A10に
=B2&"_"&R2
 M2:P10に
=VLOOKUP(M$1&"_"&$R2,$A:$L,12,FALSE)
 Q2:Q10に
=SUM(M2:P2)
 何れも先頭セルの式です。各セルは、コレをフィルドラッグした物です。

 分かりやすいように、エラー処理等全く加えておりません。
 例えば、エラー処理等を施した物は
 A2:A10に
=IF(B2="","",B2&"_"&R2)
 M2:P10に
=IF(OR($R2="",$R1=$R2),"",IF(COUNTIF($A:$A,M$1&"_"&$R2),VLOOKUP(M$1&"_"&$R2,$A:$L,12,FALSE),0))
 Q2:Q10に
=IF(M2="","",SUM(M2:P2))
 の様になると思います。
(それぞれ、最終行以上フィルドラッグできます。)
	[M]	[N]	[O]	[P]	[Q]	[R]
[1]	加藤	山田	鈴木	佐々木	合計	住所
[2]	0	0	0	0	0	東京都○○区
[3]						東京都○○区
[4]						東京都○○区
[5]	0	0	1	1	2	東京都××市
[6]						東京都××市
[7]						東京都××市
[8]						東京都××市
[9]	0	0	0	0	0	千葉県□□市
[10]						千葉県□□市

 ちなみに、Q列の「合計」って全体の合計だったのですかね?
 (10月のみではなく・・・。)

 (HANA)

コメント返信:

[ 一覧(最新更新順) ]


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