|
▼ケメ子 さん:
こんにちは
現在のコードとシートでデバッグ大変だと思いますが、がんばってください。
それとは別に、
1.まず、このレスで、現在の構えで気になっているところをメモしてみます。
2.次のレスで、気になっている部分の解消策の1つとして、新しいコードの(あくまで参考)
ご提案と、そのコードで使われている、ちょっとなじみがないかもしれない記述の説明を
します。
3.で、最後のレスで、その新しいコードを参考としてアップします。
新しいコードによる運用が、ケメ子さんにとって、保守しやすいものか、かえって保守が大変になるか
これはケメコさんのご判断で。
ということで、まず。
・各データのレイアウト規定を外出しにするということは、いいことだと思いますが、
現在のコードから把握した限りではWorkSheet(1)にセットされている各情報が、飛び飛びのセルに
配置されています。もちろん、実際のシートには、コメント等があって、どこの情報が何なのか
お分かりになる仕掛けでしょうが、私の経験から言えば、ある程度まとまって記述されているほうが
メンテナンスが楽だと考えます。
・本来は、ここで登録されたコード等が、列記号として妥当か、行番号として妥当か 等々のチェックを
いれないと、実行時の障害になる可能性があります。とはいうものの、それをコード内でチェックすると
VBAのコンパイルと同じようなロジックが必要になってくるでしょうから、ここは、「正しく登録されている」
という前提でいくのが妥当でしょうね。(気にはなりますが)
・ただ、たとえば B6:D といったような コードで使うイメージで登録するのではなく、あくまで
B とか、コピー列数としての3 といった登録にすべきかと。
・それとは別の懸念として、処理時点で、登録された情報を参照しているところが少なくないですね。
ブック.シート.セル領域.プロパティ
この記述があるとVBAは、まずブックのコレクションを見に行き、そのなかから指定ブックの情報が
格納されているポインタを取得して、指定ブック情報を見ます。で、その中にあるシートコレクション
のポインタを取得して、シートコレクションを見に行きます。次に、そこにあるシート情報に格納されている
セル領域コレクションのポインタを取得して・・・・・・
もちろん、これらのチェイニングは、あっというまですが、それでもループの中で毎回、これをやると
処理時間に悪影響を与えます。(エクセルのセルへのコンタクトは結構、処理負荷が大きい)
値が都度変化するものであればやむをえませんが、今回の場合は最初から最後まで固定値です。
ですから、これらも、処理の最初で変数に取り込み、実行時は変数を相手にするべきだと思います。
といったことを感じました。
で、私なりのコード案を書いてみました。次と、その次のレスでご説明します。
|
|