今日は、このブログのメインテーマ(笑)、VBAネタです。
出席者・欠席者を自動入力する
あれ?どっかで見たような内容…?
そうです。機能的にはこちらの記事で作成したものと全く同じです。
この時は関数で機能を作成していたんですが、今回は同じ機能をVBAで作成してみるという、まったくの無駄作業を慣行いたしました。まあ、練習が目的ですからね。皆さんは真似しちゃだめですよ。
コードは以下の通りです。(今回は解説付き)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[code lng="vb"] Sub 出欠抽出() Dim r As Long '変数の宣言(処理中の行番号を一時的に格納する) Dim rs As Long '変数の宣言(出席者数+3) rs = 3 Dim rk As Long '変数の宣言(欠席者数+3) rk = 3 Dim rend '変数の宣言(メンバーの数+2) rend = Cells(Rows.Count, 1).End(xlUp).Row 'A列のセルのうち、データがある最終行の行番号を取得し、rendに格納 Range("D3:E13").ClearContents '既存出欠データ削除 For r = 3 To rend '行番号3(メンバー表の最初の行)からrend行まで処理を繰り返す If Range("A" & r) <> "" Then 'A列に名前があるかどうか判断 If Range("C" & r) = 1 Then 'A列に名前がれば、C列の数字を確認 Range("D" & rs) = Range("A" & r) 'C列が1なら、D列のrs行のセルにA列r行セルの名前を入力 rs = rs + 1 '出席者数+1 Else Range("E" & rk) = Range("A" & r) 'C列が2なら、E列のrk行のセルにA列r行セルの名前を入力 rk = rk + 1 '欠席者数+1 End If End If Next Range("G2") = rend - 2 'メンバー数表示 Range("G3") = rs - 3 '出席者数表示 Range("G4") = rk - 3 '欠席者数表示 Range("G5") = (rs - 3) / (rend - 2) '出席率表示 End Sub [/code] |
動作解説
最終行の行番号を取得(≒メンバー数を判断)
7行目で変数[rend]を宣言しています。
で、8行目でA列のデータがある最終行(写真では「シムダ」が入力されているA11セル)の行番号[11]を取得し、変数[rend]に格納しています。
出席者・欠席者の積み上げ
10行目から20行目で、For~nextにて繰り返し処理を行い、出席者・欠席者の積み上げをしています。
繰り返し処理の中身は、
①A列に名前が入っているか判断
②入っている場合、C列の数字を見る
③-1数字が1なら、D列に名前を積み上げ
(この時、変数[rs]を使用&1追加)
③-2数字が1以外なら、E列に名前を積み上げ
(この時、変数[rk]を使用&1追加)
となります。この処理を変数[r]が[rend]に一致するまで繰り返しています。
総数・出席者数・欠席者数・出席率の表示
繰り返し処理が終わると、変数[rs]及び[rk]が、それぞれ出席者数/欠席者数+3まで増えています。
21行目から24行目にて、処理後の変数を使用して総数・出席者数・欠席者数・出席率をセルG2:G5へ入力しています。
これ実際にやってみて思ったんですが、関数でやるよりVBAでやる方が、手入力してる感覚にすごく近いので、だいぶ作りやすいですね。
もちろん、半年前の僕では作れなかったわけですが、「最終行を取得する」というVBAの基本と、「繰り返し処理」「条件分岐」というプログラミングの基本がわかった今の状態だと、VBAの方がむしろとっつきやすい感覚です。
実際に人に使ってもらうことまで考えると、入力の手間が増えちゃうんで(ボタン押す分だけ)、どっちがいいかは微妙なとこなんですけどねー。
実際にファイルを操作して、動きを確かめてみたい方はこちらからどうぞ。
出席者・欠席者(VBAバージョン)
一点注意があります。マクロ有効ブック(.xism)なので、環境によっては警告が出ます。
もちろんウイルスなどは仕込んでおりませんというか技術的に仕込めませんが、ご利用は自己責任でお願いします。
編集後記
一年と少し前、リベラルアーツ大学の門戸をたたいて、それからふるさと納税に真面目に取り組んだ結果、現在僕の家はこうなっております。
若干やりすぎた感があるなぁ…(笑)
でも、自己負担2000円でこれだけのものを入手できるとなると、確かにお得ですねうぇっへっへっへw
いままでなぜやってなかったんだと思うくらいに。
ふるさと納税については、こちらの動画をご参照ください(勝手にリンク貼り付け)。
それではまた。
タイマムシンのオススメ本はこちら