<<Get rows where() returns a matrix. If there is only one instance of "Colour" the matrix will have a single number. You need to extract that number of the matrix header before using it as an index.
Here are two examples that both should work.
header=(dt<<Get Rows Where(:(2)=="Colour"))[1]; // header is a number
For( i = 2, i <= lastcol, i++,
Column( i ) << set Name( Column(i)[header] )
);
header=dt<<Get Rows Where(:(2)=="Colour"); // header is a 1x1 matrix
For( i = 2, i <= lastcol, i++,
Column( i ) << set Name( Column(i)[header[1]] ) // exctract the (first) number of the matrix header
);