I would recommend an { array expression }, like this:
={ Sheet1!A2:G }
This is more or less the same as
=arrayformula(Sheet1!A2:G)
...but I prefer the syntax because it allows you to specify non-adjacent columns. For example, you can skip columns {} and D like this:F
={ Sheet1!A2:C, Sheet1!E2:E, Sheet1!G2:G }
In spreadsheets where the locale uses the comma as decimal mark instead of the period, use a backslash instead of comma as horizontal separator.\
To skip rows, use the semicolon as vertical separator. For example, you can skip rows ; like this:2:9
={ Sheet1!A1:G1; Sheet1!A10:G }
The open-ended range reference means "columns A to G starting in row 2 and extending all the way to the bottom of the sheet."A10:G
You can also leave out the row number to get an open-ended range reference like which means "columns A to G from the very top to the bottom of the sheet." This reference will behave the same as A:G in almost all situations. I have made it a habit to always include the start row in the reference because that way the formula will automatically adjust in the event a row is inserted above row 1.A1:G
When the source sheet is a form responses sheet, another tactic is needed. Form responses are always inserted in newly created rows that cannot be referenced directly in advance.
To avoid the range reference from adjusting when you dynamically copy form responses to another sheet, start the copy from row 1, like this:
={ 'Form Responses 1'!A1:A }
Alternatively, use an array formula, like this:
=arrayformula(
if(
row('Form Responses 1'!A1:A) = 1,
"Enter column header here",
'Form Responses 1'!A1:A
)
)
An even better way to deal with form responses is to aggregate the data directly to whatever reports you need with the query() function.