Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4362 / 13644 ツリー ←次へ | 前へ→

【57070】数値データの加算方法について教えてください。 さぶちゃん 08/7/22(火) 2:11 質問[未読]
【57072】Re:数値データの加算方法について教えてく... ハチ 08/7/22(火) 9:13 発言[未読]
【57081】Re:数値データの加算方法について教えてく... さぶちゃん 08/7/23(水) 1:18 質問[未読]
【57083】Re:数値データの加算方法について教えてく... ハチ 08/7/23(水) 9:20 発言[未読]
【57097】Re:数値データの加算方法について教えてく... さぶちゃん 08/7/24(木) 1:12 回答[未読]
【57099】Re:数値データの加算方法について教えてく... ハチ 08/7/24(木) 11:40 発言[未読]
【57111】Re:数値データの加算方法について教えてく... さぶちゃん 08/7/25(金) 0:15 回答[未読]
【57073】Re:数値データの加算方法について教えてく... ponpon 08/7/22(火) 9:24 発言[未読]
【57082】Re:数値データの加算方法について教えてく... さぶちゃん 08/7/23(水) 1:19 質問[未読]
【57084】Re:数値データの加算方法について教えてく... ponpon 08/7/23(水) 9:43 発言[未読]
【57098】Re:数値データの加算方法について教えてく... さぶちゃん 08/7/24(木) 1:23 回答[未読]
【57106】Re:数値データの加算方法について教えてく... Yuki 08/7/24(木) 17:15 発言[未読]
【57109】Re:数値データの加算方法について教えてく... さぶちゃん 08/7/24(木) 21:30 回答[未読]
【57112】Re:数値データの加算方法について教えてく... Yuki 08/7/25(金) 7:20 発言[未読]
【57121】Re:数値データの加算方法について教えてく... さぶちゃん 08/7/26(土) 0:02 質問[未読]
【57122】Re:数値データの加算方法について教えてく... Yuki 08/7/26(土) 8:05 発言[未読]
【57117】Re:数値データの加算方法について教えてく... ponpon 08/7/25(金) 13:17 発言[未読]

【57070】数値データの加算方法について教えてくだ...
質問  さぶちゃん  - 08/7/22(火) 2:11 -

引用なし
パスワード
   初歩的なVBAコードのサンプルや関数を駆使して考えてみてはいるのですがどうしても以下のやり方がわかりません。
厚かましいお願いですが、重ねて質問させて下さい。
E列に下記の様に同じ数値データがあったとして、それに最初(1回目)はC列にあるデータを加算します。この結果をF列に表示させ、差が出れば(下記、F7,F8)よしとしますが、仮に差が出なかった場合(下記、F2,F3)は次(2回目)にA列にあるデータを加算してその結果をG列に表示したいと思います。
この様なコードを作成したいのですが、つたない知識のため思いつきません。
どなたかご教授頂ければありがたいです。宜しくお願いいたします。

   A   B   C    D   E   F   G
1             7.3
2  6.5      6.2   7.0  7.0  13.2  19.7 
3  6.9      6.2   7.0  7.0  13.2  20.1
4             7.6
5             7.2
6             7.9
7  7.2      7.0  8.0  8.0  15.0
8  7.0      6.8   8.0  8.0  14.8
9             7.7

【57072】Re:数値データの加算方法について教えて...
発言  ハチ  - 08/7/22(火) 9:13 -

引用なし
パスワード
   ▼さぶちゃん さん:
>
>E列に下記の様に同じ数値データがあったとして、
>それに最初(1回目)はC列にあるデータを加算します。

E列+C列 を各行ごとに加算するのですね?

>この結果をF列に表示させ、差が出れば(下記、F7,F8)よしとしますが、

この『差が出れば』は、何と何の差ですか?
よくわかりません。
データは必ず2行づつなんでしょうか?

>仮に差が出なかった場合(下記、F2,F3)は
>次(2回目)にA列にあるデータを加算して
>その結果をG列に表示したいと思います。

G列=F列+A列 の値ということですね?


>   A   B   C    D   E   F   G
>1             7.3
>2  6.5      6.2   7.0  7.0  13.2  19.7 
>3  6.9      6.2   7.0  7.0  13.2  20.1
>4             7.6
>5             7.2
>6             7.9
>7  7.2      7.0  8.0  8.0  15.0
>8  7.0      6.8   8.0  8.0  14.8
>9             7.7

【57073】Re:数値データの加算方法について教えて...
発言  ponpon  - 08/7/22(火) 9:24 -

引用なし
パスワード
   ▼さぶちゃん さん:
>初歩的なVBAコードのサンプルや関数を駆使して考えてみてはいるのですがどうしても以下のやり方がわかりません。
>厚かましいお願いですが、重ねて質問させて下さい。
>E列に下記の様に同じ数値データがあったとして、それに最初(1回目)はC列にあるデータを加算します。この結果をF列に表示させ、差が出れば(下記、F7,F8)よしとしますが、仮に差が出なかった場合(下記、F2,F3)は次(2回目)にA列にあるデータを加算してその結果をG列に表示したいと思います。
>この様なコードを作成したいのですが、つたない知識のため思いつきません。
>どなたかご教授頂ければありがたいです。宜しくお願いいたします。
>
>   A   B   C    D   E   F   G
>1             7.3
>2  6.5      6.2   7.0  7.0  13.2  19.7 
>3  6.9      6.2   7.0  7.0  13.2  20.1
>4             7.6
>5             7.2
>6             7.9
>7  7.2      7.0  8.0  8.0  15.0
>8  7.0      6.8   8.0  8.0  14.8
>9             7.7

時間がないので考え方だけ
単純にループする方法
E列をデータがあるだけ順に見ていって、D列(offset(,-1))と同じだったら、
F列(offset(,1))にE列とC列をプラス
これでF列のできあがり。

次は、G列ですが、
これは、サンプルは2つずつですが、実際はどうなんでしょう。
これもF列を順に見ていって一つ下と比較して、""ではなく、同じであれば、
F列にA列(offset(,-5)を足してやる。
これで、G列完成かな?

【57081】Re:数値データの加算方法について教えて...
質問  さぶちゃん  - 08/7/23(水) 1:18 -

引用なし
パスワード
   ▼ハチ さん:
サンプルとしてお見せしたものが適切でないために説明不足になってしまいました。私が処理を実行したいと思っている正確なものは以下の様な数値データです。
これはある試験の点数表で、ここでは9名の各試験者の点数がA列からE列まで入力されています。F列がその合計点(高得点順)となりますが、もし同点がいた場合はG列に一度表示します。その同点に対して順位を付けるために、まず最初にF列の合計点にD列にある点数を加算します。ここではA3、A4の試験者が同点ですがD列の点数を加算するとA4の試験者の方が高得点となるのでA3、A4の行を入れ替えてA4の行が上になる様に入れ替えた形でH列に表示します。(ここでは入れ替えが出来ないためそのままH列に表示してあるだけですが。)
この様にD列の加算で順位が付いた場合はここまでの処理となりますが、同じ様に同点となっている7行目から9行目までの場合、上記と同じやり方でD列を加算すると、まず9行目が得点が高いのでH列に9行目が上となって表示します。
7行と8行はD列の値が同じため、次の手順としてB列を加算します。
これで得点差が出れば高得点者が上位となりますが、ここではB列の値も同じため、次の手順としてはA列とE列の合計点をF列の点数に足します。
ここでは7行目のA列の値が8行目より高いため最終的にJ列にこの3つの同点の順位としては9行、7行、8行という順位として表示します。
すみません、長々と書いてしまいましたが、ざっとこんな感じの処理を一気にではなく上述した様なステップを踏みながら処理していきたいと思っています。
VBAコード初心者の私には色々な参考文献を見て試行錯誤しているのですがこの様に複雑になると全くわかりません。
誠に勝手ではありますが、アドバイスの程宜しくお願いいたします。

  A   B   C   D   E   F   G   H   I   J
1 8.0  8.0   7.9  7.8  7.1  23.7
2 7.9  7.8   7.6  7.3   7.1  22.7       
3 7.9  7.6   7.6  7.3  7.2  22.5  22.5  22.5
4 7.8  7.6  7.5  7.4  7.1  22.5  22.5  22.5
5 7.9  7.7  7.4  7.3  7.0  22.4      
6 7.8  7.6  7.4  7.3  7.2  22.3      
7 7.9  7.5   7.4  7.2  7.0  22.1  22.1  22.1  22.1 22.1
8 7.8  7.5   7.4  7.2   7.0  22.1  22.1  22.1  22.1 22.1
9 7.9  7.5   7.3  7.3   7.1  22.1  22.1  22.1  22.1 22.1

【57082】Re:数値データの加算方法について教えて...
質問  さぶちゃん  - 08/7/23(水) 1:19 -

引用なし
パスワード
   ▼ponpon さん:
サンプルとしてお見せしたものが適切でないために説明不足になってしまいました。私が処理を実行したいと思っている正確なものは以下の様な数値データです。
これはある試験の点数表で、ここでは9名の各試験者の点数がA列からE列まで入力されています。F列がその合計点(高得点順)となりますが、もし同点がいた場合はG列に一度表示します。その同点に対して順位を付けるために、まず最初にF列の合計点にD列にある点数を加算します。ここではA3、A4の試験者が同点ですがD列の点数を加算するとA4の試験者の方が高得点となるのでA3、A4の行を入れ替えてA4の行が上になる様に入れ替えた形でH列に表示します。(ここでは入れ替えが出来ないためそのままH列に表示してあるだけですが。)
この様にD列の加算で順位が付いた場合はここまでの処理となりますが、同じ様に同点となっている7行目から9行目までの場合、上記と同じやり方でD列を加算すると、まず9行目が得点が高いのでH列に9行目が上となって表示します。
7行と8行はD列の値が同じため、次の手順としてB列を加算します。
これで得点差が出れば高得点者が上位となりますが、ここではB列の値も同じため、次の手順としてはA列とE列の合計点をF列の点数に足します。
ここでは7行目のA列の値が8行目より高いため最終的にJ列にこの3つの同点の順位としては9行、7行、8行という順位として表示します。
すみません、長々と書いてしまいましたが、ざっとこんな感じの処理を一気にではなく上述した様なステップを踏みながら処理していきたいと思っています。
VBAコード初心者の私には色々な参考文献を見て試行錯誤しているのですがこの様に複雑になると全くわかりません。
誠に勝手ではありますが、アドバイスの程宜しくお願いいたします。

  A   B   C   D   E   F   G   H   I   J
1 8.0  8.0   7.9  7.8  7.1  23.7
2 7.9  7.8   7.6  7.3   7.1  22.7       
3 7.9  7.6   7.6  7.3  7.2  22.5  22.5  22.5
4 7.8  7.6  7.5  7.4  7.1  22.5  22.5  22.5
5 7.9  7.7  7.4  7.3  7.0  22.4      
6 7.8  7.6  7.4  7.3  7.2  22.3      
7 7.9  7.5   7.4  7.2  7.0  22.1  22.1  22.1  22.1 22.1
8 7.8  7.5   7.4  7.2   7.0  22.1  22.1  22.1  22.1 22.1
9 7.9  7.5   7.3  7.3   7.1  22.1  22.1  22.1  22.1 22.1

【57083】Re:数値データの加算方法について教えて...
発言  ハチ  - 08/7/23(水) 9:20 -

引用なし
パスワード
   ▼さぶちゃん さん:

内容が少しづつ整理されてきていますが、
まだまだ、不明点があります。

>高得点となるのでA3、A4の行を入れ替えてA4の行が上になる様に
>入れ替えた形でH列に表示します。

再度、並び替え(sort)するということですか?
行ごとに表全体を並び替えるのですよね?

文章を読むと各列の重み(優先順位ですね)は、
F>D>B>A+E
ということですかね?

>ざっとこんな感じの処理を一気にではなく
>上述した様なステップを踏みながら処理していきたいと思っています。

つまり複数のマクロを作成して、
ステップごとに実行していきたいということですか?
分割したいステップごとに分けて考えてみてはどうですか?

【第1ステップ】
1.表全体をF列でsort
2.F列で同じ値の部分をG列に書き出し
3.G列の値がある部分対して、D列を加算し、H列に書き出し
4.F列>H列 で再Sort

といった感じですか?

>VBAコード初心者の私には色々な参考文献を見て試行錯誤しているのですがこの様に複雑になると全くわかりません。
>誠に勝手ではありますが、アドバイスの程宜しくお願いいたします。

この『思考錯誤』した部分を書いてください。

【57084】Re:数値データの加算方法について教えて...
発言  ponpon  - 08/7/23(水) 9:43 -

引用なし
パスワード
   ▼さぶちゃん さん:
>F列がその合計点(高得点順)となりますが、もし同点がいた場合はG列に一度表示します。その同点に対して順位を付けるために、まず最初にF列の合計点にD列にある点数を加算します。ここではA3、A4の試験者が同点ですがD列の点数を加算するとA4の試験者の方が高得点となるのでA3、A4の行を入れ替えてA4の行が上になる様に入れ替えた形でH列に表示します。(ここでは入れ替えが出来ないためそのままH列に表示してあるだけですが。)
>この様にD列の加算で順位が付いた場合はここまでの処理となりますが、同じ様に同点となっている7行目から9行目までの場合、上記と同じやり方でD列を加算すると、まず9行目が得点が高いのでH列に9行目が上となって表示します。
>7行と8行はD列の値が同じため、次の手順としてB列を加算します。
>これで得点差が出れば高得点者が上位となりますが、ここではB列の値も同じため、次の手順としてはA列とE列の合計点をF列の点数に足します。
>ここでは7行目のA列の値が8行目より高いため最終的にJ列にこの3つの同点の順位としては9行、7行、8行という順位として表示します。
>すみません、長々と書いてしまいましたが、ざっとこんな感じの処理を一気にではなく上述した様なステップを踏みながら処理していきたいと思っています。
>VBAコード初心者の私には色々な参考文献を見て試行錯誤しているのですがこの様に複雑になると全くわかりません。

    A    B    C    D    E    F    G
1    名前    項目1    項目2    項目3    項目4    項目5    合計
2    A    8.0    8.0    7.9    7.8    7.1     23.7
3    B    7.9    7.8    7.6    7.3    7.1     22.7
4    C    7.9    7.6    7.6    7.3    7.2     22.5
5    D    7.8    7.6    7.5    7.4    7.1     22.5
6    E    7.9    7.7    7.4    7.3    7.0     22.4
7    F    7.8    7.6    7.4    7.3    7.2     22.3
8    G    7.9    7.5    7.4    7.2    7.0     22.1
9    H    7.8    7.5    7.4    7.2    7.0     22.1
10    I    7.9    7.5    7.3    7.3    7.1     22.1

上記のようなデータがあるとして、並べ替えで
優先順位が、G列の合計、次がE列の項目4、そしてその次がC列の項目2、ここまで
一回の操作でできます。
その後、もう一度並べ替えで、最優先がG列の合計、次がB列の項目1、そしてその次が項目5と二回ソートすれば良いのでは?
コードは、マクロの記録で・・・

Keyが3つ以上のソートは、ichionseさんがどこかに書いていたと思うのですが、
見つかりませんでした。
見つけた人教えてください。

【57097】Re:数値データの加算方法について教えて...
回答  さぶちゃん  - 08/7/24(木) 1:12 -

引用なし
パスワード
   ▼ハチ さん:
アドバイスありがとうございます。

>>高得点となるのでA3、A4の行を入れ替えてA4の行が上になる様に
>>入れ替えた形でH列に表示します。
>
>再度、並び替え(sort)するということですか?
>行ごとに表全体を並び替えるのですよね?

はい、並び替えはしますが全体ではなく、D列を加算した結果、H列でA4の値の方がA3より大きくなるためA3とA4の2行のみ並び替えをします。(ゴメンなさい、H列の値の記述に誤りがありました。正しくはA3が29.8、A4が29.9となります)
よって、H列は降順A4(29.9)、A3(29.8)の並びにしたいという事です。

>文章を読むと各列の重み(優先順位ですね)は、
>F>D>B>A+E
>ということですかね?

説明不足で申し訳ありません。
正確にお伝えするために、今までのサンプル的なデータでの話しではなく、以下にありのままのデータでのご説明とさせて頂きます。

A列に試験順、B列に氏名が予め人数分入力されている元データがあります。
1番目の試験者に対してC列からG列までの5項目の試験の得点が入力されたら、H列(1セル分)空けて隣のK列からO列まで(I列は試験順、J列は氏名)のセルに元データをコピーすると同時に色々な加工をする事にしました。このコピーする意味は元データはそのまま変えずに残しておきたいからです。
コピー先の加工とは、コピーと同時に得点データのKからOまでを左から順にK列:最高点、L列:中間点1、M列:中間点2:、N列:中間点3、O列:最小点となる様に並び替えをし、同時に最高点と最小点に色付けをし、更にP列に合計点も出すというものです。(得点データの中で最高点と中間点1、最小点と中間点3が同じ値の場合は並び替えてもA列とB列、D列とE列が同じ値となる場合があります。)
ここで合計点についてですが、最高点と最小点は省いた残りの3つの得点(中間点1・2・3)の合計としています。
この手順で一人ずつ処理を実行していき9人(この人数は仮にですが)分の合計点までの全ての処理が終了したらP列の合計点を降順(高得点順)に並び替えをして、その合計点の中にもし同点がいたらQ列にその同点の得点を表示するというところまで何とかコードは出来ました。(コードを実行するボタンなどはまだ未完成ですが。)

後は、Q列の同点に対して順位付けをする処理なのですが、まずQ列の得点にN列の点数を加算して合計点の高い方が上位となる様にします。しかし、それで優劣が付かない場合は次に、同じ様にQ列にL列を加算して優劣を付けます。それでも優劣が付かない時は、最後に初めに省いたK列の最高点とO列の最小点の合計をQ列に加算して順位付けをするという手順にしたいのです。(これでも優劣が付かない場合は最終的に同点とします。)
この同点に対する処理は一括処理ではなく、3つのステップを踏んで一つずつ処理したいと思っています。
優先順位としてはN列>L列>K列+O列となるでしょうか。

上述した同点の部分をQ列に表示するという所から先のコードについてはどの様にしたら良いかまだ知恵が浮かびません。
以下に元データとQ列に表示させるところまでのコードを記述しました。
尚、参考までに私のエクセルのバージョンはExcel2002です。
この後の希望としては、Q列の同点に対し、上述した同点の処理により、R列に3行目と4行目の行の並び替えと、同じ様に7、8,9行目の同点に対し、同じ処理方法によりR列に9行目が上位となる様に並び替えし、更に7行目と8行目に対し、L列を加算しますが、優劣が付かないため、最後としてK列とO列の合計点をP列に加算すると7行目の方が高得点となりS列に7行目が上位となる様に表示出来る様なコードを作成する事です。
この通りに処理が出来たとすると最終的な順位としては、行で表示すると下記の様になると思います。(左から降順)

2  3  5  4  6  7  10  8  9

可能であれば最後のS列に最終的な形として1行目から9行目まで上記の同点の処理後の合計点が高い順(降順)に並び替えされた形で表示が出来ればありがたいのですが。
長々と書いて申し訳ありませんが宜しくお願いいたします。

(元データ)
 A  B  C  D  E  F  G    
 No 氏名 点数 点数 点数 点数 点数
 1 氏名 7.4 7.5 7.0 7.2 7.9 
 2 氏名 7.0 7.8 7.5 7.4 7.2        
 3 氏名 7.4 7.0 7.3 7.9 7.7  
 4 氏名 7.1 7.9 7.8 7.3 7.6  
 5 氏名 7.3 7.1 7.5 7.3 7.9      
 6 氏名 7.2 7.3 7.9 7.6 7.6       
 7 氏名 7.4 7.1 7.5 7.6 7.8  
 8 氏名 7.1 7.8 8.0 8.0 7.9  
 9 氏名 7.2 7.4 7.3 7.8 7.6  

(コピー先)
 I  J  K   L    M    N    O   P   Q    
 No 氏名 最高点 中間点1 中間点2 中間点3 最小点 合計
 1 氏名 8.0  8.0   7.9   7.8   7.1  23.7
 2 氏名 7.9  7.8   7.6   7.3   7.1  22.7       
 3 氏名 7.9  7.6   7.6   7.3   7.2  22.5 29.8 
 4 氏名 7.8  7.6   7.5   7.4   7.1  22.5 29.9 
 5 氏名 7.9  7.7   7.4   7.3   7.0  22.4      
 6 氏名 7.8  7.6   7.4   7.3   7.2  22.3      
 7 氏名 7.9  7.5   7.4   7.2   7.0  22.1 29.3 
 8 氏名 7.8  7.5   7.4   7.2   7.0  22.1 29.3 
 9 氏名 7.9  7.5   7.3   7.3   7.1  22.1 29.4 

(コード)
Sub Macro1()
With Range("I1:P2").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("I1") = "試験順"
Range("J1") = "氏名"
Range("K1") = "最高点"
Range("L1") = "中間点1"
Range("M1") = "中間点2"
Range("N1") = "中間点3"
Range("O1") = "最小点"
Range("P1") = "合計点"
Range("A2:G2").Copy Range("I2:O2")
Range("K2:O2").Sort _
Key1:=Range("K2:O2"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K1:K2").Interior.ColorIndex = 8
Range("O1:O2").Interior.ColorIndex = 6
Range("P2").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro2()
With Range("P3").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A3:G3").Copy Range("I3:O3")
Range("K3:O3").Sort _
Key1:=Range("K3:O3"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K3").Interior.ColorIndex = 8
Range("O3").Interior.ColorIndex = 6
Range("P3").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro3()
With Range("P4").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A4:G4").Copy Range("I4:O4")
Range("K4:O4").Sort _
Key1:=Range("K4:O4"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K4").Interior.ColorIndex = 8
Range("O4").Interior.ColorIndex = 6
Range("P4").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro4()
With Range("P5").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A5:G5").Copy Range("I5:O5")
Range("K5:O5").Sort _
Key1:=Range("K5:O5"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K5").Interior.ColorIndex = 8
Range("O5").Interior.ColorIndex = 6
Range("P5").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro5()
With Range("P6").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A6:G6").Copy Range("I6:O6")
Range("K6:O6").Sort _
Key1:=Range("K6:O6"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K6").Interior.ColorIndex = 8
Range("O6").Interior.ColorIndex = 6
Range("P6").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro6()
With Range("P7").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A7:G7").Copy Range("I7:O7")
Range("K7:O7").Sort _
Key1:=Range("K7:O7"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K7").Interior.ColorIndex = 8
Range("O7").Interior.ColorIndex = 6
Range("P7").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro7()
With Range("P8").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A8:G8").Copy Range("I8:O8")
Range("K8:O8").Sort _
Key1:=Range("K8:O8"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K8").Interior.ColorIndex = 8
Range("O8").Interior.ColorIndex = 6
Range("P8").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro8()
With Range("P9").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A9:G9").Copy Range("I9:O9")
Range("K9:O9").Sort _
Key1:=Range("K9:O9"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K9").Interior.ColorIndex = 8
Range("O9").Interior.ColorIndex = 6
Range("P9").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro9()
With Range("P10").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A10:G10").Copy Range("I10:O10")
Range("K10:O10").Sort _
Key1:=Range("K10:O10"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K10").Interior.ColorIndex = 8
Range("O10").Interior.ColorIndex = 6
Range("P10").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro10()
  Range("R7").Select
  Application.Width = 750.75
  Application.Height = 381.75
  Columns("P:P").Select
  Range("I1:P11").Sort Key1:=Range("P1"), Order1:=xlDescending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortNormal
  Range("L14").Select
End Sub
Sub Macro11()
  Dim myR As Range
  Set myR = Range("P1", Range("P" & Rows.Count).End(xlUp))
  With myR.Offset(, 1)
     .Formula = "=IF(COUNTIF(" & myR.Address & ",P1)>1,P1,"""")"
     .Value = .Value
  End With
End Sub

【57098】Re:数値データの加算方法について教えて...
回答  さぶちゃん  - 08/7/24(木) 1:23 -

引用なし
パスワード
   ▼ponpon さん:
色々とアドバイスをありがとうございます。

説明不足で正しく伝わらず、申し訳ありません。
正確にお伝えするために、今までのサンプル的なデータでの話しではなく、以下にありのままのデータでのご説明とさせて頂きます。
一番最後に、この質問の元データとponponさんにご教授頂いたコードを含めたコードを記述してありますので宜しくお願いいたします。

A列に試験順、B列に氏名が予め人数分入力されている元データがあります。
1番目の試験者に対してC列からG列までの5項目の試験の得点が入力されたら、H列(1セル分)空けて隣のK列からO列まで(I列は試験順、J列は氏名)のセルに元データをコピーすると同時に色々な加工をする事にしました。このコピーする意味は元データはそのまま変えずに残しておきたいからです。
コピー先の加工とは、コピーと同時に得点データのKからOまでを左から順にK列:最高点、L列:中間点1、M列:中間点2:、N列:中間点3、O列:最小点となる様に並び替えをし、同時に最高点と最小点に色付けをし、更にP列に合計点も出すというものです。(得点データの中で最高点と中間点1、最小点と中間点3が同じ値の場合は並び替えてもA列とB列、D列とE列が同じ値となる場合があります。)
ここで合計点についてですが、最高点と最小点は省いた残りの3つの得点(中間点1・2・3)の合計としています。
この手順で一人ずつ処理を実行していき9人(この人数は仮にですが)分の合計点までの全ての処理が終了したらP列の合計点を降順(高得点順)に並び替えをして、その合計点の中にもし同点がいたらQ列にその同点の得点を表示するというところまで何とかコードは出来ました。(コードを実行するボタンなどはまだ未完成ですが。)

後は、Q列の同点に対して順位付けをする処理なのですが、まずQ列の得点にN列の点数を加算して合計点の高い方が上位となる様にします。しかし、それで優劣が付かない場合は次に、同じ様にQ列にL列を加算して優劣を付けます。それでも優劣が付かない時は、最後に初めに省いたK列の最高点とO列の最小点の合計をQ列に加算して順位付けをするという手順にしたいのです。(これでも優劣が付かない場合は最終的に同点とします。)
この同点に対する処理は一括処理ではなく、3つのステップを踏んで一つずつ処理したいと思っています。
優先順位としてはN列>L列>K列+O列となるでしょうか。

上述した同点の部分をQ列に表示するという所から先のコードについてはどの様にしたら良いかまだ知恵が浮かびません。
以下に元データとQ列に表示させるところまでのコードを記述しました。
尚、参考までに私のエクセルのバージョンはExcel2002です。
この後の希望としては、Q列の同点に対し、上述した同点の処理により、R列に3行目と4行目の行の並び替えと、同じ様に7、8,9行目の同点に対し、同じ処理方法によりR列に9行目が上位となる様に並び替えし、更に7行目と8行目に対し、L列を加算しますが、優劣が付かないため、最後としてK列とO列の合計点をP列に加算すると7行目の方が高得点となりS列に7行目が上位となる様に表示出来る様なコードを作成する事です。
この通りに処理が出来たとすると最終的な順位としては、行で表示すると下記の様になると思います。(左から降順)

2  3  5  4  6  7  10  8  9

可能であれば最後のS列に最終的な形として1行目から9行目まで上記の同点の処理後の合計点が高い順(降順)に並び替えされた形で表示が出来ればありがたいのですが。
長々と書いて申し訳ありませんが宜しくお願いいたします。

(元データ)
 A  B  C  D  E  F  G    
 No 氏名 点数 点数 点数 点数 点数
 1 氏名 7.4 7.5 7.0 7.2 7.9 
 2 氏名 7.0 7.8 7.5 7.4 7.2        
 3 氏名 7.4 7.0 7.3 7.9 7.7  
 4 氏名 7.1 7.9 7.8 7.3 7.6  
 5 氏名 7.3 7.1 7.5 7.3 7.9      
 6 氏名 7.2 7.3 7.9 7.6 7.6       
 7 氏名 7.4 7.1 7.5 7.6 7.8  
 8 氏名 7.1 7.8 8.0 8.0 7.9  
 9 氏名 7.2 7.4 7.3 7.8 7.6  

(コピー先)
 I  J  K   L    M    N    O   P   Q    
 No 氏名 最高点 中間点1 中間点2 中間点3 最小点 合計
 1 氏名 8.0  8.0   7.9   7.8   7.1  23.7
 2 氏名 7.9  7.8   7.6   7.3   7.1  22.7       
 3 氏名 7.9  7.6   7.6   7.3   7.2  22.5 29.8 
 4 氏名 7.8  7.6   7.5   7.4   7.1  22.5 29.9 
 5 氏名 7.9  7.7   7.4   7.3   7.0  22.4      
 6 氏名 7.8  7.6   7.4   7.3   7.2  22.3      
 7 氏名 7.9  7.5   7.4   7.2   7.0  22.1 29.3 
 8 氏名 7.8  7.5   7.4   7.2   7.0  22.1 29.3 
 9 氏名 7.9  7.5   7.3   7.3   7.1  22.1 29.4 

(コード)
Sub Macro1()
With Range("I1:P2").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("I1") = "試験順"
Range("J1") = "氏名"
Range("K1") = "最高点"
Range("L1") = "中間点1"
Range("M1") = "中間点2"
Range("N1") = "中間点3"
Range("O1") = "最小点"
Range("P1") = "合計点"
Range("A2:G2").Copy Range("I2:O2")
Range("K2:O2").Sort _
Key1:=Range("K2:O2"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K1:K2").Interior.ColorIndex = 8
Range("O1:O2").Interior.ColorIndex = 6
Range("P2").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro2()
With Range("P3").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A3:G3").Copy Range("I3:O3")
Range("K3:O3").Sort _
Key1:=Range("K3:O3"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K3").Interior.ColorIndex = 8
Range("O3").Interior.ColorIndex = 6
Range("P3").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro3()
With Range("P4").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A4:G4").Copy Range("I4:O4")
Range("K4:O4").Sort _
Key1:=Range("K4:O4"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K4").Interior.ColorIndex = 8
Range("O4").Interior.ColorIndex = 6
Range("P4").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro4()
With Range("P5").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A5:G5").Copy Range("I5:O5")
Range("K5:O5").Sort _
Key1:=Range("K5:O5"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K5").Interior.ColorIndex = 8
Range("O5").Interior.ColorIndex = 6
Range("P5").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro5()
With Range("P6").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A6:G6").Copy Range("I6:O6")
Range("K6:O6").Sort _
Key1:=Range("K6:O6"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K6").Interior.ColorIndex = 8
Range("O6").Interior.ColorIndex = 6
Range("P6").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro6()
With Range("P7").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A7:G7").Copy Range("I7:O7")
Range("K7:O7").Sort _
Key1:=Range("K7:O7"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K7").Interior.ColorIndex = 8
Range("O7").Interior.ColorIndex = 6
Range("P7").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro7()
With Range("P8").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A8:G8").Copy Range("I8:O8")
Range("K8:O8").Sort _
Key1:=Range("K8:O8"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K8").Interior.ColorIndex = 8
Range("O8").Interior.ColorIndex = 6
Range("P8").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro8()
With Range("P9").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A9:G9").Copy Range("I9:O9")
Range("K9:O9").Sort _
Key1:=Range("K9:O9"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K9").Interior.ColorIndex = 8
Range("O9").Interior.ColorIndex = 6
Range("P9").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro9()
With Range("P10").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("A10:G10").Copy Range("I10:O10")
Range("K10:O10").Sort _
Key1:=Range("K10:O10"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K10").Interior.ColorIndex = 8
Range("O10").Interior.ColorIndex = 6
Range("P10").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub
Sub Macro10()
  Range("R7").Select
  Application.Width = 750.75
  Application.Height = 381.75
  Columns("P:P").Select
  Range("I1:P11").Sort Key1:=Range("P1"), Order1:=xlDescending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortNormal
  Range("L14").Select
End Sub
Sub Macro11()
  Dim myR As Range
  Set myR = Range("P1", Range("P" & Rows.Count).End(xlUp))
  With myR.Offset(, 1)
     .Formula = "=IF(COUNTIF(" & myR.Address & ",P1)>1,P1,"""")"
     .Value = .Value
  End With
End Sub

【57099】Re:数値データの加算方法について教えて...
発言  ハチ  - 08/7/24(木) 11:40 -

引用なし
パスワード
   ▼さぶちゃん さん:

>同点の部分をQ列に表示するという所から先のコードについては
>どの様にしたら良いかまだ知恵が浮かびません。

Q列に同点の箇所を表示するところまではできた。
Q列の表示されている箇所にN列の値を足してR列に表示する。ができていない。

ということで良いですね?

単純なループで処理するならこんな感じです。
あとは、応用していけばできると思います。

並び替えに部分は、P列>R列 で並び替えをマクロの記録で取得してください。

Sub Test()
  Dim i As Long
  
  For i = 2 To 10 '行数 2行目〜10行目
    If Range("Q" & i).Value <> "" Then
      Range("R" & i).Value = _
      Range("Q" & i).Value + Range("N" & i).Value
    End If
  Next
End Sub

【57106】Re:数値データの加算方法について教えて...
発言  Yuki  - 08/7/24(木) 17:15 -

引用なし
パスワード
   ▼さぶちゃん さん:
こんにちは。
結果を見てください。後で修正しましょう。

Sub TEST34()
  Dim i  As Long
  Dim eR As Long
  Dim vA As Variant
  Dim ary As Variant
  
  ary = Array("No.", "氏名", "最高点", "中間点1", "中間点2", _
                "中間点3", "最小点", "合計")
  With Worksheets(3)
    With .Range("I1").CurrentRegion
    ' 初期化
      .Borders(xlDiagonalDown).LineStyle = xlNone
      .Borders(xlDiagonalUp).LineStyle = xlNone
      .Borders(xlEdgeLeft).LineStyle = xlNone
      .Borders(xlEdgeTop).LineStyle = xlNone
      .Borders(xlEdgeBottom).LineStyle = xlNone
      .Borders(xlEdgeRight).LineStyle = xlNone
      .Borders(xlInsideVertical).LineStyle = xlNone
      .Borders(xlInsideHorizontal).LineStyle = xlNone
      .Interior.ColorIndex = xlNone
      .ClearContents
    End With
    ' データセット
    .Range("A1").CurrentRegion.Copy .Range("I1")
    .Range("I1").Resize(, 8).Value = ary
    eR = .Range("I" & Rows.Count).End(xlUp).Row
    
    ' 書式設定
    ' 外枠
    With .Range("I1").CurrentRegion
      With .Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = 1
      End With
      With .Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = 1
      End With
      With .Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = 1
      End With
      With .Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlThin
        .ColorIndex = 1
      End With
    End With
    ' 一行目の区切り
    With .Range("I1:P1").Borders
      .Weight = xlThin
      .ColorIndex = 1
    End With
    ' P 列の線
    With .Range("P2:P" & eR).Borders
     .Weight = xlThin
     .ColorIndex = 1
    End With
    
    ' 列のソートと合計
    For i = 2 To eR
      .Range(.Cells(i, 11), .Cells(i, 15)).Sort _
                Key1:=Range("K" & i), Order1:=xlDescending, _
                Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
                Orientation:=xlLeftToRight, SortMethod:=xlPinYin
      .Cells(i, 16).Value = Application.Sum(.Range(.Cells(i, 12), .Cells(i, 14)))
    Next
    ' 書式設定 列の色
    .Range("K1:K" & eR).Interior.ColorIndex = 8
    .Range("O1:O" & eR).Interior.ColorIndex = 6
    
    ' 行のソート .Range("I1").CurrentRegion でもOK
    .Range("I1:P" & eR).Sort Key1:=.Range("K1"), Order1:=xlDescending, _
                 Key2:=.Range("O1"), Order2:=xlDescending, _
                 Header:=xlYes, OrderCustom:=1, _
                 MatchCase:=False, Orientation:=xlTopToBottom, _
                 SortMethod:=xlPinYin
    .Range("I1:P" & eR).Sort Key1:=.Range("P1"), Order1:=xlDescending, _
                 Key2:=.Range("N1"), Order2:=xlDescending, _
                 Key3:=.Range("L1"), Order2:=xlDescending, _
                 Header:=xlYes, OrderCustom:=1, _
                 MatchCase:=False, Orientation:=xlTopToBottom, _
                 SortMethod:=xlPinYin
  End With
End Sub

【57109】Re:数値データの加算方法について教えて...
回答  さぶちゃん  - 08/7/24(木) 21:30 -

引用なし
パスワード
   ▼Yuki さん:
こんにちは。

Yukiさんの提示してくれたコードを実行してみたのですが、何も処理が実行されないのですが・・・。

【57111】Re:数値データの加算方法について教えて...
回答  さぶちゃん  - 08/7/25(金) 0:15 -

引用なし
パスワード
   ▼ハチ さん:
提示して頂いたコードを参考にやってみます。
また質問する事があるかも知れませんが宜しくお願いいたします。
ありがとうございました。

【57112】Re:数値データの加算方法について教えて...
発言  Yuki  - 08/7/25(金) 7:20 -

引用なし
パスワード
   ▼さぶちゃん さん:
>▼Yuki さん:
>こんにちは。
>
>Yukiさんの提示してくれたコードを実行してみたのですが、何も処理が実行されないのですが・・・。

多分
With Worksheets(3) <= 該当のシートに変更すれば良いです。

これ位のDebugは御自分でして欲しいですね。

【57117】Re:数値データの加算方法について教えて...
発言  ponpon  - 08/7/25(金) 13:17 -

引用なし
パスワード
   シートが違うのでは、
yukiさんのコードでちゃんと実行されていると思いますが、
結果が正しいかどうかは、さぶちゃんさんにしかわかりません。

A    B    C    D    E    F    G    H
1   No    氏名    点数    点数    点数    点数    点数
2    1    A    7.4    7.5    7    7.2    7.9
3    2    B    7    7.8    7.5    7.4    7.2
4    3    C    7.4    7    7.3    7.9    7.7
5    4    D    7.1    7.9    7.8    7.3    7.6
6    5    E    7.3    7.1    7.5    7.3    7.9
7    6    F    7.2    7.3    7.9    7.6    7.6
8    7    G    7.4    7.1    7.5    7.6    7.8
9    8    H    7.1    7.8    8    8    7.9
10    9    I    7.2    7.4    7.3    7.8    7.6

こうだったものが

J    K    L    M    N    O    P    Q
No.    氏名    最高点    中間点1    中間点2    中間点3   最小点    合計
8    H    8    8    7.9    7.8    7.1    23.7
4    D    7.9    7.8    7.6    7.3    7.1    22.7
7    G    7.8    7.6    7.5    7.4    7.1    22.5
6    F    7.9    7.6    7.6    7.3    7.2    22.5
3    C    7.9    7.7    7.4    7.3    7    22.4
9    I    7.8    7.6    7.4    7.3    7.2    22.3
5    E    7.9    7.5    7.3    7.3    7.1    22.1
1    A    7.9    7.5    7.4    7.2    7    22.1
2    B    7.8    7.5    7.4    7.2    7    22.1

このようになってます。

【57121】Re:数値データの加算方法について教えて...
質問  さぶちゃん  - 08/7/26(土) 0:02 -

引用なし
パスワード
   ▼Yuki さん:
該当するシート名に変えて実行する事ができました。
基本的なところを理解しておらず、すみませんでした。

もう一つお聞きしたいのですが、以下の様な元データがあったとして、点数Cから点数Gまでを手入力していき、最後のGに数値データが入力されたら、自動的に実行されて処理後の形になるコードにしたいのですが、以下にあるコードをどの様に変えたらよいかご教授願えますか。
宜しくお願いいたします。

(元データ)
 A  B  C  D  E  F  G    
 No 氏名 点数 点数 点数 点数 点数
 1  A  7.4 7.5 7.0 7.2 7.9 
 

(処理後)
 I  J  K   L    M    N    O   P       
 No  A 最高点 中間点1 中間点2 中間点3 最小点 合計
 1  A  7.9  7.5   7.4   7.2   7.0  22.1


Sub Macro1()
With Range("I1:P2").Borders
 .Weight = xlThin
 .ColorIndex = 1
End With
Range("I1") = "No"
Range("J1") = "氏名"
Range("K1") = "最高点"
Range("L1") = "中間点1"
Range("M1") = "中間点2"
Range("N1") = "中間点3"
Range("O1") = "最小点"
Range("P1") = "合計点"
Range("A2:G2").Copy Range("I2:O2")
Range("K2:O2").Sort _
Key1:=Range("K2:O2"), Order1:=xlDescending, Orientation:=xlSortRows
Range("K1:K2").Interior.ColorIndex = 8
Range("O1:O2").Interior.ColorIndex = 6
Range("P2").Select
ActiveCell.FormulaR1C1 = "=SUM(RC[-4]:RC[-2])"
End Sub

【57122】Re:数値データの加算方法について教えて...
発言  Yuki  - 08/7/26(土) 8:05 -

引用なし
パスワード
   ▼さぶちゃん さん:
>▼Yuki さん:
>該当するシート名に変えて実行する事ができました。
>基本的なところを理解しておらず、すみませんでした。
>
>もう一つお聞きしたいのですが、以下の様な元データがあったとして、点数Cから点数Gまでを手入力していき、最後のGに数値データが入力されたら、自動的に実行されて処理後の形になるコードにしたいのですが、以下にあるコードをどの様に変えたらよいかご教授願えますか。
>宜しくお願いいたします。
>
>(元データ)
> A  B  C  D  E  F  G    
> No 氏名 点数 点数 点数 点数 点数
> 1  A  7.4 7.5 7.0 7.2 7.9 
> 
>
>(処理後)
> I  J  K   L    M    N    O   P       
> No  A 最高点 中間点1 中間点2 中間点3 最小点 合計
> 1  A  7.9  7.5   7.4   7.2   7.0  22.1

1行目のタイトルと書式設定はしてありません。
該当のシートモジュールに

Private Sub Worksheet_Change(ByVal target As Range)
  If Not Intersect(target, Columns(7).Resize(Rows.Count - 1).Offset(1)) Is Nothing Then
    If target.Count = 1 Then Call DataSet(target.Row)
  End If
  
End Sub

Private Sub DataSet(lR As Long)
  Cells(lR, 1).Resize(, 7).Copy Cells(lR, 9)
  
  Range(Cells(lR, 11), Cells(lR, 15)).Sort _
            Key1:=Range("K" & lR), Order1:=xlDescending, _
            Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _
            Orientation:=xlLeftToRight, SortMethod:=xlPinYin
  Cells(lR, 16).Value = Application.Sum(Range(Cells(lR, 12), Cells(lR, 14)))
End Sub

4362 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free