- Este tópico contém 3 respostas, 3 utilizadores e foi actualizado pela última vez há 13 anos por patropi.
-
AutorArtigos
-
-
6 de Novembro de 2011 às 19:44 #10112007Participante
[attachment]c:fakepathfluxo de caixa.xlsx[/attachment]
[attachment]c:fakepathfluxo de caixa.xlsx[/attachment]
boa tarde,amigos estou desenvolvendo uma planilha (anexo) onde preciso atraves de uma condição exibir informações em texto. preciso de algo parecido com a formula somase.
explicando minha duvida na planilha: n coluna f preciso exibir todos os fornecedores que vou pagar na data (coluna a) cujo os dados estão na planilha contas a pagar, coluna g (para relacionar com a coluna a da planilha fluxo de caixa), informações a concatenar na coluna h.
segue a planilha em anexo.
-
6 de Novembro de 2011 às 21:31 #1745patropiParticipante
boa noite 2007
para facilitar deverias ter lançado manualmente nas colunas f e g o resultado que desejas.
abs.
-
7 de Novembro de 2011 às 20:25 #17442007Participante
segue anexo o arquivo com as informações manuais que eu preciso automatizar.
FluxodeCaixa.xlsx -
8 de Novembro de 2011 às 0:14 #1012jorgerodAdministrador
boas,
para o que pretendes, podes utilizar uma função personalizada, criada pelo , denominada stringconcat().
por exemplo, para a coluna relacionada com os recebimentos, na planilha fluxo de caixa, podes criar a seguinte fórmula:
em f5: {=stringconcat(“|”;se(‘contas a receber’!$g$4:$g$20=a5;’contas a receber’!$h$4:$h$20;””))}
: o exemplo tem como fontes g4 a g20 e h4 a h20, mas, é claro, os ranges terão a dimensão que se pretender)
como é um array, as chavetas são provenientes do conjunto de teclas ctrl + shift + enter.
copias a fórmula de f5, para baixo na coluna f, até onde pretenderes.
para a coluna relacionada com os pagamentos, podes criar a seguinte fórmula:
em g5: {=stringconcat(“|”;se(‘contas a pagar’!$g$4:$g$20=a5;’contas a pagar’!$h$4:$h$20;””))}
: o exemplo tem como fontes g4 a g20 e h4 a h20, mas, é claro, os ranges terão a dimensão que se pretender)
como é um array, as chavetas são provenientes do conjunto de teclas ctrl + shift + enter.
copias a fórmula de g5, para baixo na coluna g, até onde pretenderes.
agora e como parte inicial, deves criar um módulo vba, onde colocarás o seguinte código, repito, do , o qual tem todo o mérito:
function stringconcat(sep as string, paramarray args()) as variant
””””””””””””””””””””””””””””””””””””
‘ stringconcat
‘ by chip pearson, chip@cpearson.com, http://www.cpearson.com
‘ http://www.cpearson.com/excel/stringconcatenation.aspx
‘ this function concatenates all the elements in the args array,
‘ delimited by the sep character, into a single string. this function
‘ can be used in an array formula. there is a vba imposed limit that
‘ a string in a passed in array (e.g., calling this function from
‘ an array formula in a worksheet cell) must be less than 256 characters.
‘ see the comments at string too long handling for details.
””””””””””””””””””””””””””””””””””””
dim s as string
dim n as long
dim m as long
dim r as range
dim numdims as long
dim lb as long
dim isarrayalloc as boolean”””””””””””””””””””””’
‘ if no parameters were passed in, return
‘ vbnullstring.
”””””””””””””””””””””’
if ubound(args) – lbound(args) + 1 = 0 then
stringconcat = vbnullstring
exit function
end iffor n = lbound(args) to ubound(args)
””””””””””””””””””””””””
‘ loop through the args
””””””””””””””””””””””””
if isobject(args(n)) = true then
””””””””””””””””””’
‘ object
‘ if we have an object, ensure it
‘ it a range. the range object
‘ is the only type of object we’ll
‘ work with. anything else causes
‘ a #value error.
””””””””””””””””””
if typeof args(n) is excel.range then
””””””””””””””””””””’
‘ if it is a range, loop through the
‘ cells and create append the elements
‘ to the string s.
””””””””””””””””””””’
for each r in args(n).cells
if len(r.text) > 0 then
s = s & r.text & sep
end if
next r
else
””””””””””””””””’
‘ unsupported object type. return
‘ a #value error.
””””””””””””””””’
stringconcat = cverr(xlerrvalue)
exit function
end ifelseif isarray(args(n)) = true then
””””””””””””””””””’
‘ array
‘ if args(n) is an array, ensure it
‘ is an allocated array.
””””””””””””””””””’
isarrayalloc = (not iserror(lbound(args(n))) and _
(lbound(args(n)) <= ubound(args(n))))
if isarrayalloc = true then
''''''''''''''''''''''''''''''''''''
' the array is allocated. determine
' the number of dimensions of the
' array.
'''''''''''''''''''''''''''''''''''''
numdims = 1
on error resume next
err.clear
numdims = 1
do until err.number 0
lb = lbound(args(n), numdims)
if err.number = 0 then
numdims = numdims + 1
else
numdims = numdims – 1
end if
loop
on error goto 0
err.clear
”””””””””””””””””
‘ the array must have either
‘ one or two dimensions. greater
‘ that two caues a #value error.
”””””””””””””””””
if numdims > 2 then
stringconcat = cverr(xlerrvalue)
exit function
end if
if numdims = 1 then
for m = lbound(args(n)) to ubound(args(n))
if args(n)(m) vbnullstring then
s = s & args(n)(m) & sep
end if
next melse
””””””””””””””””””””””””
‘ string too long handling
‘ here, the error handler must be set to either
‘ on error goto continueloop
‘ or
‘ on error goto errh
‘ if you use errh, then any error, including
‘ a string too long error, will cause the function
‘ to return #value and quit. if you use continueloop,
‘ the problematic value is ignored and not included
‘ in the result, and the result is the concatenation
‘ of all non-error values in the input. this code is
‘ used in the case that an input string is longer than
‘ 255 characters.
””””””””””””””””””””””””
on error goto continueloop
‘on error goto errh
err.clear
for m = lbound(args(n), 1) to ubound(args(n), 1)
if args(n)(m, 1) vbnullstring then
s = s & args(n)(m, 1) & sep
end if
next m
err.clear
m = lbound(args(n), 2)
if err.number = 0 then
for m = lbound(args(n), 2) to ubound(args(n), 2)
if args(n)(m, 2) vbnullstring then
s = s & args(n)(m, 2) & sep
end if
next m
end if
on error goto errh:
end if
else
if args(n) vbnullstring then
s = s & args(n) & sep
end if
end if
else
on error resume next
if args(n) vbnullstring then
s = s & args(n) & sep
end if
on error goto 0
end if
continueloop:
next n””””””””””””””’
‘ remove the trailing sep
””””””””””””””’
if len(sep) > 0 then
if len(s) > 0 then
s = left(s, len(s) – len(sep))
end if
end ifstringconcat = s
””””””””””””””’
‘ success. get out.
””””””””””””””’
exit function
errh:
””””””””””””””’
‘ error. return #value
””””””””””””””’
stringconcat = cverr(xlerrvalue)
end function
-
-
AutorArtigos
- Tem de iniciar sessão para responder a este tópico.