Respostas criadas no fórum
-
AutorArtigos
-
jorgerod
Administradorjorgerod
Administradorexperimenta (não testei):
dim ultimalinha as long
ultimalinha = sheets(“folha2”).range(“a” & rows.count).end(xlup).row
sheets(“folha2”).range(“a” & ultimalinha).offset(1).pastespecial xlpastevalues
fica bem.
jorgerod
Administradorboas, albino,
experimenta, adaptando:
sub myround()
dim c as range
for each c in worksheets(“folha1”).range(“b2:z16”).cells ‘ em que “folha1” será o nome da tua folha, claro…
if c.value = “” then
msgbox “É favor preencher a celula em falta:” & ” ” & c.address, vbinformation, “atenção!!!”
end ifnext
end sub
diz qq coisa, ok?
jorgerod
Administradorboas,
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.
jorgerod
Administradoralbino,
a função concatenar, tem o limite de 30 argumentos, o que corresponde a 30 condições, embora o operador de concatenação “&”, já não possua esse limite. o denominado “nested ifs”, no excel 2003 e anteriores, tem o limite de 7, embora, se não me engano, a partir do excel 2007, já seja para cima de 64.
no entanto, haverá soluções mais apropriadas…
não podes utilizar a função procv? apenas terias que ter uma tabela anterior, para conseguires o teu resultado:
exemplo: =procv(a1,b1:c10,2)
em que em a1, terias o x, y, z. etc… e na tabela b1:c10, terias na coluna b os x, os y, os z e na coluna c o valor da percentagem correspondente a cada um dos nomes…
claro, como disse o dutra, tens o vba, mas, para isso, tens que pôr aqui um exemplo da tua planilha, para te podermos ajudar.
fica bem e diz qq coisa.
jorgerod
Administradorboas,
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?
jorgerod
Administradortens 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.
jorgerod
Administradorboas,
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?
jorgerod
Administradorpodes pôr aqui a tua planilha, para poder ver porque é que dá erro? É que, comigo, não dá.
quanto ao resto, vou ver, ok?
jorgerod
Administradorvê o exemplo em: http://www.excel-vba-easy.com/vba-userform-excel-vba.html
fica bem.
27 de Fevereiro de 2012 às 21:26 em resposta a: Como fazer um search em um baco de dados excel? #1814jorgerod
Administradorboas,
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?
26 de Fevereiro de 2012 às 17:47 em resposta a: Como fazer um search em um baco de dados excel? #1809jorgerod
Administradorboas, 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?
26 de Fevereiro de 2012 às 17:20 em resposta a: Como fazer um search em um baco de dados excel? #1808jorgerod
Administradorboas,
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?
jorgerod
Administradorjorgerod
Administrador -
AutorArtigos
EXCELer Tudo sobre EXCEL em Português