プロが教える店舗&オフィスのセキュリティ対策術

EXCEL2000を使用しています。
受付でC列に値が入ったらB列に
=IF(C1="","",TODAY())
といった数式を入れています。
そこで翌日ファイルを開けるとTODAY関数が更新される為、前日の受付した日時も今日の日付になってしまいます。いちいち朝一番に前日であろうセルを範囲選択して
前日の日時を入れctrl+enterを押して文字列として入力してますが毎日100行近くを選択するのがとてもめんどくさいのです。
できれば朝一番前日なのに当日の日時なっているセルを検索してそれを範囲選択して一度に変更できるマクロみたいなものはないでしょうか?
出来ればフォームからボタンで一括作業できたら本当に嬉しいのですが・・・

A 回答 (3件)

こんばんは。



もともと、イベント・ドリブン型で入力していけばよいのではありませんか?
=IF(C1="","",TODAY()) のマクロ版です。

'シートモジュールに貼り付けてください。

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column <> 3 Then Exit Sub
 Application.EnableEvents = False
 For Each c In Target
'C列に値が入って、B列が空の時
  If c.Value <> "" And c.Offset(, -1) = "" Then
   c.Offset(, -1).NumberFormatLocal = "yy/mm/dd"
   c.Offset(, -1).Value = Date
  End If
 Next c
 Application.EnableEvents = True
End Sub

>いちいち朝一番に前日であろうセルを範囲選択して
>前日の日時を入れctrl+enterを押して文字列として入力してますが
>毎日100行近くを選択するのがとてもめんどくさいのです。

これについては、ちょっと難しいですね。

シートの計算を[自動]にしている限りは、前日なのか、前々日なのか区別がつかないのではありませんか?[手動]にしてあるなら、まだ別の方法があるけれど、それも面倒です。

'----------------------------------------------

Sub FixedDateEntering()
  Dim c As Range
  Application.ScreenUpdating = False
  For Each c In Range("B1", Range("B65536").End(xlUp))
   If c.HasFormula Then
     If InStr(c.FormulaLocal, "TODAY()") > 0 And c.Offset(, 1) <> "" Then
      c.NumberFormatLocal = "yy/mm/dd"
      c.Value = c.Value - 1
     End If
   End If
  Next c
  Application.ScreenUpdating = True
End Sub
    • good
    • 0

そんなことしなくても、VBAで日付をセットしてしまえばよいでしょう。


C列に値が入ったら対応する行のB列のセルに日付をセットする。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 3 Then
Cells(Target.Row, "B") = Date
End If
End Sub
これを改良すればどうでしょう。
日付が変わっても、一旦セットした値は変わらない。
    • good
    • 0

こんばんは。

簡単な例を示します。

A1セルから下に日付が入っていたとして、C1に参照用に”=today()”と入っている場合のマクロです。

~・~・~・~・~・~・~・~・~・~・~・

Sub 日付変更()

今日の日付 = Range("C1").Value

Range("A1").Activate

Do Until ActiveCell.Value = ""

If ActiveCell.Value = 今日の日付 Then
ActiveCell.Formula = 今日の日付 - 1
End If

ActiveCell.Offset(1, 0).Activate

Loop

End Sub

~・~・~・~・~・~・~・~・~・~・~・

Excel2003で取り急ぎ作ったので、2000での動作確認はしていません。

朝一番にこのマクロを使わないと意味がないです。
お昼頃に間違えてマクロを走らせると、悲しいことになるので注意が必要です。

以上、参考まで。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!