自動転記するときに手入力分を優先させるには?

Question 19.2 Previous Next
Aファイル こんにちわ。
この間、
「ブック内の全部のsheet名を取得する」をやりました。

一つのAファイル(右図)の中に、その月の枚数のsheetがあります。シート名は「1999-05-01」のようになります。 月間表


月間表(左図)を作成する為、Aファイルのsheet名を取得して、月間表の日付と Aファイルのsheetの日付が一致した月間表の場所に、件数を書いていきます。

がしかし、手入力するところもあるので、5日ごとにやるとマクロが実行され、手入力した部分が消えてしまいます。
NULLを探してそこからやろうと思ったけど、この会社はたまに休みがあるので、あいだにNULLの行が入ってしまいます。 今まで入力したところを消さずに新たなデータを追加したいのですがー。力を貸してください。
Answer   Copyright (C) 1999.5.20 永井善王
上の2つの図は、あなたの質問に基づいて私が推定で作りました。あなたのシートと一致していると良いのですが。
作り終わってから、月間表の日付は上から下へと縦方向かなとも思っています。縦横いづれにしても、あらかじめ 1~31が入力されている前提で、回答します。

あなたがやりたいことを整理すると、下表のようになると思います。
Aファイルの内容が 月間表の内容が
Nullの場合 記入済みの場合
Nullなら なにもしない なにもしない (手入力優先)
記入されていたら 転記する なにもしない (手入力優先)
作るマクロとしては、「Aファイルの内容が記入されていたら」、「月間表の内容がNullの場合」だけ転記する。その他の場合は、「なにもしない」となります。
この解釈で良いならば、Aファイルの日付を調べて月間表の日付が一致するセルに転記する直前に、月間表のセルの内容がNullかどうかを判断する If文をはさめば、解決するのではないでしょうか。
If文は、下記を参考にしてください。
If Sheets("月間表").Cells(2, 3) = "" Then '月間表のC2セルがヌルなら
   Sheets("月間表").Cells(2, 3) = Sheets("1999-05-02").Cells(2, 1)
                                          'AシートA2→月間表C2へ
End If

なお、サンプルブックを作っておきましたので、マクロコードを見て研究してみてください。
サンプルブックのダウンロードは ここをクリック  (YNxv992.xls 27KB)
※ 一旦、ブックをハードディスクに保存し、後で改めて開いてから実行してください。

 

Excel VBA Macro