Página 1 de 1
Retornar o range da semana
Enviado: 19 Jun 2023 às 19:47
por JCabral
Boa tarde
Pedindo ajuda para o seguinte problema:
- Tenho uma Timeline com todas as semanas do ano e precisava de uma Function que me devolvesse o range de cada semana, ou seja, quando eu invocasse a Function passando a semana como parâmetro ela devolvia o range dessa semana.
No exemplo que anexo, tenho os seguintes valores expectáveis de retorno da Function:
SEMANA RESULTADOS EXPECTÁVEIS
1-------------------------- $L$8
2-------------------------- $M$8:$S$8
3--------------------------$T$8:$Z$8
4--------------------------$AA$8:$AG$8
5--------------------------$AH$8:$AN$8
…-------------------------- …......
53--------------------------$NF$8:$NL$8
Na planilha que anexo acho que é mais percetível o que gostaria de obter.
Obrigado
Jorge Cabral
Re: Retornar o range da semana
Enviado: 19 Jun 2023 às 22:02
por osvaldomp
Salve, Jorge.
Se você quiser saber apenas o intervalo de uma certa semana, então coloque o número da semana em C11 e a Função em D11.
Se você quiser saber os intervalos de várias semanas, então coloque os respectivos números, em qualquer ordem, a partir de C11 e a função a partir de D11.
Function WeekRange()
Dim frstAdd As String, lstAdd As String
frstAdd = Rows(8).Find(Application.Caller.Offset(, -1).Value, lookat:=xlWhole).Address
lstAdd = Rows(8).Find(Application.Caller.Offset(, -1).Value, lookat:=xlWhole, SearchDirection:=xlPrevious).Address
WeekRange = IIf(frstAdd = lstAdd, frstAdd, frstAdd & ":" & lstAdd)
End Function
Re: Retornar o range da semana
Enviado: 20 Jun 2023 às 08:12
por JCabral
Viva @Osvaldomp
Muito obrigado mais uma vez pela resposta
O que estava precisando era algo do tipo "Function WeekRange(nWeek as Integer) as String", para que fosse possível chamar a função no meio de outro código. Não preciso que me retorne o range da semana na planilha, apenas coloquei lá para mostrar os resultados expectáveis da função.
Não terei sido claro no pedido que fiz mas espero que agora esteja mais claro.
Acresce que a Function tem que correr numa Planilha protegida com password.
Obrigado
Jorge
Re: Retornar o range da semana
Enviado: 20 Jun 2023 às 08:21
por Foxtri
Bom dia.
Segue outra opção.
Em D11 =SEERRO(ENDEREÇO(8;CORRESP(C11;$L$8:$NL$8;0)+11)&SE(CONT.SE($L$8:$NL$8;C11)>1;":"&ENDEREÇO(8;CORRESP(C11;$L$8:$NL$8;0)+11+CONT.SE($L$8:$NL$8;C11)-1);"");"...")
Copie abaixo.
Até
Foxtri
Re: Retornar o range da semana
Enviado: 20 Jun 2023 às 08:28
por JCabral
Bom dia @Foxtri
Obrigado pela sua solução, mas preciso que seja uma Function em VBA para em um outro código invocar a Function e ela me retornar o range da semana. Não tenho necessidade de colocar o range na planilha
Acresce que a Function tem que correr numa Planilha protegida com password.
Obrigado
Jorge
Re: Retornar o range da semana
Enviado: 20 Jun 2023 às 10:26
por osvaldomp
Veja este exemplo.
Sub BozoDonkey()
Dim k As Long
k = 5
MsgBox WeekRange(k)
End Sub
Function WeekRange(c As Long)
Dim frstAdd As String, lstAdd As String
ActiveSheet.Unprotect "senha"
frstAdd = Rows(8).Find(c, lookat:=xlWhole).Address
lstAdd = Rows(8).Find(c, lookat:=xlWhole, SearchDirection:=xlPrevious).Address
ActiveSheet.Protect "senha"
WeekRange = IIf(frstAdd = lstAdd, frstAdd, frstAdd & ":" & lstAdd)
End Function
Se conveniente, Unprotect e Protect podem ser inseridos na Sub e não na UDF.
Re: Retornar o range da semana
Enviado: 20 Jun 2023 às 11:39
por JCabral
Obrigado Osvaldo
A partir da sua primeira solução já tinha conseguido chegar mais ou menos à solução que pretendia, o problema estava que com o FIND não é possível o range de procura estar trancado, resolvi destrancado apenas a linha 8 e assim já não preciso proteger e desproteger a planilha.
Muito obrigado mais uma vez.
Jorge
Re: Retornar o range da semana
Enviado: 20 Jun 2023 às 14:22
por Foxtri
Boa tarde Cabral
Não tinha observado o seu comentario.
Segue uma opção:
Function RangeSemana(Num As Integer)
Dim ColIni As Integer, ColFim As Integer
ColIni = Application.Match(Num, Range("L8:NL8"), 0) + 11
ColFim = Evaluate("SMALL(IF(L8:NL8=" & Num & " ,column(L8:NL8)),COUNTIF(L8:NL8," & Num & "))")
RangeSemana = Range(Cells(8, ColIni), Cells(8, ColFim)).Address
End Function
A proposito sr Osvaldo , o nome dado Sub BozoDonkey é para indiretamente chamar alguem aqui deste forum de Palhaço ??
Até
Foxtri
Re: Retornar o range da semana
Enviado: 21 Jun 2023 às 08:24
por JCabral
Obrigado Foxtri
Resolveu também.
Muito obrigado
Jorge