No Excel, tenho uma planilha que extrai dados de um banco de dados SQL para uma tabela e gera um relatório com base nesses dados. Infelizmente, os dados desse banco de dados SQL estão incompletos e quero incluir linhas adicionais no conjunto de resultados que são inseridas manualmente na planilha.
Tanto quanto eu gostaria, não posso apenas inserir manualmente essas linhas extras na tabela, pois elas seriam excluídas sempre que o Excel extrair novos dados do Banco de Dados SQL. Então, em vez disso, estou pensando em criar uma tabela separada com os mesmos títulos de coluna em uma nova planilha e inserir os dados nela e, em seguida, criar uma terceira tabela em outra planilha que de alguma forma combine as linhas da tabela que extrai dados do SQL e do tabela onde insiro dados manualmente. Como posso fazer isso? (Ou, alternativamente, existe uma maneira melhor de fazer isso que de alguma forma eu sinto falta?)
Exemplo:
Table 1 (From Database):
| Person | Week Of | Task | Hours |
| Bob | 1/6/13 | Foo | 12 |
| Mary | 1/6/13 | Foo | 7 |
| Mary | 1/6/13 | Bar | 5 |
| John | 1/6/13 | Foo | 5 |
| John | 1/13/13 | Foo | 13 |
-
Table 2 (Entered Manually):
| Person | Week Of | Task | Hours |
| Bob | 1/6/13 | Baz | 3 |
| Mary | 1/6/13 | Baz | 2 |
| John | 1/13/13 | Baz | 5 |
-
Result:
| Person | Week Of | Task | Hours |
| Bob | 1/6/13 | Foo | 12 |
| Mary | 1/6/13 | Foo | 7 |
| Mary | 1/6/13 | Bar | 5 |
| John | 1/6/13 | Foo | 5 |
| John | 1/13/13 | Foo | 13 |
| Bob | 1/6/13 | Baz | 3 |
| Mary | 1/6/13 | Baz | 2 |
| John | 1/13/13 | Baz | 5 |
fonte
Respostas:
Aqui está uma solução pura do Excel sem VBA. Ele funciona usando uma função INDEX para descer as linhas e pelas colunas dos dados SQL até que os valores se esgotem e uma condição de erro resulte. Uma função IFERROR captura o erro e usa uma segunda função INDEX para descer as linhas e pelas colunas dos dados inseridos manualmente, novamente até que esses valores se esgotem e uma condição de erro resulte. Uma segunda função IFERROR captura o erro e retorna um traço ("-"). (Os dados SQL devem ser atualizados por meio da faixa de opções para que as fórmulas produzam um resultado correto.)
Crie um SQLDB de intervalo nomeado dinâmico para os dados SQL na Planilha1 usando a fórmula:
Crie um segundo intervalo nomeado dinâmico EXCELRNG para os dados inseridos manualmente na Planilha2 usando a fórmula:
Ambos os intervalos nomeados assumem que os nomes das variáveis são inseridos na linha 1 de cada uma das duas planilhas.
Digite os nomes das variáveis na linha 1 da Planilha3 (começando na célula A1).
Digite a seguinte fórmula Na célula A2 da Sheet3:
Copie a fórmula nas colunas do nome da variável e desça as linhas até que os resultados das fórmulas sejam todos traços ("-").
É possível, como próximo passo, criar uma Tabela Dinâmica em outra planilha para análise e organização.
Novamente, a primeira etapa seria criar um intervalo nomeado dinâmico, por exemplo, RESULTRNG, inserindo a seguinte fórmula na caixa de entrada do Gerenciador de Nomes para o intervalo nomeado:
Em seguida, crie uma tabela dinâmica em uma nova planilha, definindo RESULTRNG como a tabela que você deseja analisar. Isso filtrará todos os traços à direita da tabela de fórmulas na Planilha3.
Isso funciona porque a fórmula RESULTRNG conta o número total de linhas na Planilha1 e na Planilha2 (excluindo o cabeçalho na Planilha2) e o número total de colunas na Planilha1 e define sua extensão com base nessas contagens, excluindo traços nas linhas finais ( ou colunas) na tabela de fórmulas Sheet3.
fonte
Eu encontrei uma maneira de fazer isso. Essa solução é um pouco complicada e exige que as duas tabelas tenham suas próprias folhas separadas (sem mais nada), mas, além disso, faz quase exatamente o que eu quero. (Também parece haver muito potencial aqui para operações mais complexas, como junções.)
Vá para a guia dados na faixa de opções, clique em "De outras fontes" e "Em Microsoft Query". Em seguida, clique em Arquivos do Excel, selecione o arquivo em que você está trabalhando no momento e clique em OK. Em seguida, pressione cancelar e, quando promovido, se você deseja continuar editando no Microsoft Query, pressione "Sim". A partir daqui, você pode clicar no botão SQL e escrever uma Consulta SQL personalizada em qualquer planilha da planilha. No meu caso:
Nota: Para mim, esse método para de funcionar depois que eu fecho o arquivo e o abro novamente. Estou postando aqui de qualquer maneira, no caso de ser apenas um problema no meu computador ou alguém pode fazê-lo funcionar.
fonte
Se você estiver interessado em uma solução VBA, consegui que o seguinte funcionasse:
Defina um intervalo nomeado dinâmico para os dados que você está obtendo do SQL Server. Abra o Gerenciador de nomes, insira um novo nome (por exemplo, "SQLDB") e copie a seguinte fórmula na caixa de entrada Referências a. Eu assumi que seus dados extraídos estão na Planilha1:
Defina outro intervalo nomeado para o intervalo no qual os dados manuais são inseridos. Eu usei o nome EXCELRNG e assumi que estava na Planilha2. O intervalo nomeado inicia na linha 2 para excluir uma linha de cabeçalho. A fórmula aqui é idêntica à primeira, exceto na planilha a que se refere:
Aqui está o primeiro conjunto de configurações que usei para a conexão com a tabela SQL. A caixa de diálogo é acessada selecionando Conexões na guia Dados na faixa de opções. A desativação da atualização em segundo plano garante que a macro do VBA seja pausada até que uma atualização dos dados na planilha do Excel seja concluída. A atualização da conexão quando a planilha é aberta pode não ser necessária, mas eu queria garantir que qualquer autenticação fosse feita antes da execução da macro.
Finalmente, este é o código VBA. Para inseri-lo, escolha Visual Basic na guia Desenvolvedor. Destaque o nome da planilha na lista à esquerda. Ele será referenciado como "Projeto VBA (nome da planilha). Em seguida, escolha Inserir módulo na barra de menus na parte superior da tela e cole o código no novo módulo. Observe que eu coloquei a tabela consolidada na Planilha3. Como está escrito, a macro não classifica a nova tabela, embora isso não seja difícil de adicionar.
fonte
Aqui está uma versão da solução "Pure Excel" do @ chuff, projetada especificamente para trabalhar com tabelas. (IE As duas fontes de dados que você deseja mesclar são tabelas.)
A principal diferença entre esse método e o chuff publicado em sua resposta é que você não precisa definir intervalos nomeados para os dois conjuntos de dados que você está mesclando, pois são tabelas e já possuem seu próprio intervalo nomeado. Então vá em frente e nomeie sua primeira mesa
Table1
e sua segunda mesaTable2
.Agora, crie uma nova tabela no canto superior esquerdo de uma nova planilha e atribua os mesmos nomes de coluna que as outras duas tabelas. Em seguida, insira a seguinte fórmula na célula A2 da planilha que você acabou de criar:
Em seguida, copie esta fórmula em todas as colunas da tabela e, em seguida, desça as linhas até que os resultados das fórmulas sejam todos traços ("-"). Nota: A classificação desta nova tabela não fará nada, pois o conteúdo de cada célula é realmente idêntico (todos eles contêm a mesma fórmula).
Se as colunas na tabela mesclada exibirem 0 quando deveriam exibir uma célula em branco, você poderá quebrar a fórmula nessa coluna com a função substituta, da seguinte maneira:
Se você deseja criar uma tabela dinâmica que usa dados dessa nova tabela, precisará criar um intervalo nomeado. Primeiro, nomeie a tabela
Table3
. Agora, vá para a guia fórmulas e clique em "Definir nome". Dê um nome à referência, digite a seguinte equação para seu valor ("Refere-se a"):Em seguida, você pode usar essa referência nomeada como o intervalo para sua tabela dinâmica.
fonte
Se você deseja apenas um resultado único, há um site que mesclará duas tabelas para você: https://office-tools.online/table/merge/
Você cola as tabelas na página da web e seleciona os parâmetros relevantes. Aqui está uma captura de tela do exemplo interno que indica como usá-lo:
fonte