كيف يمكن تذكُّر أو حفظ القيمة السابقة لخلية تم تعديلها في Excel؟
عند تعديل خلية في Excel، تُستبدل القيمة السابقة فورًا ولا تظهر مجددًا إلا إذا قمت بالتراجع. فإذا كنت بحاجة إلى الاحتفاظ بتلك القيمة—لمقارنتها أو مراجعتها أو التراجع عنها—فأمامك خياران: إما التقاطها تلقائيًا عبر روتين VBA قصير يُسجّل القيمة السابقة في عمود مساعد قبل كل تعديل، أو مراجعة التغييرات باستخدام أدوات Microsoft 365 (مثل «إظهار التغييرات» و«محفوظات الإصدار») شريطة أن يكون الملف محفوظًا على OneDrive أو SharePoint. ويشرح هذا البرنامج التعليمي الطريقتين لتتمكن من اختيار الأنسب لسير عملك ومتطلبات الحوكمة لديك.
➤ أدوات Microsoft 365 — مراجعة القيم السابقة والمحدّثة للخلايا باستخدام «إظهار التغييرات» و«محفوظات الإصدار»
حفظ القيمة السابقة للخلية باستخدام كود VBA في Excel
افترض أن لديك جدولًا كما هو موضح في لقطة الشاشة أدناه. عند تعديل أي خلية في العمود C، قد ترغب في حفظ قيمتها السابقة في الخلية المقابلة بالعمود G، أو إضافة تلك القيمة القديمة تلقائيًا كتعليقٍ للرجوع إليها ومراجعتها لاحقًا. يُعد هذا الأسلوب مفيدًا بشكل خاص عندما تريد الاحتفاظ بسجلٍ مستمر أو الرجوع إلى القيم السابقة أثناء إدخال البيانات المستمرة أو عمليات التحقق من الجودة.

السيناريو الرئيسي:بالنسبة لأوراق العمل التي تراجع فيها التغييرات أو تُوحِّدها بشكل متكرر—مثل الجرد أو السجلات أو التتبع المالي—فإن إبقاء القيم السابقة مرئية يوفّر الوقت ويقلل من فقدان البيانات العرضي.
لبدء الاستخدام، افتح ورقة العمل التي ترغب في تسجيل القيم السابقة بها، ثم اتبع الخطوات التالية:
1. انقر بزر الماوس الأيمن على تبويب الورقة، ثم اختر «عرض الكود» من القائمة المختصرة. وسيؤدي ذلك إلى فتح محرر Visual Basic for Applications (VBA). انظر لقطة الشاشة:

2. في نافذة «Microsoft Visual Basic for Applications»، الصق كود VBA التالي في نافذة الكود. سيتيح لك هذا الماكرو حفظ القيمة السابقة للخلايا في العمود المستهدف ضمن عمود آخر.
قبل تشغيل هذا النص البرمجي، تأكد من تعديل مراجع الأعمدة المستهدفة في الكود. ففي هذه الأمثلة، يشير «C:C» إلى العمود الذي يتم تتبع التغييرات فيه، بينما يتوافق الرقم "7" مع العمود G المخصص لتخزين القيم السابقة. ويمكنك تخصيص هذه المراجع بسهولة لتتناسب مع تخطيط جدولك الخاص.
كود VBA: حفظ القيمة السابقة للخلية في خلية أخرى
Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xDCell As Range
Dim xHeader As String
Dim xCommText As String
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Previous value :"
x = xDic.Keys
For I = 0 To UBound(xDic.Keys)
Set xCell = Range(xDic.Keys(I))
Set xDCell = Cells(xCell.Row, 7)
xDCell.Value = ""
xDCell.Value = xDic.Items(I)
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim I, J As Long
Dim xRgArea As Range
On Error GoTo Label1
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Set xDependRg = Target.Dependents
If xDependRg Is Nothing Then GoTo Label1
If Not xDependRg Is Nothing Then
Set xDependRg = Intersect(xDependRg, Range("C:C"))
End If
Label1:
Set xRg = Intersect(Target, Range("C:C"))
If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
Set xChangeRg = xRg
Else
Application.EnableEvents = True
Exit Sub
End If
xDic.RemoveAll
For I = 1 To xChangeRg.Areas.Count
Set xRgArea = xChangeRg.Areas(I)
For J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Formula
Next
Next
Set xChangeRg = Nothing
Set xRg = Nothing
Set xDependRg = Nothing
Application.EnableEvents = True
End Sub في الحالات التي يُفضّل فيها تخزين القيمة السابقة كـ التعليق—مفيد للمعاينة السريعة والتعليق—يحقّق كود VBA التالي هذا تلقائيًا كلما تم تغيير خلية في العمود المستهدف:
كود VBA: حفظ القيمة السابقة للخلية في التعليق
Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xHeader As String
Dim xCommText As String
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Previous value :"
For I = 0 To UBound(xDic.Keys)
Set xCell = Range(xDic.Keys(I))
If Not xCell.Comment Is Nothing Then xCell.Comment.Delete
With xCell
.AddComment
.Comment.Visible = False
.Comment.Text xHeader & vbCrLf & xDic.Items(I)
End With
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim I, J As Long
Dim xRgArea As Range
On Error GoTo Label1
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Set xDependRg = Target.Dependents
If xDependRg Is Nothing Then GoTo Label1
If Not xDependRg Is Nothing Then
Set xDependRg = Intersect(xDependRg, Range("C:C"))
End If
Label1:
Set xRg = Intersect(Target, Range("C:C"))
If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
Set xChangeRg = xRg
Else
Application.EnableEvents = True
Exit Sub
End If
xDic.RemoveAll
For I = 1 To xChangeRg.Areas.Count
Set xRgArea = xChangeRg.Areas(I)
For J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Text
Next
Next
Set xChangeRg = Nothing
Set xRg = Nothing
Set xDependRg = Nothing
Application.EnableEvents = True
End Sub ملاحظات حول المعاملات:
- الرقم 7 في
Cells(xCell.Row,7)يشير إلى العمود G. غيّر هذه القيمة إذا أردت حفظ القيمة السابقة في عمود آخر. Range("C:C")يُحدِّد العمود الذي سيتم تتبع التغييرات فيه. غيّره حسب احتياجاتك، مثل استخدام «D:D» لتتبع التغييرات في العمود D.
3. لتمكين دعم القاموس للنص البرمجي، انتقل إلى «أدوات» > «مراجع...» في محرر VBA. عند ظهور مربع حوار «المراجع – VBAProject»، فعّل خيار «Microsoft Scripting Runtime»، ثم انقر «موافق» كما هو موضح.

4. اضغط «Alt» + «Q» لإغلاق محرر VBA والعودة إلى ورقة العمل الخاصة بك.
من هذه اللحظة فصاعدًا، كلما تم تعديل قيمة في العمود C، سيقوم Excel تلقائيًا بنسخ قيمتها السابقة إلى العمود G أو بإضافتها كتعليق للخلية، مما يمكّنك من تتبع التغييرات والتحقق منها بسهولة ويضمن توفر البيانات التاريخية للمراجعة أو التدقيق أو تصحيح الأخطاء.
مثال على المخرجات عند حفظ القيم السابقة للخلايا في خلايا أخرى:

مثال على المخرجات عند حفظ القيم السابقة للخلايا في التعليقات:

نصائح واستكشاف الأخطاء وإصلاحها:
- إذا لم تعمل ماكروهات VBA كما هو متوقع، فانتقِل إلى «ملف» > «خيارات» > «مركز الثقة» > «إعدادات الماكرو»، وتأكد من ضبط الإعدادات على «تمكين جميع الماكروهات».
- راجع مراجع الأعمدة الخاصة بك إذا لم تُسجَّل القيم في الموقع المطلوب.
- إذا استمرت الأخطاء، فتأكد من تفعيل مكتبة «Microsoft Scripting Runtime» بشكل صحيح كما ورد أعلاه.
أدوات Microsoft 365 — مراجعة القيم السابقة والمحدّثة للخلايا باستخدامإظهار التغييراتومحفوظات الإصدار
في Microsoft 365، يمكنك مراجعة التعديلات (من غيّر ماذا ومتى، بما في ذلك القيم قبل وبعد) دون الحاجة إلى استخدام ميزة «تتبع التغييرات» القديمة. استخدمإظهار التغييراتللحصول على تفاصيل دقيقة على مستوى الخلية، ومحفوظات الإصدارلعرض لقطات كاملة للملف واستعادته بسهولة.
المتطلبات
- تم حفظ المصنف علىOneDrive أوSharePoint.
- تم تسجيل الدخول بحساب Microsoft 365؛الحفظ التلقائيمفعّلبشكل نشط.
- التنسيق الحديث ().xlsx)؛ ولا يستخدمالمصنف المشترَك (القديم).
إظهار التغييرات (مراجعة على مستوى الخلية)
1. افتح المصنف المحفوظ على السحابة، ثم انتقل إلىمراجعة ▸ إظهار التغييراتلفتح الجزء الجانبي.
2. (اختياري) حدد ورقةً أو نطاقًا أولًا لتضييق نطاق النتائج.
3. استعرض الإدخالات لرؤية المحرر، والطابع الزمني، والقيمالقديمة ← الجديدة؛ ثم انقر على إدخال للانتقال مباشرةً إلى الخلية.
محفوظات الإصدار (مقارنة واستعادة)
1. انتقل إلىملف ▸ معلومات ▸ محفوظات الإصدار.
2. افتح إصدارًا سابقًا للمقارنة؛ يمكنك نسخ الخلايا أو النقر علىاستعادةلاسترجاع الملف بأكمله.
- هل زر «إظهار التغييرات» معطّل (باللون الرمادي)؟احفظ الملف على OneDrive/SharePoint، وفعّل «الحفظ التلقائي»، وحوّل من تنسيق وضع التوافق ()ملف ▸ معلومات ▸ تحويل)، وتأكد من أن خاصيةالمصنف المشترَك (القديم)غير مفعّلة. وإذا ظل الخيار غير متاح في تطبيق سطح المكتب، جرّب استخدام Excel للويب!
- الأمان/الأقفال:قد تعطّل حماية المصنف أو ورقة العمل، أو التشفير، أو إدارة الحقوق (IRM) ميزة «إظهار التغييرات».
- الملفات المحلية:لا يُحتفظ بسجلٍ كاملٍ للتغييرات في الملفات المحفوظة محليًّا؛ لذا استخدم ميزة «محفوظات الإصدار» عبر السحابة للحصول على أفضل النتائج.
- هل تحتاج إلى كتابة القيم فعليًا داخل الخلايا؟إن ميزتي «إظهار التغييرات» و«محفوظات الإصدار» هما أداتان مخصصتان للمراجعة؛ أما إذا أردت تسجيل «القيمة السابقة» في عمود مساعد كلما تم تعديل خلية، فاستخدم نصًّا صغيرًا من كود
Worksheet_Changeبلغة VBA.
المزايا
- مراجعة تلقائية تُظهر من قام بالتغيير ومتى تم ذلك، مع عرض القيم قبل التعديل وبعده—بدون الحاجة إلى ماكروهات.
- يعمل بسلاسة عبر جميع المنصات (Windows وMac والويب) عند حفظه في OneDrive أو SharePoint.
العيوب
- يتطلب التخزين السحابي والحفظ التلقائي، وقد تكون التفاصيل محدودة بالنسبة لبعض التعديلات المؤقتة.
- لا يقوم بإدخال القيم السابقة تلقائيًا في الخلايا؛ استخدم VBA إذا كانت هذه الميزة ضرورية لمنطق عملك.
أفضل أدوات الإنتاجية لمكتبتك
عزِّز مهاراتك في Excel باستخدام Kutools لـ Excel، وعايش الكفاءة كما لم تفعل من قبل.يقدّم Kutools لـ Excel أكثر من 300 ميزة متقدمة لتعزيز الإنتاجية ووقت الحفظ.انقر هنا للحصول على الميزة التي تحتاجها أكثر من غيرها...
يجلب Office Tab واجهة ذات علامات تبويب إلى Office، ويجعل عملك أسهل بكثير
- تمكّن من التحرير والقراءة باستخدام علامات التبويب في Word وExcel وPowerPoint، وPublisher وAccess وVisio وProject.
- افتح وأنشئ مستندات متعددة في علامات تبويب جديدة داخل النافذة نفسها، بدلاً من فتح نوافذ جديدة.
- يزيد إنتاجيتك بنسبة 50% ويوفّر لك مئات نقرات الفأرة كل يوم!
جميع الإضافات من Kutools في برنامج تثبيت واحد!
Kutools for Office حزمةٌ تحتوي على إضافاتٍ مخصصة لتطبيقات Excel وWord وOutlook وPowerPoint، إلى جانب Office Tab Pro، مما يجعلها الخيار المثالي للفِرق التي تعمل عبر تطبيقات Office.
- حزمة شاملة واحدة— إضافات Excel وWord وOutlook وPowerPoint بالإضافة إلى Office Tab Pro
- برنامج تثبيت واحد، ترخيص واحد— الإعداد خلال دقائق (جاهز لـ MSI)
- يعمل بشكل أفضل معًا— إنتاجية ميسَّرة عبر تطبيقات Office
- تجربة مجانية لمدة 30 يومًا بكامل الميزات— بدون تسجيل، بدون بطاقة ائتمان
- أفضل قيمة— وفِّر مقارنةً بشراء الإضافات بشكل منفصل