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

大変お世話になっております。
F列(5桁ほどの数字)を起点として、FE列程まであるデータを営業日に入力しています。
その作業後、入力を行ったF列の行だけ、FJ列に、『本日の日付』(Today関数?のようにファイルを開くと、日付が変わるといけないため、ファイルを開いても変更しない固定した日付)を入力するVBAを作成したいです。
2023/3/1といった日付です。(時間は必要ありません)
コードをお教えいただけると大変有難いです。(Win11 Office365です)
ご回答を心よりお待ちしております。
どうぞ宜しくお願い申し上げます。

質問者からの補足コメント

  • 皆様、ご回答をくださいまして本当に有難うございます。
    作業の工程で複数のマクロを組んでおり、その中のひとつとしてコードを組み入れるため、質問をさせていただきました。(質問内容を含み、最終的にひとつのマクロに仕上げたいと考えております…)大変申し訳ございません…。
    引き続き、ご回答をお待ちしております。
    どうぞ宜しくお願い申し上げます。

      補足日時:2023/03/02 00:26

A 回答 (7件)

>F列(5桁ほどの数字)を起点として、FE列程まである


>データを営業日に入力しています。

ということなので、営業日ごとに行が複数行追加されていき、当日追加された行のFJ列に「処理日当日」の日付を入れたいというご希望だと理解しました。

ご質問者の表の全体構成および実施内容の全体像が不明で、このご質問は全体の実行内容の一部ということですので、多少荒っぽい処理になります。つまり、「とりあえずできる」レベルの回答になってしまいます。

仮に一行目が見出しで2行目から入力が開始されているものとし、F列にデータ入力開始行から最終入力行までの中間に空白セルはないものとした場合、ご質問者のお考えのとおり、FJ2セルに以下のように、「今日」を返す関数を入れて、下方向へコピーし、セルの表示形式は日付にしておきます。

FJ2:=IF(F2="","",TODAY())

これで、F列に5桁ほどの数字が入力された段階で、入力日当日の日付が表示されます。ただ、ご質問者の懸念のとおり、
>Today関数のようにファイルを開くと、日付が変わるといけない
という課題があります。TODAY関数のままでは、ファイルを保存して、開くたびに、開いた日付に変わっていってしまいます。

そこで、VBAを使って、TODAY関数を値に変換してしまうという方法をとります。仮に、ご質問者の説明がsheet1の説明だとすると、

Sub input_date()
Dim i As Long
With Sheets(1)    '対象シートを指定
i = 2 'データ開始行
Do While .Cells(i, "FJ").Value <> ""    '空白行(未入力行)になるまで
.Cells(i, "FJ").Value = .Cells(i, "FJ").Value   '値にする
i = i + 1
Loop
End With
End Sub

というコードを実行すれば、その日入力した分までの日付が値に変換されます。このコードはもともと値になっているものも値に変換しますので、無意味なことをやっているわけですが、最初に述べたとおり、ご質問者の表の全体構成および実施内容の全体像が不明で、このご質問は全体の実行内容の一部ということですので「とりあえずできる」というレベルの回答です。

また、そのようなケースがあるかどうか不明ですが、夜中の0:00を跨ぐようなF列への入力があれば、TODAY関数を記述したセルは一斉に新しい日付に変更されますので、上記コード実行前であれば、一連の入力作業中のセルは既に表示されていたセルの日付も最新の日付に更新されます。その後上記コードを実行すれば、一連の入力作業の最終終了日付が表示されるということになります。
    • good
    • 0
この回答へのお礼

goomania様…!
大変お世話になっております…!
ご記載をくださいましたコードを使わせていただきました!
『F列(5桁ほどの数字)を起点として、FE列程まである
データを営業日に入力しています。
ということなので、営業日ごとに行が複数行追加されていき、当日追加された行のFJ列に「処理日当日」の日付を入れたいというご希望だと理解しました。』
仰ってくださいました通りです…! 本当に有難うございます!
先ほどでしたので、2023/3/3と該当セル(セルFJ2~)に入力が出来ました!
VBAでの作業がどうしても必要ですので、有難い限りです!
日付をまたいで明日再度goomania様のコードを使わせていただきます!
何かありましたら是非宜しくお願い申し上げます…!
goomania様! いつも心より感謝しております…!
お手数をお掛けしてしまいまして大変恐縮ですが、引き続きどうぞ宜しくお願い申し上げます…!

お礼日時:2023/03/03 01:53

どうしてもマクロで処理したいのであれば、間違って記入済みの個所に入力してしまった時の処理も考えましょう。



質問文ではそこまでの言及がありません。
ですので自分はマクロでの作業をお勧めすることができないんです。

(誤入力対策で、自分なら入力後に日付入力のセルにジャンプしてそこで手動で日付を入力するようにする。誤入力ならその段階で入力し直すかアンドゥで誤入力そのものをキャンセルすれば良い)

・・・

「代わりに作ってください」という事であれば、お金を払って専門家に依頼しましょう。
ここは自力で問題を解決できるようなアドバイスをもらう場所です。
    • good
    • 0

その程度のことなら、わざわざVBAで書く必要はなくて、


当該セルの編集で、セルの中を =TODAY() まで書いてEnterではなくF9で更新すれば、値として定まります。
どうしてもVBAで書きたいのなら、Range("FJ1:FJ255")=Date とでもしておけば、そのマクロを再実行しない限り値は変わりません。
    • good
    • 0

こんばんは


VBAで処理する必要があるかは分かりませんが
変えないのであれば手入力(ショートカットキーなどを使い)が簡単で速いです

以下はVBAの記載に反応しました
残念ながら補足いただいても私が回答できるかは分かりません

なさりたい事の要件が良く解らないので本来は回答するべきでないかも知れませんが、いくつか補足が必要と存じます

関数も同様ですがVBA(プログラム)の場合、実行トリガーを示す必要があります

Excel関数(Today関数?)の場合に日付が変わるのは、シートの自動計算が実行される為です

つまりは、VBAでも 《どのタイミングで》 「固定した日付」を対象範囲に入力するかで変わります 

VBAのトリガー(処理の実行起点)はボタンのクリックイベントやシートの複数イベント・・・シートがアクティブなるタイミング、ブックを開いたり閉じたり、保存するタイミングなどなど・・多くあります

コードを書いてほしいと言う事は分かりますが、どのタイミングで実行するのか また現在どの程度のコードを書いている(書ける)のかなどが解らないと どこからどこまで回答すれば良いのか、・・・
限定的(提示の条件のみで正しく処理される)コードでその場限りで良いのか、それとも ご質問条件はダミーで実際に使う為には自身である程度(すぐに)の改修が必要なのか・・・

使いたいだけなのか?学習したいのか?などを回答者は想像する必要があり
結果、有益な回答を理解出来なかったり、間違えのある回答を選んで苦しむ結果になる事もあると思います

本来、プログラムコードなどやアドバイスが必要な場合、
ご質問者様のスキルやコードの趣向などが回答者に伝わるようにするのが良いと思います。スキルが大きく違う回答をしても無駄になる場合が多いのではと思いますから・・

以上のことなどから、現在自身で書いて問題を生じているVBAコードや具体的な躓きポイントを示されるのが良いと思いますよ

余計な事ですが
もし、学習目的などで無く、やりたい事を書いて処理コードを書いてもらいたいだけであれば、最低でもVBAの要件定義について 少しだけ学習する事をお勧めします
もっとも要件定義が完璧ならば、要件をChat GPTに投げ【最近のはやり?】、出来上がった処理コードを自身で検証して(簡単なデバッグ)問題が発生した事象についてQAサイトにご質問すれば・・・コードの難しい事が分からくともコピペ程度の検証で目的が達成できそうですね・・・・

長文で申し訳ありませんが、今一度 ご質問を整理され要件をゼロからコンプリートまで順を追って確認(定義)してみてください

既に回答されている内容を考察するべきと思います
(補足が付く前に書きました)
であれば、#3様の回答で実現できると思います
    • good
    • 0

こんばんは



データが始まるのがどの行からか不明なので、1行目からと仮定。

Range("FJ1").Resize(Cells(Rows.Count, 6).End(xlUp).Row).Value = Format(Now, "yyyy/m/d")
    • good
    • 0
この回答へのお礼

fujillin様…!
大変お世話になっております!
夜分に本当に申し訳ございません…。
週ごとにシートを作成しており、営業日ベースで集計をしています。
ほとんど毎日作業をしてるため、同じシート内で、日々行が増えていきます…。
例えば2023/3/1の作業後に続けて、その下の行に2023/3/2といった形式にさせていただくことは可能でしょうか…!
日により行数の増減があるため、セルFJ〇〇と固定出来ず大変申し訳ございません…。
ご回答をくださいましたVBAは1行目からですと、非常に上手くいきました!
いつも深く感謝しております…!
fujillin様のお時間のある折に、是非ご回答をお待ちしております!
お手数をお掛けしてしまいまして大変恐縮ですが、引き続きどうぞ宜しくお願い申し上げます…!!

お礼日時:2023/03/02 00:57

Today関数を使うのではなく、手打ちかNo1のショートカットキーで十分だと思います。

    • good
    • 0

(´・ω・`) そんなだったらマクロにする必要ないでしょ。


都度
 Ctrl+;
でその日の日付を入力すればいい。
    • good
    • 0

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