Um dos principais problemas é que você tenta usar o Excel como uma linguagem de programação que processa dados de A para B ; isso é possível, mas não é o comportamento natural de uma planilha. Uma planilha deve conter alguns dados de entrada , e estaticamente calcula outros dados baseados nela.
Existem duas abordagens gerais para o seu tipo de processamento:
- Você ignora que o Excel não foi realmente criado para processos e escreve código VB que, em seguida, executa uma única vez para executar seu processo.
- Você reinterpreta seu processo para ser um layout estático; então você pode usar fórmulas.
Eu não estou indo para a codificação VB Macro; há bastante escrito sobre isso, e se você não tem experiência, você levará algumas horas (se você for inteligente) para dominar o suficiente para fazer o que quiser (ou para sempre, se você não estiver pensando logicamente) - programação é para muitos mas não para todos).
Com fórmulas, a abordagem seria definir uma área de destino em algum lugar (outra planilha, uma planilha em uma planilha coletiva para todos os 50, ou mais abaixo na mesma planilha, sempre que desejar) e preencher essa área com fórmulas apropriadas que usam o dados existentes para gerar o layout desejado.
Supondo que você reduza o resultado, começando na linha 51.
Vamos começar com a transposição - você pode criar isso inserindo uma fórmula como =INDEX($C$4:$AC$47,COLUMN()-3,ROW()-50)
. Observe que troquei os argumentos de coluna e linha - coloquei ROW()
no argumento de coluna e COLUMN()
no argumento de linha; que produz a transposição. Os deslocamentos mapearão a linha e a coluna das células atuais para a coluna e linha das células de origem, talvez você precise adicionar ou subtrair um pouco mais, apenas tente. Copie essa fórmula em toda a sua área de destino (mesmo tamanho da área de origem) e ajuste os deslocamentos para obtê-la correta.
O próximo passo é o 'rotativo'. Para girar para a direita, você precisa compensar o parâmetro da célula por mais 1, 2, 3, para cada linha que estiver desativando, para que o ajuste forneça algo como =INDEX($C$4:$AC$47,COLUMN()-3+(ROW()-51),ROW()-50)
- adicionei ROW()-51
ao argumento de linha (que contém COLUMN () por causa da transposição); ROW()-51
será 0 para a primeira linha de destino, 1 para a segunda linha, 2 para a terceira, etc. Se você copiar essa fórmula na matriz de destino, ela fará a 'rotação'. Jogue com + e - para girar para a esquerda ou para a direita e assim por diante. Você também precisará adicionar um 'MOD (..., 26) ao redor dele, para torná-lo' wrap '.
Depois de entender esses conceitos, você pode criar rapidamente a matriz de fórmulas que gera o layout de destino e usar o layout de destino para a entrada de seus programas (ou - quando tiver certeza, copie os valores do alvo na área de origem e apague o alvo). Note que eu não lhe dei a solução exata, mas a entrada para aprender a lidar com isso sozinho. Você precisa colocar um pouco mais de esforço nisso.
Esta é, pela minha experiência, a maneira mais fácil de aprender e aplicar aos requisitos em constante mudança. Novamente, sinta-se à vontade para usar a abordagem Macro VB; é mais aprendizagem, mas você tem uma ferramenta muito mais poderosa.