Programaticamente selecionando um intervalo no Excel

4

Eu sei como fazer um intervalo como D3:D15 . Mas comecei a usar referências e endereços, então tenho esses pontos de início e de término como endereços. Não sei como designar um intervalo usando esses endereços quando preciso de uma entrada de intervalo em outra fórmula, como SUM .

Eu esperava que colocar dois pontos (": ") entre dois endereços fizesse a mesma coisa, mas isso não acontece.

Estou pesquisando os valores em minha planilha real, mas, por simplicidade, suponha que quaisquer números codificados sejam, na verdade, o resultado de outros cálculos. Para algo como E3:J7 , quero:

address(3,5) : address(7,10)

    
por Ivan Kirigin 07.03.2013 / 20:37

2 respostas

3

Você mencionou "outra fórmula", por isso estou supondo que deseja fazer isso em uma fórmula de planilha (em vez de em uma função ou sub-rotina do VBA). Vamos começar pequeno. O Excel suporta referências de estilo A1 ( An ) e referências de estilo R1C1 (R n C n ). Todos os exemplos que você usou ( D3 , D15 , E3 , J7 , etc.) são referências no estilo A1 - uma coluna letra (ou possivelmente uma sequência de letras colunas X , Y e Z são seguidas por AA , AB , AC , etc.) seguidas por um número de linha. Referências no estilo R1C1 são quase auto-explicativas - elas são construídas com um número de linha e uma coluna número , separadas pelas letras R e C . Portanto, E3 é equivalente a R3C5 (linha 3, coluna 5) e J7 é equivalente a R7C10 .

Eu gostaria que você tivesse dito um pouco mais sobre o que você já estava fazendo, então eu sei o que eu não tenho que explicar para você. Espero que você saiba que, em uma fórmula, INDIRECT("E3") é mais ou menos equivalente a E3 , exceto que quando você chama INDIRECT , o parâmetro de string pode ser calculado. Talvez você não saiba que

INDIRECT("R3C5", FALSE)

é similarmente equivalente a E3 .

INDIRECT fornece apenas uma referência a uma única célula. Para ir desse para um intervalo, usamos a função OFFSET . Seu formato geral é

OFFSET(base_cell_reference,row_offset,column_offset,height (rows),width (columns))

Então, para obter E3:J7 , fazemos

OFFSET(INDIRECT("R" & 3 & "C" & 5, FALSE),  0,  0,  7-3+1,  10-5+1)

onde todos os números podem ser fórmulas (por exemplo, referências a outras células). (Nota: os +1 são para o “problema de vedação” padrão - o intervalo começando na linha 3 e incluindo a linha 7 tem 5 linhas de altura, não 4.) A expressão acima pode ser usada em qualquer lugar um intervalo simples pode ser usado; por exemplo, como um parâmetro para SUM .

Ainda outra abordagem para resolver seu problema pode estar usando células nomeadas. Se você der à célula E3 o nome Fred e der à célula J7 o nome Barney , então você pode dizer SUM(Fred:Barney) .

    
por 07.03.2013 / 23:58
0

Dê uma olhada no comando células . Você pode especificar linha e coluna com valores numéricos.

Sub test()
' select range E3 to J3
Range(Cells(3, 5), Cells(3, 10)).Select

End Sub
    
por 07.03.2013 / 21:21