Try:
Sub AutoArrangeSlicersVERTICAL()
' Places the slicers on the current sheet in a vertical column,
' aligned LEFT with the leftmost slicer, starting from the top of the highest slicer .
Dim objSlicerCache As SlicerCache
Dim objSlicer As Slicer
Dim mySlicers, HighestTop, LeftMost, ArrList, Key
Dim lNewTop
Dim lGapWidth
Dim lNewSlicerWidth
Set mySlicers = CreateObject("Scripting.Dictionary")
lGapWidth = 5 ' set the gap width between the slicers
lNewSlicerWidth = 0 ' set to a size > 0 to set the same width to all slicers
HighestTop = 9E+99: LeftMost = 9E+99
' set to 0 to keep the original width of the slicers
For Each objSlicerCache In ActiveWorkbook.SlicerCaches
For Each objSlicer In objSlicerCache.Slicers
If objSlicer.Shape.TopLeftCell.Worksheet.Name = ActiveSheet.Name Then
mySlicers.Add objSlicer.Caption, objSlicer 'you might want to use .Caption instead of .Name here
If lNewSlicerWidth > 0 Then
' set the new same width to all slicers
objSlicer.Width = lNewSlicerWidth
End If
HighestTop = Application.Min(HighestTop, objSlicer.Top)
LeftMost = Application.Min(LeftMost, objSlicer.Left)
End If
Next objSlicer
Next objSlicerCache
lNewTop = HighestTop
' Okay, we've got the most left and highest positions and all the slicers we're going to reposition in the mySlicers dictionary.
' Now, loop through all slicers again and position them right next to the first one
' with a small gap
'Sort the mySlicer keys:
Set ArrList = CreateObject("System.Collections.ArrayList") 'for sorting
For Each Key In mySlicers
ArrList.Add Key
Next Key
ArrList.Sort
For Each Key In ArrList
With mySlicers(Key)
.Left = LeftMost
.Top = lNewTop
lNewTop = .Top + .Height + lGapWidth
End With
Next Key
End Sub