أخي أحمد غانم
جرب الكود التالي لعله يفي بالغرض
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim OffsetCol As Long, X As Long
Static ColorRange As Range, ColorIndexes() As Variant
Const COLUMNSDISPLAYED As Long = 60
Application.ScreenUpdating = False
If Not ColorRange Is Nothing Then
For X = 1 To ColorRange.Columns.Count
ColorRange.Cells(X).Interior.ColorIndex = ColorIndexes(X)
Next
Else
On Error Resume Next
Set ColorRange = Range(Sheet2.Cells(1).Value)
On Error GoTo 0
If Not ColorRange Is Nothing Then
For X = 1 To ColorRange.Columns.Count
ColorRange.Cells(X).Interior.ColorIndex = CLng(Split(Sheet2.Cells(2).Value, ",")(X - 1))
Next
End If
End If
OffsetCol = Application.Max(Target.Column - (COLUMNSDISPLAYED \ 2), 0)
Set ColorRange = Range(Cells(Target.Row, 1 + OffsetCol), Cells(Target.Row, Application.Min(Columns.Count, Target.Column + (COLUMNSDISPLAYED \ 2))))
ReDim ColorIndexes(1 To ColorRange.Columns.Count)
For X = 1 To ColorRange.Columns.Count
ColorIndexes(X) = ColorRange.Cells(X).Interior.ColorIndex
Next
Sheet2.Cells(1).Value = ColorRange.Address(0, 0, , -1)
Sheet2.Cells(2).Value = CStr(Join(ColorIndexes, ","))
ColorRange.Interior.ColorIndex = 36
Application.ScreenUpdating = True
End Sub