- Este tópico contém 10 respostas, 2 utilizadores e foi actualizado pela última vez há 11 anos, 3 meses por jorgerod.
-
AutorArtigos
-
-
17 de Dezembro de 2012 às 23:49 #1203AnónimoInactivo
boa noite, gurus do vba
antes de tudo começo por pedir desculpa por estar a incomodar, mas acontece que, os meus conhecimentos em vba são quase ou praticamente nulos, e necessito de construir um código vba que me faça um vlookup ou algo melhor, numa folha de cálculo com cerca de 17.000 dados. conforme podem verificar na folha de cálculo que envio em anexo, estou a utilizar a função procv em uma dúzia de linhas, mas se eu utilizar a função nas cerca de 17.000 linhas o excel fica bloqueado e o próprio windows deixa de responder, tendo mesmo de reiniciar o pc.
o que eu pretendo é um código que ao digitar o valor na coluna d da folha de cálculo “nova.b.d”, o vba procure o valor na coluna a da folha “base.dados.antiga”, e faça a respetiva correspondência na folha de cálculo “nova.b.d”, conforme podem compreender pelo livro de excel em anexo.
não sei se existe também a possibilidade, de não permitir a entrada de valores duplicados na coluna d da folha de cálculo “nova.b.d”, sei que posso criar uma validação de dados, mas será possível criar um vba para esse efeito?
obrigado por toda e qualquer ajuda que me possam dar.
atenciosamente,
noel
PROCV..xlsm -
18 de Dezembro de 2012 às 1:29 #2069jorgerodAdministrador
boas, noel
julgo que, melhor do que função procv, é a utilização das funções Índice e corresp.
assim, por exemplo, em vez de utilizares em e9 a fórmula =procv($d9;base.dados.antiga!$a$2:$g$16980;2;falso), poderás utilizar a seguinte:
=Índice(base.dados.antiga!$a$2:$g$16980;corresp(d9;base.dados.antiga!$a$2:$a$16980;0);2) e assim, sucessivamente,para melhor ilustração, reenvio-te a tua planilha com duas linhas alteradas para as novas fórmulas (linhas 13 e 14).
fica bem e diz qq coisa, ok?
-
18 de Dezembro de 2012 às 10:02 #2070AnónimoInactivo
bom dia jorge,
obrigado pela sua sugestão. já tinha lido e pesquisado sobre esta função, mas julguei que fosse encravar e crashar o excel,será que qaundo eu copiar essa fórmula para as 17000 linhas o excel não vai deixar de responder tal como o procv? como é que eu faço para não permitir a entrada de dados duplicados na coluna d da folha nova.b.d ? já usei a validação de dados, com
=cont.se($d$2:$d$17000;$d$2)=1, mas dá-me uma mensagem de erro a dizer que não reconhece esse intervalo. (imagem em anexo)
fico a aguardar uma resposta.
um grande obrigado por toda a vossa ajuda e colaboração com aqueles que necessitam do vosso sábio conhecimento.
já agora jorge aproveito para o parabenizar pelo seu oitavo mvp.
cumprimentos,
noel
PrintScreen.jpg -
19 de Dezembro de 2012 às 2:09 #2071jorgerodAdministrador
noel,
julgo que a tua fórmula contém um erro, porque estás a dizer que a célula é absoluta, quando deverá ser relativa, ou seja, em vez de teres a fórmula =cont.se($d$2:$d$17000;$d$2)=1, deverás tê-la assim: =cont.se($d$2:$d$17000;d2)=1
para melhor explicação, reenvio-te a tua planilha com a alteração já feita. de qualquer modo, lê o que diz o seguinte link:
fica bem e diz qq coisa.
PROCV_1_1.xlsm -
19 de Dezembro de 2012 às 12:16 #2072AnónimoInactivo
obrigado jorge, é isso mesmo.
abraço e um feliz natal para todos.
-
19 de Dezembro de 2012 às 21:51 #2073jorgerodAdministrador
🙂 🙂
-
20 de Dezembro de 2012 às 0:34 #2074AnónimoInactivo
boa noite jorge,
mais uma vez peço desculpa por estar a incomodar.
preciso de elaborar uma rotina na folha “base.dados.antiga” que utilize a função tipo “localizar” do excel para encontrar um valor “x”, e que depois de localizar o valor “x” escreva a palavra “fundida” na coluna g da linha correspondente. a rotina deveria fazer este procedimento até que eu deixasse de inserir valores a localizar.
não sei se fui muito esclerecedor?
É possível?
um abraço e muitoooooo obrigado pela disponibilidade e apoio que me tem prestado.
-
20 de Dezembro de 2012 às 1:18 #2075jorgerodAdministrador
olá noel,
talvez através deste código vba, que podes associar a um botão de comando
sub procuranumero()
dim rfound as range
dim rfind as stringon error resume next
with sheets("base.dados.antiga")
rfind = inputbox(prompt:="digite o valor pretendido", title:="pesquisa")set rfound = .columns(1).find(what:=rfind, after:=.cells(1, 1), lookin:=xlvalues, lookat:= _
xlpart, searchorder:=xlbyrows, searchdirection:=xlnext, matchcase:=false _
, searchformat:=false)on error goto 0
if not rfound is nothing then
application.goto rfound, trueactivecell.offset(0, 4).select
activecell = "fundido"
end ifend with
end sub
fica bem e diz qq coisa, ok?
-
20 de Dezembro de 2012 às 15:32 #2076AnónimoInactivo
boas,
obrigado jorge o vba funciona mesmo, mas o vba pára assim que localiza o valor e escreve “fundido” na célula. precisava de algo que parasse quando eu clicasse em por exemplo “fim”
não sei se estou a ser explicito.
obrigado
-
20 de Dezembro de 2012 às 23:27 #2077jorgerodAdministrador
olá noel,
experimenta este código:
'---------------------------------------------------------------------------------------
' procedure : procuranumero
' datetime : 20-12-2012 23:23
' author : jrod
' purpose : pesquisa número e insere dados consecutivamente, até querer ser cancelado o procedimento
'---------------------------------------------------------------------------------------
'
sub procuranumero()dim rfound as range
dim rfind as string
dim rtryagainon error resume next
with sheets("base.dados.antiga")
rfind = inputbox(prompt:="digite o valor pretendido", title:="pesquisa")
set rfound = .columns(1).find(what:=rfind, after:=.cells(1, 1), lookin:=xlvalues, lookat:= _
xlpart, searchorder:=xlbyrows, searchdirection:=xlnext, matchcase:=false _
, searchformat:=false)on error goto 0
if not rfound is nothing then
application.goto rfound, trueactivecell.offset(0, 4).select
activecell = "fundido"
end if
rtryagain = msgbox("quer continuar?", vbokcancel + vbquestion)
if rtryagain = vbcancel then 'não continua
exit sub
else 'continua
run "procuranumero"
end if
end withend sub
diz qq coisa, ok?
fica bem.
-
27 de Dezembro de 2012 às 0:58 #1204AnónimoInactivo
boa noite jorge,
antes de tudo começo por pedir desculpa por ainda não ter postado qualquer comentário relativo ao procedimento que me enviaste.
na verdade e uma vez que surgiram as férias de natal só hoje é que tive a oportunidade de testar a rotina, mas esta não está a funcionar corretamente. será que podes ver o que é que se passa?
está a dar-me um erro que envio como jpeg em anexo
obrigado por tudo.
cumprimentos
Capturar.jpgAttachments:
You must be logged in to view attached files.
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.