Colunas de atualização do Excel automaticamente

1

Tenho duas colunas do excel. Eles têm um relacionamento de pai e filho. por exemplo, se o valor D da linha 1 da célula for 1000000000, ele poderá ser pai de uma linha diferente.

O que estou tentando fazer é ter uma planilha excel com 1000 linhas. A estrutura de ID que recebi está incorreta. Eu estou tentando iniciar o novo ID de 1 e incrementar a 10 para o próximo ID seria 10. Assim, com esse padrão eu quero substituir o novo ID existente começando de 1 e, em seguida, atualizar a coluna New ParentID com o NewID atualizado.

Eu estava tentando escrever uma fórmula para conseguir isso, mas sou muito novo no excel. Isso teria que ser feito com uma macro? Alguma sugestão?

Exemplo de dados atual

 D           E
New ID      New Parent ID
1000000000  0
1100000000  1000000000
1100000001  1100000000
1100000002  1100000000
1100000003  1100000000
1100000004  1100000000
1100000005  1100000000
1100000006  1100000000
1100000007  1100000000
1200000000  1000000000
1200000001  1200000000
1200000002  1200000000
1200000003  1200000000
1200000004  1200000000
1200000005  1200000000
1200000006  1200000000
1200000007  1200000000
1200000008  1200000000
1200000009  1200000000
1200000010  1200000000
1200000011  1200000000
1200000012  1200000000
2000000000  0
2000000001  2000000000
2000000002  2000000000
3000000000  0
3100000000  3000000000
3100000001  3100000000
3100000002  3100000000
3100000003  3100000000
3100000004  3100000000

Exemplo de novos dados Observe o novo padrão. Então, o novo ID 1000000000 foi substituído por 1 e onde 1000000000 estava sendo usado na coluna NewParentID, que também foi substituído por 1. E assim por diante ... Então, basicamente eu poderia facilmente criar os valores incrementais no NewID, eu não sei como atualizar o segunda coluna com o id correto.

   New ID   New Parent ID
    1             0
    10            1
    1100000001    10
    1100000002    10
    1100000003    10
    1100000004    10
    1100000005    10
    1100000006    10
    1100000007    10
    
por tam tam 15.02.2013 / 18:40

2 respostas

2

Para um novo usuário do Excel, eu ficaria longe do VBA, a menos que necessário. Se eu entendi sua pergunta corretamente, você pode resolvê-la apenas com fórmulas. Eu tentei torná-los o mais simples possível.

Primeiro, eu preservaria o conjunto de dados original trabalhando em uma imagem dos dados de origem. É útil para fins de auditoria e pode ajudá-lo a entender melhor como isso funciona. As colunas ficariam assim:

ID         | Parent ID  | New ID     | New Parent ID
----------------------------------------------------
1000000000 | 0          |            |
1100000000 | 1000000000 |            |
1100000001 | 1100000000 |            |
1200000000 | 1000000000 |            |
1200000001 | 1200000000 |            |
1200000002 | 1200000000 |            |

(Para todos os exemplos, usarei o mesmo conjunto de dados de exemplo reduzido. A primeira coluna é a coluna A, os cabeçalhos de coluna estão na linha 1.)

Forneceremos um novo ID ao elemento filho na coluna "Novo ID" e seu ID pai será automaticamente avaliado na coluna "Novo ID pai".

IDs digitados

Por enquanto, basta copiar e colar os valores de ID na coluna "Novo ID":

ID         | Parent ID  | New ID     | New Parent ID
1000000000 | 0          | 1000000000 |
1100000000 | 1000000000 | 1100000000 |
1100000001 | 1100000000 | 1100000001 |
1200000000 | 1000000000 | 1200000000 |
1200000001 | 1200000000 | 1200000001 |
1200000002 | 1200000000 | 1200000002 |

Em seguida, na primeira célula do Novo ID pai, insira a seguinte fórmula: =VLOOKUP($B2,$A:$C,3,FALSE) . Essa fórmula faz o Excel procurar na vertical. Ele diz assim: "procure o valor da célula B2 (ID pai) na coluna A (coluna ID) e quando você encontrar uma correspondência exata, retorne o valor na terceira coluna (coluna C, Novos IDs)".

Dado como nossos dados são definidos, isso realmente significa "procurar o ID pai na coluna de ID e, quando você encontrar uma correspondência exata, retornar seu novo ID". Neste momento, os novos IDs são idênticos ao ID original, nós cuidaremos disso mais tarde. Se você precisar de mais explicações sobre o uso de funções (como VLOOKUP ) em fórmulas, clique no botão fx ao lado da barra de fórmulas e, em seguida, no link de ajuda "mais ajuda nesta função".

Assim que você digitar Enter, a fórmula será substituída pelo resultado e, nesse caso, o valor de erro #N/A . Isso ocorre porque o primeiro ID pai não pode ser encontrado na coluna ID. Isso é lógico, já que o pai mais alto tem, por definição, nenhum pai.

Para lidar com esse caso, atualizaremos nossa fórmula para =IF($B2=0,0,VLOOKUP($B2,$A:$C,3,FALSE)) . Ele lê "se o valor na célula B2 for 0, então retorne 0, senão procure [...]" ou "se o ID pai for 0, então retorne 0, senão procure seu novo ID".

É hora de aplicar essa fórmula a toda a coluna, o que você pode fazer com uma cópia e colagem fáceis:

ID         | Parent ID  | New ID     | New Parent ID
1000000000 | 0          | 1000000000 | 0
1100000000 | 1000000000 | 1100000000 | 1000000000
1100000001 | 1100000000 | 1100000001 | 1100000000
1200000000 | 1000000000 | 1200000000 | 1000000000
1200000001 | 1200000000 | 1200000001 | 1200000000
1200000002 | 1200000000 | 1200000002 | 1200000000

É aí que a mágica acontece

Agora substitua um novo ID. Como no seu exemplo, substitua 1000000000 por 1 . Você verá as atualizações do New Parent ID imediatamente com o novo ID. Reproduza novamente e substitua 1100000000 por 10 :

ID         | Parent ID  | New ID     | New Parent ID
1000000000 | 0          | 1          | 0
1100000000 | 1000000000 | 10         | 1
1100000001 | 1100000000 | 1100000001 | 10
1200000000 | 1000000000 | 1200000000 | 1
1200000001 | 1200000000 | 1200000001 | 1200000000
1200000002 | 1200000000 | 1200000002 | 1200000000

Isso foi divertido! Mas fazendo mil vezes, não, obrigada, né?

IDs com valores automáticos

É aí que o Excel brilha, porque depois de ter feito o pensamento pesado, ele fará todo o trabalho pesado. Na célula C4, digite esta fórmula: =C3+10 . Este adiciona dez ao valor na célula C3, a célula logo acima, efetivamente incrementando o novo ID por dez. Copie e cole até o final da coluna e está tudo pronto:

ID         | Parent ID  | New ID     | New Parent ID
1000000000  0             1            0
1100000000  1000000000  | 10         | 1
1100000001  1100000000  | 20         | 10
1200000000  1000000000  | 30         | 1
1200000001  1200000000  | 40         | 30
1200000002  1200000000  | 50         | 30

Copiar e colar de fórmulas

Uma última palavra de cautela. Eu acho que você estará usando os novos IDs e novos pais IDs, possivelmente em outras pastas de trabalho. Nesse caso, você provavelmente desejará fazer uma colagem especial , para reter apenas o valor, e não a fórmula.

Digamos que, quando terminar, você queira excluir as colunas ID original e Parent ID. Antes de fazer isso, copie as colunas Novo ID e Novo ID pai como normalmente faz. Em seguida, em vez de colar, use o comando special paste , escolha Valores e clique em OK. O comando special paste está disponível com um clique direito no destino, entre outros lugares.

    
por 18.02.2013 / 18:16
0

Você pode fazer isso com uma macro e tudo que você quer é construir uma grande variedade de dados repetidos. Eu pessoalmente evito macros e faço a maior parte da minha geração de texto em Powershell.

Agora, se você quiser pegar dados e fazer alguns cálculos, podemos fazer isso com fórmulas. Aqui estão os que eu acho que você precisa:

  • = SE (condição, valor verdadeiro, valor falso) - Testes lógicos para tomar decisões.
  • = MOD (Data Cell, Divisor) - Retorna o restante após uma divisão.
  • = MROUND (célula de dados, múltipla) - arredonda para o múltiplo de número definido mais próximo.

Quando trabalhamos com fórmulas, precisamos expor nossa lógica para quais ações queremos tomar em ordem. Todas as fórmulas são processuais por natureza, o que ajuda a descobrir o que precisamos fazer primeiro. Eu suponho que todas as entradas estão na coluna "New ID" e todas as saídas (aka retornos) estão na coluna Parent ID. Olhando para o seu exemplo de dados, aqui está o que eu acho que você quer.

  1. Encontre IDs que são fatores de "1000000000" (10 ^ 9) e retorne um 0.
  2. Encontre IDs que são fatores de "100000000" (10 ^ 8) e arredonde para um número inteiro que é um fator de "1000000000" (10 ^ 9).
  3. Arredonda os IDs restantes para um número inteiro que é um fator de "100000000" (10 ^ 8)

Existem grandes números para descobrir, então aqui está um exemplo do que cada etapa faz.

  • Etapa 1: 700000000 retorna 0
  • Etapa 2: 770000000 retorna 700000000
  • Etapa 3: 770000007 retorna 770000000

Se isso estiver correto, então vamos configurar suas funções:

Etapa 1

A primeira equação que usamos é a equação "MOD". Se dividirmos todos os números por "1000000000" (10 ^ 9), podemos procurar por qualquer número com um resto de zero. Cada um que encontramos é aquele que deseja retornar um zero com. Para fazer isso, precisamos usar a fórmula "IF". Aqui está como sua fórmula na célula E2 seria:

=IF(MOD(D2,1000000000)=0,0,"false")

Este primeiro parâmetro IF testa para ver se o número em D2 tem um resto quando dividido por 10 ^ 9. Se não, retorne um zero, se não retornar o texto "false"

Etapa 2

Agora que temos nosso primeiro grupo de números manipulados, podemos adicionar uma instrução IF à mistura para alinhar lógica juntos. Agora precisamos da equação "FLOOR" para arredondar um número para um número de dígitos significativos. Neste caso, oito dígitos. Aqui está como a fórmula ficaria sozinha:

=IF(MOD(D2,10000000)=0,MROUND(D2,1000000000),"false")

Em seguida, precisamos encadeá-lo na fórmula na etapa 1. Substitua o "falso" na etapa 1 pela fórmula na etapa 2.

Etapa 3

Finalmente, precisamos apenas arredondar os números restantes. Podemos fazer isso com outro MROUND. Aqui está a fórmula sozinha:

=MROUND(D2,100000000)

E agora a coisa toda encadeada:

=IF(MOD(D2,1000000000)=0,0,IF(MOD(D2,10000000)=0,MROUND(D2,1000000000),MROUND(D2,100000000)))

Tente e espero que funcione. Quando executo essa fórmula com seus dados na Coluna D, obtenho os mesmos números que você tem na Coluna E.

    
por 15.02.2013 / 19:58