• 締切済み

エクセルマクロ→指定した数値を検索して範囲選択

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

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

そんなことしなくても、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 これを改良すればどうでしょう。 日付が変わっても、一旦セットした値は変わらない。

  • YNi2B2C
  • ベストアンサー率13% (21/156)
回答No.1

こんばんは。簡単な例を示します。 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での動作確認はしていません。 朝一番にこのマクロを使わないと意味がないです。 お昼頃に間違えてマクロを走らせると、悲しいことになるので注意が必要です。 以上、参考まで。

関連するQ&A

専門家に質問してみよう