บันทึกเวลาแก้ไขอัตโนมัติ (Excel)

บันทึกเวลาแก้ไขอัตโนมัติ เมื่อมีการแก้ไขเซลล์ใดเซลล์หนึ่ง ให้มีวันและเวลาบอกว่า เป็นการแก้ไขล่าสุด ณ วัน เวลาใด

วันนี้ได้รับโจทย์มาว่า มีการเสนอราคาของสินค้าประเภทหนึ่ง อยากได้วิธีการพิมพ์ข้อมูลราคา แล้วขึ้นวันเวลาโดยอัตโนมัติ

ความจริงในตอนแรก เข้าใจผิด จึงได้แนะนำไปว่าให้ใช้ฟังก์ชัน =NOW() แต่ปรากฏว่าไม่ตอบโจทย์ในแง่ที่ว่า ฟังก์ชัน NOW  จะเปลี่ยนค่าทุกครั้งที่มีการเปิดเวิร์กบุ๊กใหม่ เพราะผู้สอบถามระบุว่า หมายถึง วันเวลา ณ เวลาที่พิมพ์ข้อมูลอย่างใดอย่างหนึ่งเข้าไป ไม่ได้อยากรู้เวลาปัจจุบัน

หากสนใจฟังก์ชัน NOW โปรดอ่านที่เว็บไซต์ไมโครซอฟต์ หรือ ที่นี่

บันทึกเวลาแก้ไขอัตโนมัติ
ตัวอย่างตารางที่ต้องการ

ก็เลยคิดว่า คงใช้ VBA ในการจัดการเรื่องนี้

บันทึกเวลาแก้ไขอัตโนมัติ ด้วย VBA

จากตัวอย่าง จะมีคอลัมน์ทั้งหมด 5 คอลัมน์ คือ ลูกค้า ประเภท จำนวน เอเยนต์ และ วันที่ปรับปรุง เราอยากจะกำหนดว่า ถ้ามีการปรับข้อมูลในคอลัมน์ จำนวน ให้เปลี่ยนวันที่และเวลาเป็นวันเวลาที่มีการปรับปรุงข้อมูลนี้

เราจะไปที่แท็บ Developer

(กรณีที่ท่านไม่เห็นแท็บนี้ โปรดเปิดก่อน ไปที่ Option > Customize Ribbon ติ๊กเครื่องหมายถูกตรงหน้า Developer ในหน้าต่างด้านขวา)

Developer Ribbon
เปิดใช้เมนู Developer

เลือก Visual Basic

เมื่อหน้าต่าง Visual Basic ขึ้นมาให้เลือก insert > Module

insert Module
หน้าต่าง VBA

วางโค้ดนี้ลงไป

Private Sub Worksheet_Change(ByVal Target As Range)

Dim xCellColumn As Integer
Dim xTimeColumn As Integer
Dim xRow, xCol As Integer
Dim xDPRg, xRg As Range
xCellColumn = 3
xTimeColumn = 5
xRow = Target.Row
xCol = Target.Column
If Target.Text <> "" Then
    If xCol = xCellColumn Then
       Cells(xRow, xTimeColumn) = Now()
    Else
        On Error Resume Next
        Set xDPRg = Target.Dependents
        For Each xRg In xDPRg
            If xRg.Column = xCellColumn Then
                Cells(xRg.Row, xTimeColumn) = Now()
            End If
        Next
    End If
End If
End Sub

กด Save

ตรงนี้อย่าลืม เวลาท่าน Save จะต้องเลือกเป็นนามสกุล .xlsm เท่านั้นเพราะเราจะเก็บโค้ดไว้ใช้งานต่อไป

บันทึกเวลาแก้ไขอัตโนมัติ

เรียบร้อย

ตัวแปรที่ต้องเปลี่ยนค่า

ตัวแปร ที่ต้องสนใจก็คือ xCellColumn จะเป็นคอลัมน์ที่รับค่าที่ต้องการบันทึกความเปลี่ยนแปลง และ xTimeColumn จะเป็นคอลัมน์ที่แสดงผลวันและเวลา

ในที่นี้ เขียนไว้ว่า

xCellColumn = 3

xTimeColumn = 5

3 ก็คือ คอลัมน์ที่ 3 (คือคอลัมน์ C) และ 5 คือ คอลัมน์ที่ 5 (คือคอลัมน์ E) (โปรดอ่านการอ้างอิงแบบ R1C1)

ข้อสังเกต- สำหรับ VBA ตัวนี้ อาจจะเห็นว่าในโค้ดนี้มีการใช้คำสั่ง =NOW() แต่เป็นการใช้ฟังก์ชันเพื่อดึงค่า วัน เวลา แต่เมื่อดึงค่ามาแล้วเก็บเป็น วัน – เวลา ไม่ได้เก็บเป็นฟังก์ชัน จึงไม่เปลี่ยนแปลงเมื่อเปิดเวิร์กบุ๊กใหม่ แต่จะเปลี่ยนเมื่อเงื่อนไขเปลี่ยน นั่นคือ คอลัมน์ที่ตั้งไว้มีการเปลี่ยนแปลงเกิดขึ้น

หวังว่าจะเป็นประโยชน์กับท่านบ้าง

บันทึกเวลาแก้ไขอัตโนมัติ (Excel)

ความคิดเห็นของคุณ :)

Scroll to top
%d bloggers like this: