Como alternar em qual folha outra folha do Excel está olhando?

1

Excel (2016). Suponha que eu tenha uma parte do Excel em AnalysisSheet que analise dados em alguma outra folha de dados. E suponha o seguinte:

  1. Na verdade, existem várias dessas folhas de dados. Por exemplo, eles podem ser nomeados MayData , JunData , JulData e assim por diante.

  2. Todas as folhas de dados são idênticas no formato; somente seus dados são diferentes. Por exemplo, eles podem ser o mesmo relatório financeiro executado em meses diferentes

  3. AnalysisSheet só olha para uma das folhas de dados de cada vez. Em qualquer "ponto de uso", ele está analisando SEMPRE MayData , OR JunData , OR JulData . etc.

  4. As folhas de dados podem estar na mesma pasta de trabalho que AnalysisSheet , ou podem estar em uma outra pasta de trabalho diferente, ou podem ser espalhadas em várias outras pastas de trabalho ou combinação daqueles

  5. Eu preciso que a análise seja executada hoje e não faça com que eu queira lançar pedras em meu computador (veja abaixo onde eu descrevo como faço isso atualmente)

PERGUNTA : No Excel puro (ou seja, sem VB e sem complementos de terceiros), Como minimizar o trabalho necessário para permitir que o usuário SheetAnalyze para alterar de qual dos dados das folhas de dados está sendo retirado?

Como eu faço atualmente

Eu uso INDIRECT () para construir dinamicamente as referências à folha de dados requerida. Por exemplo, em AnalysisSheet , posso ter o seguinte:

B1 = "MayData" (i.e. the name of the sheet containing the data)

B2 = "MayReport.xlsx" (i.e. the name of the workbook containing the data sheet; this is left blank if the data sheet is in the same workbook as AnalysisSheet)

B3 = "C23" (for example; i.e. the name of some cell of interest in the data sheet)

E então eu teria algo assim em B4:

B4 = CONCATENATE("'", IF(ISBLANK(B2),"",CONCATENATE("[",B2,"]")),B1,"'!",B3)

Esse último produz, neste exemplo, a string: '[MayReport.xlsx] MayData'! C23

Eu posso usar isso em INDIRECT () para a análise apropriada. Então, para olhar para essa célula específica, eu poderia ter;

B5=INDIRECT(B4) (see note**)

que é imune a alterações no nome da planilha de dados, ou em sua pasta de trabalho (ou até mesmo no nome da célula de interesse, embora concedida neste exemplo, eu disse que as folhas de dados são todas idênticas em formato).

Tudo o que preciso fazer para alterar quais dados estão sendo analisados é alterar as células B1 e B2. E se eu tiver cuidado com as coisas, eu poderia reduzi-lo a mudar apenas o nome do mês (neste exemplo) e, em seguida, construir até mesmo o que está em B1 e B2 para isso.

O PROBLEMA É QUE INDIRETO () é volátil! Como resultado, quando o conjunto de dados é grande e talvez haja muitas coisas semelhantes acontecendo, o desempenho é prejudicado. Na pior das hipóteses, eu tive que esperar minutos para uma única mudança em uma única célula em AnalysisSheet , enquanto o Excel repassava cada INDIRECT () e o executava novamente. Abaixo na área de status no canto inferior direito da minha planilha, posso ver o uso da CPU ficando louco em todos os nós.

Eu aprecio todas as ideias.

** É claro que normalmente eu não iria apenas para uma única célula. Em vez disso, eu colocaria uma ou mais tabelas inteiras da planilha de dados de destino em uma planilha ou planilhas na mesma pasta de trabalho que AnalysisSheet . A partir daí, todo o resto pode usar referências a essa versão local dos dados.

    
por tkp 13.10.2018 / 22:13

0 respostas