素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。振り番処理の3つの処理を行っていた。あとの2つは、そのための準備という位置づけだ。外に出すことを試みた。引数チェックの過程を外に出す引数をチェックするFunctionを別途作って、メインのプロシージャからはそのFunctionを呼び出す、という形にする。全ての引数をチェックするFunctionを1つ作ることも可能だが、なるべく1プロシージャ1機能を旨とする。血盟団の一人一殺みたいなもんだな。Function引数targetRangeが、振り番対象セル範囲として適切かどうかを判定するだけのFunction。振り番対象セル範囲は、列数が「1」でないといけないので、それを判定しているだけ。他に使い道もないし、わざわざ汎用的にするまでもないレベルの処理なので、Privateにして、振り番マクロからの呼び出され専用にしている。プロシージャのアクセス修飾子については、基本的に完全専属子会社みたいなプロシージャはPrivateというふうにしている。2列構成でないといけない、ということ。Functionコイツは、今回新たに追加したチェック機能。部屋定員表の2列目のデータ、すなわち部屋の定員数が有効な数値であるかどうかを判定する。Booleanでは、引数と返り値を設定。引数として部屋定員表を格納した2次元配列roomDataArrayを受け取り、チェックを通過したらTrue、途中で引っかかったらFalseを返すようにしている。受け取る引数が特殊なので、当然Private指定。Variantは、配列roomDataArrayの要素を一時的にぶち込んでおくための変数。2)」と書くと読みづらくなるのでこうした。どんな型の値がぶち込まれるか分からないので、Variant型にしている。(3)~(5)は値のチェック。2)の値が数値として評価できるかどうかを判定。True)ならば、Falseを返して処理を抜ける。Functionこの段階で、数値であることは確認済みなので、ここで無効な数値でないかチェックする。「0」とか、負の数なんかは、ここで排除される。Functionでは、整数になっているかどうかのチェック。Thenとしてみたが、うまくいかなかった。A1セルに「2」が入っているとして、イミディエイトに?TypeName(Range("A1").value)と打ち込んで[Enter]を押したら、Doubleと表示されたんですよねー。仕方なくこんなアホみたいなコードを書いたわけです。tmpが整数だったらCInt(tmp)の返り値もtmpだろう、ということです。Functionコイツは、部屋の定員数が足りているかどうかを判定する。Booleanで引数と返り値を設定。第1引数roomDataArrayはリスト1ー3でも登場した部屋定員表の配列。第2引数targetNumberOfPeopleは、振り番対象セルの数。振り番対象セルの数が部屋定員を超えていたらTrue、定員内に収まっていたらFalseを返す。FunctionNextでは、ForループでroomDataArrayの2次元目の要素(要するに部屋の定員数)を足し合わせていき、その数がtargetNumberOfPeople、つまり振り番対象セルの数と同じになるか超えるかすれば、定員オーバーではないということになるので、その時点でFalseを返す、という形にしている。メインのコードの書き換えリスト1ー1~4の処理を外出ししたのに伴い、メインのコード(前回記事のリスト2)を書き換える。検出できる処理失敗の原因が増えたのに伴って、前回記事のリスト1を書き換える。Enum新たに加えたのは、(*)の部分。Functionのところで、返り値として使用している。使ってみる次のコードで実験する。SubmakeUserSickメソッドについては、コチラを参照のこと。部屋定員表の人数欄に「ち~んw」とか入っているのでこうなる。部屋定員表の人数欄に小数があったりするからこうなる。定員オーバーにも引き続き対応できている。おわりにメインのFunctionの行数があまり減っていないのがアレですけど、コードを見直すときの一つの方針かな、と。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。