素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。脱・初心者のために部屋割りマクロのリファクタリング画像ExcelIcon返り値を改善する前回のakashi-keirin.hatenablog.comこの状態では、処理が無事に終わるとTrue、んで、うまく行かなかった場合は理由の如何にかかわらずFalseが返るという超不親切設計だった。今回は、この点を改善する。返り値を独自の列挙体型にする成功した場合にTrueを返すのは良いが、失敗した場合に、失敗の原因別の値が返せると、呼び出し元でいろいろ処理を分岐できるので便利だろう。処理中にエラーが出た場合あたりだろう。そんなわけで、宣言セクションに次のような列挙体を宣言した。EnumVBAでは、Trueの正体はー1、すなわち整数なので、列挙体のメンバにできる。これは今回初めて知った。過去記事のリスト1を書き換える。'部屋定員表の項目ラベルがあるときは、項目ラベルを表から除く。'部屋定員表を2次元配列化する。'配列からの値取得が何周目かを計算する。Ifでは、第1引数として渡されたtargetRangeの列数を調べ、「1」でなかったらfailedByMultipleColumnsを返して処理を抜ける。Ifでは、第2引数roomDataの列数を調べ、「2」でなかったらfailedByNotTwoColumnsTableを返して処理を抜ける。Ifでは、第1引数targetRangeの数、つまり書き込み先セルの数、すなわち部屋割り対象人数が、部屋定員数の合計を上回っていたら、failedByOverCapacityを返して処理を抜ける。FunctionでassignSuccessedを返して処理を抜ける。Err.DescriptionでfailedByUnknownReasonを返し、ついでにイミディエイトにエラー番号と説明を表示させることにした。これで、処理失敗の原因別に、呼び出し側で対応できる。使ってみる次のようなコードで実験。Sub相変わらず品性のかけらもないコードですまん。makeUserSickメソッドについてはコチラを参照のこと。実行結果まずは、この状態で実行。なるw次に、この状態で実行。なるw今度は、こんな状態で実行。Description:="ち~んw"こういうコードを仕込んでから実行すると、こうなって、イミディエイトはこんなふうになる。おわりに単に処理を行うだけのメソッドでも、SubではなくFunctionにして、返り値を自作列挙体型にすることで、結構柔軟な処理ができるような気がする。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。