Вот простой пример, где я жертвую ТОП-2 строками, которые содержат ширину для активных и неактивных столбцов:
![enter image description here](https://i.stack.imgur.com/42BdG.png)
Вы можете выбрать любойстрока, возможно, даже использовать именованный диапазон в случае, если вы добавляете / удаляете строки. Но это код, который я использовал:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rng As Range
For Each cl In Range("A1:E1")
Set rng = Intersect(cl.EntireColumn, Target.Columns)
If Not rng Is Nothing Then
cl.ColumnWidth = cl(1)
Else
cl.ColumnWidth = cl(2)
End If
Next cl
End Sub
![enter image description here](https://i.stack.imgur.com/veO3k.gif)
РЕДАКТИРОВАТЬ
Другая интересная вещь, которую нужно сделать, - это создать Dictionary
при активации определенного листа. Заполните этот словарь шириной столбцов каждого столбца в указанном диапазоне. Остальное - небольшая адаптация кода, который я показал выше.
Public dict As New Scripting.Dictionary
Dim rng As Range, cl As Range
Option Explicit
Private Sub Worksheet_Activate()
For Each cl In Range("A1:E1")
dict.Add cl.Column, cl.ColumnWidth
Next cl
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each cl In Range("A1:E1")
Set rng = Intersect(cl.EntireColumn, Target.Columns)
If Not rng Is Nothing Then
cl.EntireColumn.AutoFit
Else
cl.ColumnWidth = dict(cl.Column)
End If
Next cl
End Sub