Filtrando dados do Excel de dados do levantamento para obter e-mails

3

Durante o verão, realizamos uma pesquisa para vários alunos para indicar seu interesse em vários clubes. A forma como as respostas foram digitalizadas nos deu uma coluna para cada clube e um '1' em cada célula da coluna para cada pessoa (linha) que indicou seu interesse por esse clube em particular. A primeira coluna é o seu endereço de e-mail.

O objetivo final é filtrar os dados para que possamos receber os e-mails dos interessados em cada clube - e enviar esses e-mails para os clubes em um arquivo individual para o marketing deles.

No ano passado eu fiz isso passando e filtrando cada clube individual por '1', copiando todos os e-mails da coluna de e-mail para um novo documento, salvando-o e enviando o arquivo para ele respectivo clube.

Usando o exemplo acima, tivemos um arquivo para club1 que continha Email1, Email3 e Email7; outra para o Clube 2 contendo E-mail 5, etc etc. Com mais de 200 clubes e mais de 2000 e-mails, você pode imaginar que isso era demorado.

Um colega sugeriu que tabelas dinâmicas podem ajudar, e nós brincamos um pouco com ele para ver se havia uma solução mais fácil ... mas não conseguimos encontrar uma que reduza drasticamente o tempo que leva para passar pelo dados.

Imaginando se alguém teve alguma ideia ou conselho? Talvez minha solução já fosse a mais rápida?

    
por Cody S. 31.07.2015 / 20:12

2 respostas

3

Você pode usar o VBA para criar arquivos individuais para cada clube. O procedimento FilterData abaixo cria um arquivo para cada clube dentro do mesmo diretório do arquivo que contém o código VBA, que também deve conter as respostas em uma planilha chamada Responses .

Option Explicit

Sub FilterData()
    Dim Responses As Worksheet
    Dim Column As Long

    Set Responses = ThisWorkbook.Worksheets("Responses")
    Column = 2

    Do While Responses.Cells(1, Column).Value <> ""
        With Workbooks.Add(xlWBATWorksheet)
            With .Worksheets(1)
                Responses.Cells.Copy .Cells
                .Columns(Column).AutoFilter Field:=1, Criteria1:="<>1"
                .Rows(2).Resize(.Rows.Count - 1).Delete Shift:=xlUp
                .Columns(2).Resize(, .Columns.Count - 1).Delete Shift:=xlShiftToLeft
            End With

            .Close SaveChanges:=True, Filename:=ThisWorkbook.Path & "\" & Responses.Cells(1, Column).Value
        End With

        Column = Column + 1
    Loop
End Sub
    
por 02.08.2015 / 13:06
1

As tabelas dinâmicas são a melhor maneira de ir aqui. Crie uma tabela dinâmica de sua planilha.

Quando você tem que arrastar a coluna de e-mail para o campo de linhas, então o clube que você está interessado no campo de filtro. Definir o filtro para "1"

Isso lhe dará uma lista de todas as pessoas interessadas nesse clube.

    
por 31.07.2015 / 21:10