【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】

お世話になっております。
タイトルにございます、Excel VBAのプログラムについてご教授をお願いいたします。

[B4セル]から下記にデータが入力されており、その隣の[C4セル]から下には、[B4セル]から下にデータが入力されているセルだけに、普段はCtrl+(れ)キーの当日日付+半角スペース+20:00と入力しております。(例)2019/10/06 20:00)
注文件数が多いのでこの操作を自動化したく、どなたか分かる方、よろしくお願いいたします。

「データが入力されている隣のセルに当日日付」の質問画像

A 回答 (9件)

No.5 No.6 の追記



☆ データをまとめて張り付けてリアル処理するならば

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim セル As Range

 Application.EnableEvents = False
 For Each セル In Target
  If セル.Value <> "" Then
   If セル.Row >= 4 Then
    If セル.Column = 2 Then
     Cells(セル.Row, 3).Value = DateAdd("h", 20, Date)
    End If
   End If
  End If
 Next
 Application.EnableEvents = True

End Sub


☆ 全データ入力後にまとめて処理するならば

Sub まとめて処理()

Dim 行 As Long

 For 行 = 4 To Cells(Rows.Count, 2).End(xlUp).Row
  If Cells(行, 2).Value <> "" Then Cells(行, 3).Value = DateAdd("h", 20, Date)
 Next

End Sub
    • good
    • 0
この回答へのお礼

GooUserラック様、ご回答いただきましてありがとうございます。
リアルタイムで反映させられるこの様なVBAのプログラムがあるのですね。
感動いたしました。
複数いただきました回答の中から「データをまとめて張り付けてリアル処理」のプログラムが、
この度の私の理想とするプログラムなのでベストアンサーとさせていただきます。
回答いただきました皆様へこの場を借りて感謝申し上げます。
ありがとうございました。

また質問させていただくこともあると思いますが、その際にはよろしくお願いいたします。

お礼日時:2019/10/07 03:36

No.7 の追記



「☆ 全データ入力後にまとめて処理するならば」は複数回実行を考えると以下のようにした方が良いかもしれません。

Sub まとめて処理()

Dim 行 As Long

 For 行 = 4 To Cells(Rows.Count, 2).End(xlUp).Row
  If Cells(行, 2).Value <> "" Then
   If Cells(行, 3).Value = "" Then
    Cells(行, 3).Value = DateAdd("h", 20, Date)
   End If
  End If
 Next

End Sub
    • good
    • 1

Sub Sample()


  Range("B4", Cells(Rows.Count, "B").End(xlUp)).Offset(0, 1).Value = Now()
End Sub

とか。

データが1件もないとうまくいきませんが。
運用でカバー。(^^;)
    • good
    • 0

No.5 の補足


データがすでに入力されていたり、データを複数同時に張り付けるような使い方ではチャント動作しません。
「Target.Column + 1」はもちろん「3」でも問題ありません。
    • good
    • 0

VBAでしたらVBEの画面を開いて図を参照に左側の対象のシートをダブルクリックして「Worksheet」「Change」の部分に下記のコードを書き込めば良いと思います。



Private Sub Worksheet_Change(ByVal Target As Range)

 If Target.Row >= 4 Then
  If Target.Column = 2 Then
   Application.EnableEvents = False
   Cells(Target.Row, Target.Column + 1).Value = DateAdd("h", 20, Date)
   Application.EnableEvents = True
  End If
 End If

End Sub
「データが入力されている隣のセルに当日日付」の回答画像5
    • good
    • 0

マニュアル操作であれば、こんな感じでしょうか。


①C4:C12を選択
②Ctrl+;
③半角空白
④Ctrl+:
⑤Ctrl+Enter

上記の操作をマクロにすると、こんな感じです。
Sub sample()
Range("B4:B" & Rows.Count).SpecialCells(xlCellTypeConstants, 23).Offset(, 1).Select
SendKeys "^; ^:^{ENTER}"
End Sub
    • good
    • 0

誤記訂正



誤 で、選択査定る範囲の一番上の値を下のセルに複製します。
訂 選択されている範囲の一番上の値を下のセルに複製します。
    • good
    • 0

マクロは必要ありません。



とりあえず時間入力に該当する一番上のセルに日時を入力してください。
そして
 [←]
で、商品名の列のセルを選択、
続いて、
 [Ctrl]+[↓]
のショートカットで「氷」までジャンプすることができます。
続いて
 [→]
で、隣の列のセルを選択し、
続いて、
 [Ctrl]+[Shift]+[↑]
で、日時を入力したセルまでを範囲選択できます。
最後に
 [Ctrl]+[D]
で、選択査定る範囲の一番上の値を下のセルに複製します。

このように、ショートカットを使うだけで簡単に処理できますよ。
それにこのほうが事細かに応用できます。
マクロは条件を付けて処理を分けることができますが、質問者さんのスキルでは条件が加わる都度修正することは無理と思うんです。
(「代わりに作って」…のような作業依頼は疑問の解決ではありません)


・・・余談・・・

ちなみに「NOW関数」は、計算させる都度、演算が行われ結果が変わるのでお勧めできません。
    • good
    • 1

一番簡単なのは、C列を日付時刻型にして、C4セル以下に関数を入れておく事です。



=IF(B4<>"",now(),"")
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A