A family of Microsoft relational database management systems designed for ease of use.
Why rename them at all? You can return the data as the result set of a query which aliases each column:
SELECT
Q1_a AS [Question 1a],
Q2_a AS [Question 2a],
Q2_b AS [Question 2b],
< and so on>
FROM [Table 1];
If you do want to rename them then insert the result set of this query into a new table using a 'make table' query.
But a far better solution would be to recast the table into a set of normalized tables by first inserting rows into an empty Questions table, one for each question, using the names you'd give to each column in the above query's result set as the values. This would then be followed by inserting rows into a Responses table using a UNION ALL operation:
INSERT INTO Responses(Question, Response)
SELECT "Question 1a", Q1_a
FROM [Table 1]
UNION ALL
SELECT "Question 2a", Q2_a
FROM [Table 1]
UNION ALL
SELECT "Question 2a", Q2_b
FROM [Table 1]
UNION ALL
< and so on>;
The Questions and Responses table can them be related on the Question columns, enforcing referential integrity and cascade updates.
If the responses are a standardized set of fixed answers you can also insert rows into an Answers table, one row per answer value, which you can ether do manually or again by means of an 'append' query from the original table, making sure that the Answer column is designated as the primary key so that duplicate values are rejected:
INSERT INTO Answers(Answer)
SELECT Q1_a
FROM [Table 1]
UNION ALL
SELECT Q2_a
FROM [Table 1]
UNION ALL
SELECT Q2_b
FROM [Table 1]
UNION ALL
< and so on>;
This would be related to Responses on the Answer columns, again enforcing the relationship.
In each of the 'append' queries above you do not have to do it all in one massive UNION ALL operation; it can be done piecemeal, appending from a subset of the original table's columns each time.