Notifications
Clear all

Como selecionar um elemento específico dentro de uma célula?

4 Posts
3 Usuários
0 Reactions
1,459 Visualizações
 avk
(@avk)
Posts: 8
Active Member
Topic starter
 

Olá!

Eu preciso de uma função do tipo =elemento(célula; n), que retornasse o elemento "n" da célula especificada. Exemplo:

Na célula A1 tem as seguites horas: 8:00 12:00 14:00 17:00, que correspondem ao horário de entrada e saída dos funcionários. Eu gostaria de digitar elemento(A1; 2) e obter o segundo horário, que no caso é 12:00.

Seria isso possível? Alguém pode me indicar o caminho ou me fornecer o código?

Obrigado

 
Postado : 31/03/2015 11:29 am
Issamu
(@issamu)
Posts: 605
Honorable Member
 

Teste a UDF que montei agora PROCURAR_PALAVRA:

Option Explicit

Function PROCURAR_PALAVRA(Referência As Variant, Nword As Integer) As String

Dim i As Integer
Dim a As Integer
Dim x As Integer

i = 1

On Error GoTo erro

For x = 1 To Nword

a = InStr(i, Referência & " ", " ")

PROCURAR_PALAVRA = Trim(Mid(Referência & " ", i, a - i))

i = a + 1

Next x
Exit Function
erro:
PROCURAR_PALAVRA = "#N/D"
End Function

Function COUNTTEXT(ref_value As Variant, ref_string As String) As Long

Dim i As Integer, count As Integer

count = 0
If Len(ref_string) <> 1 Then COUNTTEXT = CVErr(xlErrValue): Exit Function
For i = 1 To Len(ref_value)
    If Mid(ref_value, i, 1) = ref_string Then count = count + 1
Next

COUNTTEXT = count

End Function

A sintaxe ficou conforme você descreveu: =PROCURAR_PALAVRA(célula;n)

Rafael Issamu F. Kamimura
Moderador Oficial Microsoft Community - MCC (Contribuidor do Microsoft Community)
http://zip.net/bjrt0X - http://zip.net/bhrvbR
Foi útil? Clique na mãozinha
Conheça: http://excelmaniacos.com/

 
Postado : 31/03/2015 12:09 pm
 avk
(@avk)
Posts: 8
Active Member
Topic starter
 

Cara, vc é muito ninja. Está em todas as partes e sabe todas as respostas.

Valeu!

 
Postado : 31/03/2015 12:33 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde meninos,
Rafael, estou há um tempo querendo dizer isso:
Gosto das suas respostas, objetivas e bem escritas, mostram seu conhecimento bem avançado tanto no Excel quanto no VBA. Tenho imenso respeito pelo seu trato e seu conhecimento. Um dia espero conversarmos sobre oportunidades.

Avk, a solução do Rafael deve funcionar (não testei), mas escrevi uma menorzinha, se quiser tentar:

Public Function Elemento(ByRef Texto As Variant, _
                         Optional ByVal Delimitador As String = " ", _
                         Optional ByVal Indice As Long = 1) As Variant
On Error GoTo TratarErro
    Elemento = VBA.Split(Application.WorksheetFunction.Trim(Texto), Delimitador)(Indice - 1)
On Error GoTo 0
Exit Function
TratarErro:
    Elemento = "#Erro"
End Function

Só peço cuidado, não abuse das UDFs, mesmo que sejam simples, podem retardar o tempo geral de recálculo!

Mas vou concordar com o Rafael, não existe função que faz isso no Excel.
Essa que eu passei, chama-se elemento() como vc solicitou, e vc tem 3 parametros, sendo dois opcionais.

1) Texto (ou o endereço da célula)
2) Qual Delimitador (no seu caso era espaço), eu adotei que se vc suprimir este parametro, adotar-se-á espaço por padrão
3) Qual elemento (eu padronizei em 1 caso seja suprimido)

Para usar faça o seguinte:
- Abra o Excel abra o arquivo aonde quer isso funcionando
- Tecle Ctrl+F11
- Tecle Ctrl+R
- Vai ver uma lista de arquivos, encontre o seu ali, clique direito nele e Inserir / Módulo
- Cole o código acima
- Volte na planilha e escreva numa célula (exemplo, C5), sei lá:
a b c e d g
- Vá noutra célula e digite:

=elemento(C5;" ";3)

- Veja que o resultado é c
Pronto.

Agora, se você tem horários... Daí o trabalho de tratar o texto que parece uma hora e assim transformá-lo numa hora!

- Use:

 =valor.tempo(elemento(C5;" ";3))

- Não pode esquecer de formatar a célula hora, senão você verá um número decimal ali dentro...

É isso!

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 31/03/2015 12:58 pm