Yes, this seems normal.
It isn't moving to the last record, it's populating all records to the last, in a dynamic recordset (you can potentially edit any record and it should reflect any editing taking place dynamically!). It's not simple, but it's useless.
If Demand_Check_C is an Access table, you can open it in table mode and you can read the last record instantly (but a table doesn't have a record cont). If it isn't, you can use dbForwardOnly to speed things up, but, as the name implies, you cannot move back.
Basically, your function might very well run for a dozen hours, It's not clear what it does, but if you are in the process of normalising a table structure, some operations can take that sort of time. But you don't need the record count.
Use a table-type or a forward only recordset, use the 60 records chunks (still yielding in the order of 100'000 non-trivial insert queries to analyse, optimise, and run), and copy the inner section outside of the loop to get the less-than-60 records from the end.
Do not use the total record count or absolute positions.
(°v°)