質問:下のような成績一覧から、授業時数の1/3を超える欠時数を持つ生徒名を拾い出すにはどうしたらいいでしょうか。当方、VBAは苦手です。関数でできませんか?
例)A組の国語の授業数は36回、A組1番の曹操 孟徳の欠課数は0(空欄)だが、A組3番の劉備 玄徳の欠時数は16なので、劉備 玄徳は拾い出しの対象となります。
(●`ε´●):尚、表の特徴として以下のことがわかっている。
- 各クラスに9行使われている。
- 科目と授業数の列は対応するものが交互に並んでいる。
- クラスによって科目数は異なる。
- おなじ列に異なる科目が並ぶこともある。
- 科目欄の数値は該当科目の得点である。
【´・ω・`】:科目欄の数値はいらないのでこの欄を利用して下のような表を作る。
【´・ω・`】:こうなっていれば左に授業数、右に各生徒の欠時数がならんでいるので比較しやすい。
(●`ε´●):それは分かるがいちいち入力するのはかったるいぞ!
【´・ω・`】:各クラス9行使われている事を利用してC3に・・・
=OFFSET(D$2,INT(ROW(C2)/9)*9,0)
・・・と入力すればいい。
もしも、1クラスに62行使われているなら(千葉県情報ネットワーク成績一覧表)
=OFFSET(D$2,INT(ROW(C2)/62)*62,0)
・・・と入力すればいい。
これをまず、C27までコピーし、次にC3からC27を選択コピーし、それをE3,G3,I3,K3,M3にペーストすればいい。(手順1)
【´・ω・`】:今は基本方針を説明したわけだ。
(●`ε´●):なるほど。では授業数の1/3と欠時数を比べるのだからC3に入れる式を・・・
=IF(OFFSET(D$2,INT(ROW(C2)/9)*9,0)<D3*3,1,0)
・・・とすれば欠時数が授業数の1/3をこえていれば1、そうでなければ0になる。(手順2)
【´・ω・`】:科目欄の数値の合計をCheck欄に表示しよう。SumIf関数を使ってO3に・・・
=SUMIF($C$1:$N$1,"科目",C3:N3)
・・・すると下のようになる。(手順3)
(●`ε´●):Check欄には生徒以外の数値もあるぞ!
【´・ω・`】:なるほど。それでは生徒の欄には必ずA列に番号があるのでO3の数式を・・・
=SUMIF($C$1:$N$1,"科目",C3:N3)*ISNUMBER(A3)
・・・に変更する。(手順4)
(●`ε´●):Check欄にある数値が欠時オーバーの数というわけか。
【´・ω・`】:そう。あとはフィルターを使って#VALUEと0を除けば終わりだ。
2015_12_21_Sampleをダウンロード
【´・ω・`】:流れをいちいち書いたから時間がかかりそうだが、実際には一瞬だな。
最近のコメント