Unfortunately not. Google sheets's freeze feature is pretty basic, and only supports freezing one section from the top (or left) of the spreadsheet to your desired endpoint.
If you select a column or row and look in the menu, under View > Freeze, you can see that you can't freeze individual rows/columns, you can only freeze UP TO a certain row/column.
Functions like GOOGLEFINANCE are only updated when the spreadsheet is open by a user, there isn't a Google Apps Script method that is able to do this. The closest is SpreadsheetApp.flush() but this only makes that the changes made by the script be pushed to the spreadsheet.
One alternative is to rethink your model and take advantage that ...
GOOGLEFINANCE already offer a way to report historic data. The syntax is
GOOGLEFINANCE(ticker, [attribute], [start_date], [end_date|num_days], [interval])
Example
The following formula returns the daily close values of NASDAQ:GOOG
from January 1, 2017 to today.
A1:
=GOOGLEFINANCE("NASDAQ:GOOG","price","1/1/2017",TODAY())
The following formula returns the daily close values of NASDAQ:AMZN
from January 1, 2017 to today.
D1:
=GOOGLEFINANCE("NASDAQ:AMZN","price","1/1/2017",TODAY())
To calculate the daily average, we could not use AVERAGE with ARRAYFORMULA but we could use the +
and /
operands:
G1:
=ArrayFormula((B2:B+E2:E)/2)
Note:
Suggestion: Delete the blank rows at the bottom in order to make the calculation of the daily average just for the rows with data.
The history daily average will be calculate from the start date to the actual date every time that the spreadsheet be recalculated.
Result (extract):
Date Close Date Close Average
1/3/2017 16:00:00 786.14 1/3/2017 16:00:00 786.14 786.14
1/4/2017 16:00:00 786.9 1/4/2017 16:00:00 786.9 786.9
1/5/2017 16:00:00 794.02 1/5/2017 16:00:00 794.02 794.02
1/6/2017 16:00:00 806.15 1/6/2017 16:00:00 806.15 806.15
1/9/2017 16:00:00 806.65 1/9/2017 16:00:00 806.65 806.65
1/10/2017 16:00:00 804.79 1/10/2017 16:00:00 804.79 804.79
Note:
Google spreadsheet functions are only recalculated while the spreadsheet is open, so using a script to be ran while the spreadsheet is not opened by anyone will retrieve the values saved the last time the spreadsheet was online-opened/synced offline changes.
References
Best Answer
The easiest solution would be to move the totals to the very first row in the sheet, like this:
When the totals are at the top of the sheet, and the first row is in the frozen section, it will remain visible in the web version of Google Sheets as well as the Sheets iOS app.