Мотивация заключается в том, что в Excel после копирования сегмента ячеек можно выделить только больше ячеек без возможности вычесть выделение. Это раздражало меня, поэтому сегодня я написал скрипт vba, чтобы вычесть из выделения ячейки, которые были выделены более одного раза.
Sub MultiDeselect()
Dim rng As Range
Dim Uni As Range 'this is the union
Dim Intersct As Range
Dim UnionMinusIntersect As Range
Dim singleArea As Range
'MsgBox ActiveCell.Address
If Selection.Areas.Count > 1 Then
For Each singleArea In Selection.Areas
For Each rng In singleArea.Cells
If Uni Is Nothing Then
Set Uni = rng
ElseIf Application.Intersect(Uni, rng) Is Nothing Then
Set Uni = Union(Uni, rng)
ElseIf Intersct Is Nothing Then
Set Intersct = rng
ElseIf Intersect(Intersct, rng) Is Nothing Then
Set Intersct = Union(Intersct, rng)
End If
Next rng
Next singleArea
' MsgBox Uni.Address
If Intersct Is Nothing Then
Set UnionMinusIntersect = Uni
Else
' MsgBox Intersct.Address
For Each singleArea In Uni
For Each rng In singleArea.Cells
' MsgBox rng.Address
If Intersect(rng, Intersct) Is Nothing Then
If UnionMinusIntersect Is Nothing Then
Set UnionMinusIntersect = rng
Else
Set UnionMinusIntersect = Union(UnionMinusIntersect, rng)
End If
End If
Next rng
Next singleArea
End If
'Check not null in case every cell was highlighted more than once
If Not UnionMinusIntersect Is Nothing Then
If UnionMinusIntersect.Cells.Count > 0 Then
UnionMinusIntersect.Select
End If
End If
End If
End Sub
К моему большому разочарованию, после окончания я обнаружил, что копирование нескольких областей не допускается в Excel, что противоречит моей обычной цели выделения чего-либо. Прежде чем я попытался реализовать мультикопирование и мультипасту, я хотел узнать, сделал ли это кто-то уже. В основном это будет копировать каждую ячейку относительно верхнего левого края выделения в соответствующую ячейку относительно верхнего левого угла активной ячейки.
Ответ Джордана прекрасно работает. Вот пример окончательного вывода: