Not sure you need VBA for this -- native functions are generally quicker.
If you ensure your first row is blank then given following assumptions:
-- all IDs have min of 2 rows and max of 3 rows
-- if 3 rows 2 could be bottles or 2 could be crates
-- crate always appears in last row for given ID
To have 0 display as OK use a Custom Format rather than double evaluate (for speed), apply custom format to D3 onwards of: #;[red](#);"OK"
(obviously change format to suit own preferences re: positive/negative values)
See attached for working example.
Bookmarks