Trabalhando com endereços de célula no Excel com o VBA

1

Eu tenho uma planilha do Excel em que há vários formulários. As formas parecem todas iguais e têm exatamente as mesmas células entre elas. Eles são ordenados em 4 x 3:

x x x x
x x x x
x x x x

x x x x
....

Existem 60 deles e depois de três colunas são duas células entre eles em vez de um.

Agora, minha pergunta.

Se eu tiver o endereço do canto superior esquerdo do primeiro formulário, como posso "gerar" o próximo endereço do próximo formulário?

Do primeiro canto esquerdo para o próximo, há um espaço de 9 campos. Desde o primeiro canto superior esquerdo do primeiro formulário até o próximo formulário, no fundo, há 17 campos.

    
por Pascal 06.08.2014 / 15:33

1 resposta

1

Você pode usar a função OFFSET

OFFSET (referência, linhas, cols, [altura], [largura])

  • Referência obrigatória. A referência a partir da qual você deseja basear o deslocamento. A referência deve referir-se a uma célula ou intervalo de células adjacentes; caso contrário, OFFSET retornará o valor de #VALUE! valor de erro.
  • Linhas necessárias. O número de linhas, para cima ou para baixo, às quais você deseja que a célula superior esquerda se refira. Usando 5 como o argumento de linhas especifica que a célula superior esquerda na referência é cinco linhas abaixo de referência. As linhas podem ser positivas (o que significa abaixo da referência inicial) ou negativas (o que significa acima da referência inicial).
  • Cols obrigatórios. O número de colunas, à esquerda ou à direita, às quais você deseja que a célula superior esquerda do resultado se refira. Usando 5 como o argumento cols especifica que a célula superior esquerda na referência é cinco colunas à direita da referência. Cols pode ser positivo (o que significa à direita da referência inicial) ou negativo (o que significa à esquerda da referência inicial).

[EDITADO] Se você tiver células mescladas, considere usar MergedArea (VBA) assim:

Set MA = Range("G14").MergeArea
NewAddress = MA.Offset(...)
    
por 06.08.2014 / 15:38