Логика в вашем примере кода делает следующее:
Заменяет второй на последний элемент на sku.
sessionArray(length-1)=sku
Удаляет последний элемент.
ReDim Preserve sessionArray(length-1)
Это явно не то, что вы хотите. Вместо этого вам нужна логика, чтобы найти предмет sku, а затем избавиться от него.
Если порядок предметов не имеет значения, вы можете сделать что-то вроде этого:
Sub RemoveArrayItem(array, item)
' Find item
For i = LBound(array) To UBound(array)-1
If array(i) = item Then
' Replace the item with last item
array(i) = array(UBound(array))
Exit For
End If
Next
' Remove the last item which is either a duplicate or it is the item
' (assuming that the item is definitely in the array)
ReDim Preserve array(UBound(array)-1)
End Sub
sku = "the_item_value"
sessionArray = session("cart")
RemoveArrayItem sessionArray, sku
session("cart") = sessionArray