Easy. Give yourself three tags:
Roll_Yards (existing tag, yards since last reset)
Prev_Roll_Yards (total yards on previously run rolls)
Total_Yards (total yards this shift)
At all times, you add Prev_Roll_Yards to Roll_Yards and store the result in Total_Yards.
Your reset button performs two tasks:
ADD Prev_Roll_Yards Roll_Yards Prev_Roll_Yards
CLR Roll_Yards
Then at the end of your shift you zero out all three tags. If you wanted, you could move the Total_Yards to a Total_Yards_LastShift tag first.
Also, if you wanted, you could switch to metric units like the rest of the world and count in metres instead
One tip (as alluded to by RonJohn) - REAL values are not ideal for totaliser functions. Floating point math is always an approximation, and the bigger your numbers get, the less accurate that approximation is. I just recently set up a weight totaliser that receives kg to one decimal place for each batch. I multiply it by 10 and store it in a DINT, so if my batch weight was 123.4kg, I add 1234 to my DINT. Then on any HMI/SCADA that display the value, I scale it by a factor of 10 before displaying. This way I can count up to around 214 million kg and the value remains 100% accurate. Might be worth investigating a similar thing in your application, depending on accuracy requirements and how large the numbers you're getting are