Ir ao conteúdo

Posts recomendados

Postado

Salve amigos,

 

 Tenho pouquíssimo conhecimento em vba e não sei como fazer o que pretendo. O código conforme está, filtra todos o textos com 5 caracteres na coluna 15 do txt e descarrega na coluna B da planilha. No entanto, Gostaria que fosse apenas somadas as vezes que cada código surge na coluna do txt conforme mencionada e registre os valores na coluna F da planilha. Como ficaria a macro?

teste.txt teste.zip

Postado

Após importar os registros para a coluna B você pode fazer um COUNTIF, sua macro com esse acréscimo fica assim,

 

Sub texto()
    Dim Arquivo As String
    Dim Codigo As Range
    
    Arquivo = ThisWorkbook.Path & "\teste.txt"

    Dim rg As Range
    Set rg = Plan1.Range("A1")

    Open Arquivo For Input As #1

    Dim Linha As String
    Do Until EOF(1)
        Line Input #1, Linha
        
        rg.Offset(0, 1) = Mid(Linha, 15, 5)
        
        Set rg = rg.Offset(1, 0)
   Loop
    
    Close #1
    
    Set Codigo = [E2]
    
    While Codigo <> ""
        Codigo(1, 2) = WorksheetFunction.CountIf([B:B], Codigo)
        Set Codigo = Codigo(2)
    Wend
End Sub

 

  • Curtir 1
Postado

@Midori . Obrigado por responder.

 

 Então, da forma que falou é intessante, porém, irá importar para planilha um monte de informações inúteis que acredito deixar a macro mais lenta. O objetivo é importar apenas a quantidade de vezes que um determinado código surge no txt.

 Vou perguntar de outra forma que me atenderia perfeitamente também.

Imagina que temos na Celula C1 o código "mjfhk" e que eu gostaria de registrar na Celula D1 a quantidade de vezes que este código surge no txt, tendo em vista que o mesmo inicia na coluna 15 e tem 5 caracteristicas no txt.

 No caso do txt partilhado, Celula D1 seria igual a 3.

 

Postado

@valbeezerra Acho que a forma mais simples e rápida é abrindo o arquivo no formato CSV. Ele já está nesse padrão, aí é só contar as ocorrências no campo da tabela que nesse caso é o 3. Altere a extensão do arquivo de txt para csv e veja se assim resolve,

 

Sub Arquivo()
    Dim Nome        As String
    Dim Codigo      As Range
    Dim ArquivoCSV  As Workbook
    
    Nome = ThisWorkbook.Path & "\teste.csv"     
    Set ArquivoCSV = Workbooks.Open(Filename:=Nome, Delimiter:=2)
    Set Codigo = ThisWorkbook.Sheets("Plan1").[E2]
    
    Call ArquivoCSV.ActiveSheet.[C:C].Replace(" ", "")
    
    While Codigo <> ""
        Codigo(1, 2) = WorksheetFunction.CountIf( _
            ArquivoCSV.ActiveSheet.[C:C], Codigo)
        Set Codigo = Codigo(2)
    Wend
    Call ArquivoCSV.Close(False)
End Sub

 

Obs: Usei a função Replace porque os registros estão com espaço.

  • Curtir 1
Postado

@Midori Obrigado por responder mais uma vez.

 

 O txt que partilhei foi um exmplo que usei para mostrar de de onde inicia e termina os códigos, no entanto não é o real. Por isso talvez acabei por gerar mais dificudade em encontar a solução, peço desculpas por isso.

Estou anexando dois arquivos, um print do que preciso importar e outro que é o arquivo real.

No arquivo "print", tem um texto destacado em amarelo que é fixo, ou seja, sempre virá esse texto. O que muda é apenas o circulado em azul que é o que realmente preciso importar a quantidade de vezes que surgem.

 Nesse exemplo, 7h 9s surge 1 vez, assim como o Ad 2c.

 

Se tiver uma forma de importar para uma coluna apenas os destacados em azul, ok porque poderiamos usar o cout conforme mensionou anteriormete.

 

Grato.

 

txt exemplo print.PNG

txt exemplo.txt

Postado

@valbeezerra Se não está no padrão delimitado então não dá para fazer como comentei antes. Para registrar a quantidade sem colocar os dados do arquivo na planilha, fiz uma busca na coluna E caso a macro encontre o padrão no arquivo. Nesse último arquivo parece que o código está na linha que começa com "Dealt to Hero", então considerei isso (para testar deixe o código no padrão do print com colchetes), veja se assim resolve,

 

Sub ContaCodigo()
    Const BUSCA     As String = "Dealt to Hero"
    Dim Arquivo     As String
    Dim Linha       As String
    Dim Codigo      As String
    Dim BuscaCodigo As Range
    
    Arquivo = ThisWorkbook.Path & "\exemplo.txt"
    Open Arquivo For Input As #1
    
    Do Until EOF(1)
        Line Input #1, Linha
        If Left(Trim(Linha), Len(BUSCA)) = BUSCA Then
            Codigo = Trim(Replace(Linha, BUSCA, ""))
            Set BuscaCodigo = _
                [E:E].Find(What:=Codigo, LookIn:=xlValues, LookAt:=xlWhole)
        
            If Not BuscaCodigo Is Nothing Then
                BuscaCodigo(1, 2) = BuscaCodigo(1, 2) + 1
            End If
        End If
    Loop
    Close #1
End Sub

 

 

  • Curtir 1
Postado

@Midori Funcionou perfeitamente, Obrigado.

 

 Pelo que entendi, só é póssivel se o início da linha segue um texto padrão, é isso?

Apenas para entender melhor, no caso de pegar o código lá na ultima linha do exemplo print, onde tem "Seat 3: a953a3b4 (big blind) showed [9s Ah] and won (680) with Pair of Nines". Já naõ seria possível? Nesse caso o que varia é apenas o "a953a3b4".  Esse parte é padrão "Seat 3: (big blind) showed "

 

Abraço e muito Obrigado.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...