Não vou resolver o seu problema, mas vou dar um certo direcionamento.
Uma coisa é inserir os dados outra é exibi-los, inserir os dados na parte superior é algo q dá um certo trabalho p/ criar o código e gera erro como este q você está ressaltando, é MUITO mais fácil inserir os novos dados na parte inferior e depois ordenar por data, muito menos código, muito menos problema associado.
Procure fazer código q trabalhe com tabela nomeada, é infinitamente mais fácil mexer com código VBA p/ tabelas nomeadas do q p/ cada célula ou mesmo intervalo de células, dependendo da complexidade q sua planilha atingir fica mais fácil p/ alguém te ajudar (entender a lógica) se estiver tudo em tabelas.
Procure trabalhar com tabelas interligadas por código, por exemplo, consumidor tem uma tabela com seus dados pessoais, tipo endereço, etc, já a compra feita repetidamente, tipo compra, deve-se utilizar o código e não o nome, na hora de analisar os dados é q você faz a associação entre nome e compra.
Rendimento líquido e outros dados consolidados são facilmente obtidos com uso de Tabela Dinâmica, sem código e mais ágil, procure se familiarizar com isso, gerência de informação precisa de agilidade, não dá p/ ficar esperando a elaboração de código p/ toda vez q você quer extrair informação da sua base de dados.