السلام عليكم ورحمة الله وبركاته
إخواني وأحبابي في الله
أقدم لكم اليوم
طريقتين لإدراج التاريخ Date والوقت Time في الخلية المجاورة للخلية التي يحدث فيها إدخال أو تغيير ، أحدهما بالمعادلات والأخرى بالأكواد.
** من المعروف بالنسبة لمستخدمي الإكسيل أنه يمكن إدراج التاريخ عن طريق اختصار من لوحة المفاتيح بالضغط على مفتاح CTRL ثم بالاستمرار بالضغط على المفتاح يتم الضغط على : (حرف الكاف من لوحة المفاتيح)
ولإدراج الوقت هناك اختصار آخر وهو CTRL + SHIFT ثم بالاستمرار بالضغط عليهما يتم الضغط على : (حرف الكاف كما أسلفنا)
يمكن إدراج التاريخ والوقت في خلية واحدة >> نقوم بعمل الاختصار للتاريخ ثم نضغط مسافة ثم نقوم بعمل اختصار للوقت.
لكن يعيب هذه الطريقة أنها يدوية ومملة ، وأمر آخر لا يكون التاريخ والوقت ديناميكي بل تكون القيم ثابتة.
** يمكن استخدام المعادلات داخل الإكسيل لتقوم بالمهمة باستخدام الدوال TODAY (دالة لإدراج التاريخ) ، والدالة NOW (دالة لإدراج التاريخ والوقت) ، ولكن هذه الطريقة العيب فيها أن القيم المدخلة ستتجدد باستمرار أي أنها ديناميكة على الدوام.
>>> الطريقة الأولى (باستخدام المعادلات)
المطلوب أن نقوم بإدراج التاريخ والوقت في العمود الثاني بمجرد إحداث تغيير في العمود الأول (على سبيل المثال إذا قمت بإدخال قيمة في الخلية A2 ، يتم إدراج التاريخ والوقت بشكل تلقائي في الخلية B2 ، وإذا عدت وقمت بإحداث تغيير مرة أخرى يتحدث التاريخ والوقت مرة أخرى )
1 ) قبل إدراج المعادلة التي تؤدي المطلوب ، لابد من ضبط إعداد تفعيل الخيار Enable iterative calculation ، حيث أن المعادلة ستكتب في الخلية B2 ، والمعادلة نفسها ستشير للخلية B2 ، وهذا يؤدي إلى حدوث خطأ مرجعي Circular Reference ، ولذا لتفادي هذا الخطأ الدائري المرجعي نتبع التالي :
2 ) قم بتنسيق النطاق المطلوب إدراج التاريخ والوقت به ، بالشكل التالي :
3 ) قم بإدراج المعادلة التالية في الخلية B2 ، ثم قم بسحبها إلى نهاية النطاق
CODE
=IF(A2<>"",IF(AND(B2<>"",CELL("address")=ADDRESS(ROW(A2),COLUMN(A2))),NOW(),IF(CELL("address")<>ADDRESS(ROW(A2),COLUMN(A2)),B2,NOW())),"")
>>> الطريقة الثانية (باستخدام الأكواد)
الأمر هنا يتسم بالبساطة حيث يتم وضع الكود التالي في حدث ورقة العمل ، عن طريق كليك يمين على اسم ورقة العمل ثم اختر الأمر View Code ثم ضع الكود (لكن يعيب استخدام الأكواد عدم القدرة على التراجع .. وإذا وجدت أن هناك أمر غير مرغوب فيه يمكنك ببساطة أن تغلق المصنف بدون حفظ لتفادي حدوث أية أخطاء)
CODE
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Handler
If Target.Column = 1 Then
Application.EnableEvents = False
If Len(Target.Cells(1).Value2) <> 0 Then
Target.Offset(, 1).Value = Format(Now(), "dd-mm-yyyy hh:mm:ss")
Else
Target.Offset(, 1).Value = vbNullString
End If
Application.EnableEvents = True
End If
Handler:
End Sub
رابط الملف من هنا
إعداد وتقديم / ياسر خليل أبو البراء