Manipulação de conjunto de dados do Excel

0

Estou com problemas para manipular meu conjunto de dados no formulário de que preciso. Eu tenho 50 planilhas cujos dados devem ser reorganizados em um determinado padrão para serem corretamente interpretados por um programa de software. Para uma das planilhas, eu tenho o conjunto de dados inicial, bem como o que deve ser depois de reorganizado. Eu acho que, se eu puder recriar a folha final a partir da inicial, poderei usar o mesmo método nas outras planilhas.

Incluí duas capturas de tela que espero ilustrarão o padrão e como os dados devem ser organizados:

Antes

Depois

Os dados são os mesmos em ambas as planilhas, é apenas o modo como foi definido que mudou.

Eu codifiquei com cor algumas das linhas para ajudar a ilustrar o padrão, que consiste essencialmente em virar a parte destacada da linha horizontalmente e depois girar para baixo e para a direita, como se estivesse em uma dobradiça. Espero que isso possa ser feito de forma recursiva por meio de funções integradas do Excel, já que tenho pouca experiência com o VBA.

Meu colega e eu tentamos usar o deslocamento interno da função, mas fizemos pouco progresso, então espero que alguém conheça uma maneira mais eficiente de resolver isso.

Qualquer ajuda é muito apreciada, obrigado.

    
por bh514 13.09.2016 / 02:26

2 respostas

0

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:

  1. 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.
  2. 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.

    
por 13.09.2016 / 02:56
0
I'm not sure how long the $A column of numbers is.

It looks pretty easy to put into a macro, 
following your manual steps to convert it.
As I see it...

Select A$ 
Insert Column
Select $A$4
Fill down 0 to x ?
Select $C$4
[shift]+[ctrl]+[arrow right]
[shift]+[ctrl]+[arrow down]
[Ctrl]+[X] ( cut )
Paste special with Transpose option into $a$4

(instruções aproximadas em inglês não VBA) Em seguida, escolha Ferramentas Registro de macro e atribua uma tecla de atalho e gravação, em seguida, pare e salve.

    
por 13.09.2016 / 03:25