qii-yah
@qii-yah

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

エクセルVBA 特定の列に日付が入力されたらマクロを実行する

Q&A

Closed

解決したいこと

特定の列に日付が入力されたらマクロを実行させたいのです。
列名:O列

例)
ECサイトの物販業を運営しておりまして、
エクセルの
シート(リスト)=受注時のデータがあり、処理が完了したら
シート(リスト2)へ処理終了済みとしてデータを移動させたいです。

<処理終了済み>の判断基準として、
シート(リスト)の<O列>に発送日が入力された場合を基準としたいです。

まず、具体的な日付を入れたパターンでマクロを作成してみました。
これ自体は動作確認できたのですが、

●O列の内どの行のO列でも実行する。
という記述がどうしてもできません。

ご存じの方お教えいただけます様お願い申し上げます。
また、作成したマクロの記述は、色々見様見真似で記述しましたので
不要な記述もあるかも知れません。

何卒よろしくお願い申し上げます。

作成したマクロの記述ソースコード

Sub 貼り付け()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim lastRow1 As Long
    Dim lastRow2 As Long

    ' シートを設定
    Set ws1 = ThisWorkbook.Sheets("リスト")
    Set ws2 = ThisWorkbook.Sheets("リスト 2")
    
    
    ' Sheetsリストの該当セルの行を指定
    Range("O5").Select
    ActiveCell.FormulaR1C1 = "10/17/2024"
    
    'アクティブな列の行を指定
    ActiveCell.EntireRow.Select
    
    '上記の列・一行を切り取り
    Selection.Cut

    ' Sheetリスト 2の最終行を取得
    lastRow2 = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).row

    ' データを貼り付け
    ActiveSheet.Paste ws2.Range("A" & lastRow2 + 1)
    
    'リストに戻る
    Sheets("リスト").Select
    Range("テーブル1[#Headers]").Select
    
    
    
End Sub
0

6Answer

具体的な日付を入れたパターンでマクロを作成してみました。
これ自体は動作確認できたのですが、

これは、↓ここの O5セル のことを、おっしゃっていますか?

Range("O5").Select
ActiveCell.FormulaR1C1 = "10/17/2024"

そうだとして、

O列の内どの行のO列でも実行する。
という記述がどうしてもできません。

Ox セルにしたいということでしたら、
x を 5〜n までループで処理すればよい ということでは?

dim x as integr
for x = 5 to 1000
    Range("O" & x).Select

next
0Like

@nak435

早速のご連絡ありがとうございます。
具体的な日付を入れたパターンでマクロを作成は<O5>のセルのことです。

私は、VBA初心者なのですが
完成イメージとしましては
<O列>に日付が入ったら、直ぐに、マクロを実行。というイメージですが
その場合でもループが良いものでしょうか?
※実際は、入力される日付もまちまちです。
もしご存じであればお教えいただけます様
よろしくお願い申し上げます。

0Like

Comments

  1. <O列>に日付が入ったら、直ぐに、マクロを実行。というイメージですが
    その場合でもループが良いものでしょうか?

    そうでしたら、ループは不要で、次のスクショのように、ワークシートにWorksheet_Changeマクロを書けばよいです。
    シート内のどのセルであっても、セルが更新されるとWorksheet_Changeが呼び出されるので、if文で O列 を判定して、そのセルに対する処理を書けばよいです。

    vbm.png

@nak435

ご親切なアドバイス、本当にありがとうございます。
早速試させていただいたのですが
何故か上手くいかず。。。

お作りいただいたソースコードはピクチャー通り
Sheet(リスト)に作成すれば良いのですよね?

具体的な日付を入れたパターンで作成したソースコードは
現在、moudle3に作成したのですが
これはこのまま置いておいて良いものでしょうか?

何度も申し訳ありません。
よろしくお願い申し上げます。

0Like

Comments

  1. Sheet(リスト)に作成すれば良いのですよね?

    O列 を参照するシートに作成します。
    下記スクショのように、Worksheet Changeが重要です。
    実際の処理はmoudle3に置いてあっても構いませんが、そこの関数を呼び出すように書いていますか?

    vbm1.png

    呼ぶ側、呼ばれる側のスクショを貼ってもらえれば、より具体的にご指摘できます。

注文移動2.png
@nak435 様

おはようございます。
本当にありがとうございます。
動作できたようです!
2つのマクロピクチャ添付させていただいております。

現状は、<発送日にカーソルがある状態>で
マクロ実行をクリックすると動作する状態です。
これを、<発送日に日付が入ったら=カーソルがある状態>
になると、マクロが自動的に実行する状態に
することはできるものなのでしょうか?

何度も申し訳ありません。
何卒よろしくお願い申し上げます。注文移動1.png

0Like

Comments

  1. <発送日に日付が入ったら=カーソルがある状態>
    になると、マクロが自動的に実行する状態に
    することはできるものなのでしょうか?

    以下のように そのマクロを呼び出せばよいです。
    (1枚目のスクショのマクロに、⭐️印の行を追加)

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim cell_address As String
        cell_address = Target.Address(ReferenceStyle:=xlA1)
        If Left(cell_address, 3) = "$O$" Then
            Range(cell_address).Select
            
            call 処理済み注文シート移動処理()    '⭐️
        
        End If
    End Sub
    

@nak435さま

この度はお世話になりありがとうございます。
完成いたしました!
本当にレッスン以上のアドバイスありがとうございました。
まだまだ初心者で初めてみる対処方法で驚き感激いたしました!
取り急ぎ御礼申し上げます。

0Like

Comments

  1. 完成いたしました!

    よかったですね。
    ”解決”でよろしければ、当Q&Aをクローズしてください。

@nak435さま

最後までアドバイスありがとうございます。
当サイトの使用方法もまだ理解できていませんでした。
早速質問クローズさせていただきます。
本当にありがとうございました!

0Like

Your answer might help someone💌