- 締切済み
VBAに関して、selectを使わない方法
現在、全国の都道府県の市町村別である数値を測るプログラムをつくっています。 現在のプログラムはselectを使い、市町村を選択した(人口や県庁所在地等で大まかにわけた)後、47都道府県を選択し計算するようになっています。下にプログラム例を張ります。ageと面積は入力画面(ユーザーフォームにて作成)にて入力する値となります。 select city case 札幌 age1*○○+age2*△△+age3*◆◆ case 町村 age1*●●+age2*▲▲+age3*□□ ・ ・ ・ end select ・ ・ ・ select area case 北海道 面積1*☆☆+面積2*★★ case 青森 面積1*▼▼+面積2*▽▽ ・ ・ ・ end select といった感じです。selectを使っているため非常に量が多いので、selectを使わないようにしたいのです。ループ文を使おうと考えたのですが、かける数値(★や□)も違い、計算する箇所がふたつあるためどのようにすればよいか分かりません。 つかったとしてもプロシージャが大きくなりすぎないようにしたいのですが、ifをつかって別のモジュールで市町村だけ計算させ、さらにifを使い別のモジュールで都道府県だけで計算させ、出力の時に結果だけ抽出することなど可能でしょうか?他に簡単な方法とかありますか? 皆さんの力をお貸しください。 回答よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- ap_2
- ベストアンサー率64% (70/109)
ANo.3の熱意(?)にちょっと刺激されて、再回答。 式共通で係数が違うだけなら、 ・フォームはユーザ操作関連処理のみ ・データシート(係数リスト) ・シートから係数を取得する関数 ・値や係数から算出する関数 で、シンプルに切り分けできるかと。 係数取得と算出で10行程度なので、1つの関数にしちゃっていいです。 データシートは、県と市町村で2つに分けて、1行1データ。地名列を検索(Find)して、その行の情報を取得する形で使います。必要に応じて、パラメータ以外の情報(市町村データはせめて県名を)も持たせると管理しやすいです。 あと、ソースからのパラメータ抽出は、「秀丸エディタ」とか使えば、正規表現で置き換え1発かも。 お役所のデータは「地名:値」多いから、何かと使えるかと。がんばって。
- tsubuyuki
- ベストアンサー率45% (699/1545)
・・・と思ったら、 これ、都道府県・市町村別に作るつもりですか? 正直、無駄です。 先ほど「無駄な処理を省いて・・」とレスしましたが、 何となくすごく無駄です。 マクロに入る前にもう少しシート内で処理できる部分を考えませんか? 例えば、都道府県・市町村にコードを設けて、ある程度の集計区分に分けたコードを付加して、 それを基に計算係数を別表に用意しておいて、 VLOOKUPなどで係数を引っ張って、予備計算しておいて・・・とか、 見た感じでは出来るような気がしますよ? 1:政令指定都市:係数1.5 2:その他市:係数1 3:町村:係数0.5 などと係数表を持って、 札幌(=政令指定都市):1 小樽(=その他市):2 厚岸(=町村):3 とコードを付けてやれば、VLOOKUPで係数を引っ張ってこれますよね? コレを基にしてやれば、シート内で計算できるはずです。 少なくとも、都市別にCaseを作る必要は無いはずです。 これだけでもモジュールは随分スリムに出来ます。 コレに拘らないにしても、何か手段があるはずです。 なんとか探してみませんか?
- ap_2
- ベストアンサー率64% (70/109)
パラメータは配列で持った方がよさそうです。 せっかくのExcelなので、パラメータリストをシートに持って、地名とマッチした行のパラメータを取ってくるように作るのもアリかと。シートは、非表示にもできます。
- masatsan
- ベストアンサー率15% (179/1159)
配列にするくらいですかね。