MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    função PROCVMÚLTIPLO

    Compartilhe
    avatar
    mucascosta
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 22/01/2010

    função PROCVMÚLTIPLO

    Mensagem  mucascosta em 15/12/2018, 18:36

    Como usar a função abaixo, originalmente do EXCEL, no ACCESS?
    Necessito usar numa consulta e/ou em relatório.
    RESUMO: Converte todos os dados, com a mesma data, de uma coluna em uma linha.

    A função PROCVMÚLTIPLO(NomePesquisa; IntervaloPesquisa; IntervaloRetorno) pesquisa um valor num intervalo e retorna todas as ocorrências correspondentes num outro 'intervalo informado, separadas por ponto e vírgula.


    Function PROCVMÚLTIPLO(NomePesquisa As String, IntervaloPesquisa As Range, IntervaloRetorno As Range) As String
    Dim Valor, Nome
    Dim k As Long
    Application.Volatile
    k = 1
    For Each Nome In IntervaloPesquisa
    If Nome = NomePesquisa Then
    Valor = IntervaloRetorno(k, 1)
    PROCVMÚLTIPLO = PROCVMÚLTIPLO & Valor & "; "
    End If
    k = k + 1
    Next Nome
    PROCVMÚLTIPLO = Left(PROCVMÚLTIPLO, Len(PROCVMÚLTIPLO) - 2)
    End Function
    avatar
    mucascosta
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 22/01/2010

    Função PROCVMÚLTIPLO

    Mensagem  mucascosta em 16/12/2018, 19:04

    Explicando melhor:
    Tabela: tbl_Teste
    Colunas: Data, Hora, Tipo
    DADOS DA TABELA:
    Data: 01/12/2018, Hora, 08:00, Tipo: A
    Data: 01/12/2018, Hora, 08:10, Tipo: A
    Data: 01/12/2018, Hora, 08:20, Tipo: B
    Data: 02/12/2018, Hora, 08:00, Tipo: D
    Data: 02/12/2018, Hora, 08:10, Tipo: E
    Data: 03/12/2018, Hora, 08:00, Tipo: A
    Data: 03/12/2018, Hora, 08:10, Tipo: B
    Data: 03/12/2018, Hora, 08:20, Tipo: C
    Resultado pretendido:
    Data: 01/12/2018, Campo pretendido: 08:00-A, 08:10-A, 08:20-B
    Data: 02/12/2018, Campo pretendido: 08:00-D, 08:10-E
    Data: 03/12/2018, Campo pretendido: 08:00-A, 08:10-B, 08:20-C

    Tentei a função abaixo: Porém, numa consulta, ela repete, em todas as datas, sempre os dados da primeira data: 08:00-A, 08:10-A, 08:20-B
    Ficando assim:
    Data: 01/12/2018, Campo pretendido: 08:00-A, 08:10-A, 08:20-B
    Data: 02/12/2018, Campo pretendido: 08:00-A, 08:10-A, 08:20-B
    Data: 03/12/2018, Campo pretendido: 08:00-A, 08:10-A, 08:20-B

    Public Function GeralinhaUnica() As String
    Dim strRetorno As String
    Dim ssql As String
    Dim rst As DAO.Recordset
    strRetorno = ""
    ssql = ""
    ssql = "SELECT tbl_Teste.Hora, tbl_Agenda.Tipo FROM tbl_Teste;"

    Set rst = CurrentDb.OpenRecordset(ssql)
    While Not rst.EOF
    strRetorno = strRetorno & """" & rst("Hora").Value & """-""" & rst("Tipo").Value & """" & ","
    rst.MoveNext
    Wend
    rst.Close
    GeralinhaUnica = strRetorno
    End Function
    avatar
    mucascosta
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 29
    Registrado : 22/01/2010

    função PROCVMÚLTIPLO

    Mensagem  mucascosta em 17/12/2018, 21:54

    Solução perfeita! dada por Damasceno Jr no Fórum: http://www.redeaccess.com.br

    SQL da consulta que traz o resultado pretendido:
    Código:

    SELECT Data, fncGeraLinhaUnica([Data]) AS [Campo pretendido]
    FROM tbl_Teste
    GROUP BY Data, fncGeraLinhaUnica([Data]);
    ===============================================================

    Função que faz o serviço:

    Código:

    Public Function fncGeraLinhaUnica(dtData As Date) As String

    Dim rs As DAO.Recordset
    Dim strResultado As String

    Set rs = CurrentDb.OpenRecordset("select format(Hora,'hh:nn') & '-' & Tipo as [Campo pretendido] " & _
    "from tbl_Teste " & _
    "where Data = #" & Format(dtData, "mm/dd/yyyy") & "#;", 8, 4)

    While Not rs.EOF
    strResultado = strResultado & ", " & rs("Campo pretendido").Value
    Call rs.MoveNext
    Wend

    Call rs.Close: Set rs = Nothing

    fncGeraLinhaUnica = Mid(strResultado, 3)

    End Function
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7058
    Registrado : 05/11/2009

    Re: função PROCVMÚLTIPLO

    Mensagem  Alexandre Neves em 21/12/2018, 19:53

    Boa noite

    Se resolveu, marque o "Resolvido"


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

      Data/hora atual: 18/1/2019, 00:04