none
Padrão de repetição de células - contagem e tendências RRS feed

  • Pergunta

  • Olá.

    Tenho uma Planilha com diversas células cujos valores repetem-se aleatoriamente. Exemplo:

    A CD CA A CD
    CA A D D A
    D D A CD CA
    A A D A CA
    D CA A CA CA
    A D CA CA CA
    CA CD D CA CA
    D A CD D CA
    A CA A A D
    CA CA CA CA A
    CA D D CA D
    D CD A CA CD
    A A CA CA CD
    CA CA CA CA A
    CA D D CA D

    Pergunta 1: existe alguma maneira de se verificar se uma determinada sequência de células ocorre?

    No exemplo acima, olhando-se verticalmente, se eu quiser saber se a sequência de células abaixo:

    D
    A
    CA

    Na coluna 1 ela se repete 3 vezes, na coluna 2 apenas uma.

    Pergunta 2: O excel consegue me retornar qual foi a próxima célula imediatamente inferior que mais ocorreu após encontrar a sequência que se repete?

    No exemplo acima, na Coluna 1, para as 3 ocorrências, a próxima célula que mais ocorre é:

    CA - 2 vezes

    Agradeço antecipadamente

    quinta-feira, 19 de dezembro de 2013 13:02

Respostas

  • E se as três primeiras células forem uma sequência? Quem deve ser computado como célula inferior?

    Minha solução percorre o laço a partir da linha 2:

    Sub fnc()
      Const cstrCol As String = "A"
      
      Dim bln As Boolean
      Dim clc As VBA.Collection
      Dim dic As Object 'Scripting.Dictionary
      Dim lng As Long
      Dim lngLast As Long
      Dim lngMax As Long
      Dim lngRow As Long
      Dim strKey As String
      Dim strMax As String
      Dim var As Variant
      Dim wks As Excel.Worksheet
      
      Set clc = New Collection
      clc.Add "D"
      clc.Add "A"
      clc.Add "CA"
      
      Set dic = VBA.CreateObject("Scripting.Dictionary")
      Set wks = ActiveSheet
      With wks
        lngLast = .Cells(.Rows.Count, cstrCol).End(xlUp).Row
        For lngRow = 2 To lngLast
          If .Cells(lngRow, cstrCol).Value = clc(1) Then
            bln = True
            For lng = 2 To clc.Count
              If .Cells(lngRow + lng - 1, cstrCol).Value <> clc(lng) Then
                bln = False
                Exit For
              End If
            Next lng
            If bln = True Then
              strKey = .Cells(lngRow - 1, cstrCol).Value
              dic(strKey) = dic(strKey) + 1
            End If
          End If
        Next lngRow
      End With
    
      For Each var In dic.keys
        If var > lngMax Then
          lngMax = dic(var)
          strMax = var
        End If
      Next var
      
      VBA.MsgBox "'" & strMax & "' aparece " & lngMax & " vezes na coluna " & cstrCol & "."
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 19 de dezembro de 2013 22:13
    Moderador