- Este tópico contém 16 respostas, 2 utilizadores e foi actualizado pela última vez há 12 anos, 8 meses por jkf1456.
-
AutorArtigos
-
-
10 de Fevereiro de 2012 às 2:32 #1039jkf1456Participante
tenho um baco de dados de estudantes quero criar um search….
estudante id sobrenome inicial idade programas
st348-250 ferreira c. 22 arts
st348-251 pereira a. 17 matematica
st348-252 oliveira m. 21 fisicana cellula a1 – quero digitar o sobrenome e automaticamente aparecera o “programa” e “idade”
se tiver sobrenome repedido mostrar todos e o usuario clica no de seu interesse.obrigado
-
10 de Fevereiro de 2012 às 18:33 #1792jorgerodAdministrador
boas,
tenta adaptar de um post que coloquei no site em 2008, talvez com a inclusão da formula offset. ter em atenção que as fórmulas estão em inglês e talvez tenham que ser convertidas para pt-pt ou pt-br.
o link do post: https://www.exceler.org/excel/formulas/230-excel-vlookup-right-a-value.html
fica bem.
-
26 de Fevereiro de 2012 às 0:10 #1807jkf1456Participante
nao é bem isso. veja o que estou precisando…
coluna a coluna b coluna c coluna d
a1 145 anita c1= search (145) d1= anita, rafael, felipe,gabriela, susana
a2 145 rafael
a3 145 felipe
a4 100 teresa
a5 100 gustavo
a6 101 izabella
a7 102 maria
a8 103 gabriel
a9 145 gabriela
a10 145 susana+ 1 vez
obrigado
-
26 de Fevereiro de 2012 às 17:20 #1808jorgerodAdministrador
boas,
experimenta o seguinte código vba num módulo:
‘—————————————————————————————
‘ procedure : search_names
‘ datetime : 26-02-2012 17:15
‘ author : jorge rodrigues
‘ purpose : procura nomes que correspondam ao número inserido na célula c1 e
‘ purpose : junta-os na célula d1, separados por vírgulas
‘—————————————————————————————
‘
sub search_names()dim smallrng as range
dim nome as stringfor each smallrng in range(“a1:a10”)
if smallrng.value = range(“c1”).value then
if nome = “” then
nome = smallrng.offset(0, 1).value
else
nome = nome & “,” & smallrng.offset(0, 1).value
end if
end if
next smallrngrange(“d1”).value = “(” & nome & “)”
end sub
fica bem e diz qq coisa, ok?
-
26 de Fevereiro de 2012 às 17:47 #1809jorgerodAdministrador
boas, outra vez.
existe outra solução, também em vba. trata-se da utilização do evento worksheet_change.
o código, neste caso, já não deverá constar de um módulo, mas ser inserido no código da própria planilha:
‘—————————————————————————————
‘ procedure : worksheet_change
‘ datetime : 26-02-2012 17:43
‘ author : jorge rodrigues
‘ purpose : procura nomes que correspondam ao número inserido na célula c1 e
‘ purpose : junta-os na célula d1, separados por vírgulas
‘—————————————————————————————
‘private sub worksheet_change(byval target as range)
dim smallrng as range
dim nome as stringif target.address = “$c$1” then
for each smallrng in range(“a1:a10”)
if smallrng.value = range(“c1”).value then
if nome = “” then
nome = smallrng.offset(0, 1).value
else
nome = nome & “,” & smallrng.offset(0, 1).value
end if
end if
next smallrng
range(“d1”).value = “(” & nome & “)”
end ifend sub
neste caso, sempre que alteres o conteúdo da célula c1, vai dar-te o resultado, de acordo com o valor inserido.
fica bem e diz qq coia, ok?
-
27 de Fevereiro de 2012 às 15:59 #1813jkf1456Participante
ola bom dia
como sempre suas repostas são excelerrrrrrrrrrr!
permita-me abusar do seu conhecimento. na primeira instância achei que seria melhora os nomes aparecerem entre virgulas mas, nao gostei.
e possivel fazer com que os nomes aparecam na coluna d1,d2,d3,d4, etc..muito obrigado
-
27 de Fevereiro de 2012 às 21:26 #1814jorgerodAdministrador
boas,
em vez de ser apresentado na mesma coluna, porque não apresentar na mesma linha?
eis um possível exemplo, baseado no código anteriormente apresentado:
private sub worksheet_change(byval target as range)
dim smallrng as range
dim nome as stringif target.address = “$c$1” then
range(“d1:az1”).clearcontents
for each smallrng in range(“a1:a10”)
if smallrng.value = range(“c1”).value then
if nome = “” then
nome = smallrng.offset(0, 1).value
else
nome = nome & “,” & smallrng.offset(0, 1).value
end if
end ifnext smallrng
application.screenupdating = false
range(“d1”).value = nome
range(“d1”).select
selection.texttocolumns destination:=range(“d1”), datatype:=xldelimited, _
textqualifier:=xldoublequote, consecutivedelimiter:=false, tab:=false, _
semicolon:=false, comma:=true, space:=false, other:=false, fieldinfo _
:=array(array(1, 1), array(2, 1), array(3, 1), array(4, 1), array(5, 1)), _
trailingminusnumbers:=trueend if
application.screenupdating = true
end sub
fica bem e diz qq coisa, ok?
-
7 de Março de 2012 às 16:51 #1819jkf1456Participante
quando “run” tenho esta mensagem:
if target.address = “$c$1” then
a palavra “target”… compile error: invalid outside procedure.outro detalhe: tem que ser apresentado na mesma coluna e não na mesma linha. porque?
vou usar esta planilha no iphone. e necessario que todos os dados fiquem em uma tela.e por falar em iphone! voce sabe me dizer se existe algum app (spreadsheet) que suporta vba?
obrigadofica bem.
-
7 de Março de 2012 às 20:18 #1820jorgerodAdministrador
podes pôr aqui a tua planilha, para poder ver porque é que dá erro? É que, comigo, não dá.
quanto ao resto, vou ver, ok?
-
10 de Março de 2012 às 18:49 #1821jkf1456Participante
aqui esta o arquivo.
ExcelSearch.xls -
11 de Março de 2012 às 1:34 #1822jorgerodAdministrador
boas,
experimenta o seguinte código:
private sub okbutton_click()
dim smallrng as range
dim nome as string
dim v as variant
dim s as variant
dim i as longrange(“d1:d100”).clearcontents
for each smallrng in range(“a1:a1000”)
if smallrng.value = range(“c1”).value then
if nome = “” then
nome = smallrng.offset(0, 1).value
else
nome = nome & “,” & smallrng.offset(0, 1).value
end if
end ifnext smallrng
application.screenupdating = false
range(“d1”).value = nome
range(“d1”).select
v = selection.value
s = split(v, “,”)
for i = 0 to ubound(s)
selection.offset(i, 0).value = s(i)next
application.screenupdating = true
end sub
fica bem e diz qq coisa, ok?
-
13 de Março de 2012 às 18:13 #1826jkf1456Participante
obrigado jorge
ainda continuo recebendo error message : “run-time error ‘424’:”
segue em anexo ficheiro
ExcelSearch.xls -
13 de Março de 2012 às 19:42 #1827jorgerodAdministrador
tens a linha if target… activa, o que não pode ser, dado que não estás a utilizar o evento worksheet_change. quando limpares essa linha e o end if final, vai funcionar.
no entanto, a planilha que me enviaste está a colocar os nomes na horizontal e não na vertical, como tinhas questionado. para a colocação na vertical, tens que trocar todo o código pelo código que referi no post anterior.
fica bem e diz qq coisa.
-
15 de Março de 2012 às 23:26 #1828jkf1456Participante
obrigado. funcionando perfeitamente.
pesquisei alguns codigos sobre “sort” na column d, não tive sucesso. voce poderia me ajudar com mais este codigo?
muitissimo obrigadofica bem e boa sexta-feira
-
15 de Março de 2012 às 23:38 #1829jorgerodAdministrador
boas,
o que é que pretendes ordenar na coluna d? e como é que pretendes ordenar? top to bottom ou o inverso? de a a z ou de z a a?
-
19 de Março de 2012 às 0:23 #1833jkf1456Participante
ola, obrigado novavente.
eu gostaria que fosse top to bottom a to z.
-
19 de Março de 2012 às 14:20 #1040jorgerodAdministrador
boas,
experimenta:
private sub okbutton_click()
dim smallrng as range
dim nome as string
dim v as variant
dim s as variant
dim i as longrange(“d1:d100”).clearcontents
for each smallrng in range(“a1:a1000”)
if smallrng.value = range(“c1”).value then
if nome = “” then
nome = smallrng.offset(0, 1).value
else
nome = nome & “,” & smallrng.offset(0, 1).value
end if
end ifnext smallrng
application.screenupdating = false
range(“d1”).value = nome
range(“d1”).select
v = selection.value
s = split(v, “,”)
for i = 0 to ubound(s)
selection.offset(i, 0).value = s(i)next
columns(“d:d”).select
activeworkbook.worksheets(“findzone”).sort.sortfields.clear
activeworkbook.worksheets(“findzone”).sort.sortfields.add key:=range(“d1:d53” _
), sorton:=xlsortonvalues, order:=xlascending, dataoption:=xlsortnormal
with activeworkbook.worksheets(“findzone”).sort
.setrange range(“d1:d53”)
.header = xlguess
.matchcase = false
.orientation = xltoptobottom
.sortmethod = xlpinyin
.apply
end withrange(“c1”).select
application.screenupdating = trueend sub
fica bem e diz qq coisa.
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.