|
> ▼Hirofumi さん、ありがとうございます。回答内容のとおり変更し、試行してみたら、うまくいきました。
>更に、集計表シートへ5月1日〜31日分ということで、各日にちのデータに全支店分のデータを仮入力したものを
>試行してみましたところ、問題なく処理されました。長い道のりでしたが、本当にありがとうございました。
善かったですね、私もどうなるかと思いました
基本的に私のコードは、難しい事は行って無い積もりです
ただ、私の癖で、WorkSheetFunction等のExcelが本来持っている機能を余り使わないので
そこら辺を上手く使うともっと簡単で早いコードに成る様な気がします
>1.Private Function MakeSheetsIndeの以下の内容についてですが、
>全てのシートのなかで、除外したシートがある場合は、
>Forループを終了するというところまでは、分かるのですが、
>「除外フラグ」というのが、いまいち理解できません。
> For i = 1 To .Count
> '除外フラグをFalseに
> blnExclude = False
> '除外するシート名の先頭〜最終まで繰り返し
> For j = 0 To UBound(vntExclude)
> 'もしi番目のシート名が除外するシート名と一致するなら
> If .Item(i).Name = vntExclude(j) Then
> '除外フラグをTrueに
> blnExclude = True
> 'Forを抜ける
> Exit For
> End If
> Next j
今回の場合は、vntExcludeと言う配列の中に目的のシート(この場合、除外するシート名)が
有るか、無いかが解れば善いのでBooleanのフラグを立てています
詰まり、フラグが立っている時(フラグがTrue)は、目的のシートが有る場合
フラグが立っていない時は、目的のシートが無い場合
目的のシートとは、今処理を行おうとしているシートで、フラグがTrueなら処理し無いし、Falseなら処理
を行います
詰まり、「Next j」の後にIf分が有り、ここで「blnExclude = False」の時だけ処理を行っています
「If Not blnExclude Then 」と書いていますが「If blnExclude = False Then 」と同じ事です
>また、シートのindexに、シートiのセルE1と同一の日付がある場合、
>メッセージが出るような内容だと思いますが、これは例えば、どういう場合に、
>このようなメッセージが出るのか分からないので、申し訳ありませんが、またご教授願います。
> 'シートのIndexにこの日付が有る場合
> If dicSheets.Exists(vntDate) Then
> Beep
> MsgBox "同一の日付が有ります"
> Exit Function
これは、転記先のシートに万が一同じ日付が有った場合、其の後の処理で、エラーを起こさない様に
コードを正常終了させています
詰まり、エラーで止まるならまだ解るのですが、此れにより必要なデータを上書きして何か月も気が就かない
と言うような事を防いでいます
>2.これは、Functionプロシージャでシートインデックスが作られなかったら、と言いますか、
>シートインデックスがない場合は、ExitHandler:へ飛び、マクロを終了する、
>いう理解でよろしいのでしょうか?
> 'シートのIndexを作成
> If Not MakeSheetsIndex(dicSheets, lngSheetNo) Then
> GoTo ExitHandler
> End If
理解はそれで善いと思います
私は前はこう言う場合、「Exit Sub」で書いて居たのですが、
正常にコードが終了した時も、何か異常若しくは、キャンセルされた時も
同じ終了処理を行わなければ成らない場合、
「Exit Sub」では同じ処理を幾つも書かなければ成りません
其処で、コードの出口を1つにして全て同じ終了処理を行わせています
以上
ここからは、文章が下手なので申し訳有りませんが、私が感じた事を書いて置きます
1、プログラムを作る時、先ず行う事は元と成るデータの場所、形態、性質を何かに
詳しく書き出し、善く吟味して下さい
例えば、シート名は何、何行何列目に有るのか、データの型は何(日付、数値、文字列?)
文字列なら前後にSpeceが有るの、無いの等
2、結果は、何処にどう出力するのか
これも、シートに出力なら、そのシートのレイアウトはどうなっているか?
データの型は?等等
此れも、詳しく書き出し、善く吟味して下さい
3、プログラムを作ると言う事は、何か加工を行う事なので其の時の条件は?
何処に有るの?、データの型は?等等
此れも、詳しく書き出し、善く吟味して下さい
この3つが、きちんと決まらないとコードは書けません
また、書かないと自分の頭が整理されないと思います
4、次に上の3つを見て、これを行う手段を考え書き出します
先ず、大まかな物で、次に其の手段をとるには、何をしなければ成らないのかを
書き出します
5、此れを細かく細かくしていけば、最後のコードに直すだけに成ります
次に、デバグの方法を身に付けて下さい
これは、コードをいっぱい書いて、いっぱいエラーを出して、いっぱい考えないと
身に付きません
次に、試しを厭はない様にして下さい、大きなコードを書いて最後に試すのではなく
其の都度、簡単なモデルを考え試して行き、此れを積み上げて行きます
ソウしないと上手くなりませんよ
|
|