Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
#64713
Estou iniciando no VBA e gerei um código com as funções de soma e índice corresp, a função está sendo utilizada dentro de um "While" com outras condições que rodam tranquilamente, inclusive o código abaixo, porém quando ele chega linha em que encontra o valor procurado ele da erro (ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction), a linha 9 é uma variável continua de 1 em 1. Como disse, sou novo aqui e no desenvolvimento de VBA, porém tentei ser o mais esclarecedor possível.

Abaixo o código que apresenta o erro:

cells(1,1) = WorksheetFunction.Sum(WorksheetFunction.Index(Range(Cells(11, 1), Cells(500, 20)), WorksheetFunction.Match(Cells(Linha9, 22), Range(Cells(11, 1), Cells(500, 1)), 0), 1, 2), 75)
#64714
Sugestão: disponibilize diretamente aqui no fórum uma amostra do seu arquivo Excel com alguns dados e com o código completo instalado.

Ajudaria também para entender o problema se você disponibilizar a fórmula de planilha que equivale a essa linha que está apresentando erro, algo como =SOMA(ÍNDICE(... CORRESP(... que funcione na planilha e que apresente o resultado desejado.
#64718
Coloquei um arquivo de teste em que foi feito o mesmo raciocínio e apresentou o mesmo erro, inicialmente no meu modelo que estou trabalhando pensei que fosse por questões de alguma variável incompatível mas como no arquivo teste não tenho variável descarto esta possibilidade.


DADOS A DADOS B DADOS C
1 4 7
2 5 8
3 6 9


VALOR PROCURADO = 1

FÓRMULA EXCEL = ÍNDICE(A2:C4;CORRESP(1;A2:A4;0)*1;3) > NESTE CASO DEVERIA ME RETORNAR O VALOR 7 DA COLUNA C

FUNÇÃO VBA =
Cells(1, 10) = WorksheetFunction.Index(Range("A3", "C5"), WorksheetFunction.Match(1, Range("A3", "A5"), 0), 1, 3)
Você não está autorizado a ver ou baixar esse anexo.
#64720
substitua esta linha
Cells(1, 10) = WorksheetFunction.Index(Range("A2", "C4"), WorksheetFunction.Match(Cells(1, 5), Range("A2", "A4"), 0), 1, 3)

por esta
Cells(1, 10) = WorksheetFunction.Index(Range("A3", "C5"), WorksheetFunction.Match(Cells(2, 5), Range("A3", "A5"), 0), 3)
#64725
vitordmd escreveu: 19 Mai 2021 às 10:52 ... quando coloco o argumento de linha ...
O argumento linha já é retornado pela função Match e o argumento coluna é retornado pelo número 3 ao final da expressão.
Se você introduz mais um argumento, o que é errado, então a expressão retorna erro (por excesso de argumentos) ;)
#64728
Obrigado, a ideia era retornar alguns valores de acordo com a linha indicada, resolvi conforme exemplo abaixo

Cells(1, 10) = WorksheetFunction.Index(Range("A3", "C5"), WorksheetFunction.Match(Cells(2, 5), Range("A3", "A5"), 0), +n,3)

O "+n" indica a linha que me deve retornar quando tenho mais de um resultado para o valor procurado.

Abraço.
#64734
Esta expressão ~~~> Range("A3", "A5"), 0), +n,3) funcionou aí ? Se funcionou foi com ajuda do além.

A posição correta de +n é esta (sem vírgula antes) ~~~> Range("A3", "A5"), 0) + n, 3)

Ainda, em lugar de adicionar"n" ao valor de E2 altere diretamente E2. ;)
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord