You could use Word() or Words() instead of Left().
Names Default To Here(1);
dt = New Table("Untitled 143",
Add Rows(1),
Compress File When Saved(1),
New Column("Column1", Numeric, "Continuous", Format("Best", 12), Set Values([1])),
New Column("Column1_2", Numeric, "Continuous", Format("Best", 12), Set Values([2])),
New Column("Column2", Numeric, "Continuous", Format("Best", 12), Set Values([3])),
New Column("Column2_2", Numeric, "Continuous", Format("Best", 12), Set Values([4]))
);
tweaklist = {"Column1_2", "Column2_2"};
For Each({col_name}, tweaklist,
Eval(EvalExpr(
dt << New Column(Word(1, col_name, "_") || "_Δ", Numeric, Continuous, Formula(
Expr(Name Expr(As Column(col_name))) - Expr(Name Expr(As Column(Word(1, col_name, "_"))))
));
));
);
Also if you don't need the formula but just the values, you could use << Set Each Value which doesn't need as heavy evaluation
For Each({col_name}, tweaklist,
dt << New Column(Word(1, col_name, "_") || "_Δ", Numeric, Continuous, << Set Each Value(
As Column(col_name) - As Column(Word(1, col_name, "_"))
));
);
-Jarmo