1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.
  2. A secção Microsoft/Windows encontra-se actualmente em processo de reestruturação.
    Remover anúncio

Dúvida Excel

Discussão em 'Windows Desktop e Surface' iniciada por bergonzzi, 17 de Janeiro de 2006. (Respostas: 9; Visualizações: 1386)

  1. bergonzzi

    bergonzzi Power Member

    Boas,

    Queria fazer uma coisa mas não sei é possível no excel..
    Tenho uma colecção de karaoke muuuuuuuito extensa e estou a dar-me ao trabalho de organizar isto tudo (renomear ficheiros, ID3 tags). Ora descobri aqui um programinha fixe pra organizar mp3 que é o Collectorz MP3 que faz um export das listas pra XML. Entretanto abri o ficheiro no excel e descobri que é muito bom pra organizar os dados.

    Agora, o ficheiro tem 3 colunas (Artista - Música - Álbum) e o sort está feito para a 1ª coluna.
    O que eu queria era "agrupar" automaticamente as musicas do mesmo artista para facilitar a leitura e a procura de músicas (isto é para imprimir mais tarde). O agrupar aqui podia ser por ex. por borders para separar um artista do outro.

    Como é que poderia fazer isto?
     
  2. Chip

    Chip Zwame Advisor

    hi,

    dependendo de como tens a tabela, podes usar filtros automáticos para te mostrar apenas x artistas ou podes colapsar a informação de x linhas debaixo de uma só, hierarquizando as coisas

    para a 1ª, selecciona a linha com os cabeçanhos das colunas e depois: data > filter > auto filter (podes tb explorar os filtros avançados)

    para a 2ª: selecciona as linhas que queres agrupar e depois carrega em: SHIFT + ALT + SETA DIREITA para hierarquizar (seta esquerda faz o inverso)

    Podes ter vários níveis; há uma barra de ferramentas para isso mas como uso o teclado n me perguntes onde é :D
     
  3. bergonzzi

    bergonzzi Power Member

    Chip, percebi o que disseste, mas o meu objectivo é automatizar esse agrupamento.

    Algo como: "Encontrar e seleccionar todas as rows que tenha artista=Pink Floyd e adicionar uma linha por baixo da última entrada dessa selecção"
     
  4. DisturbedGod

    DisturbedGod 1st Folding then Sex

    Boas,
    Penso que consegui fazer o que querias. E espero que te consiga explicar por aqui o que tens a fazer.

    Primeiro que tudo, para teres uma selecção por nome de artista no Excel, terás que ter sempre o artista com o nome igual, espaços e tudo.

    Nota: Utilizei as colunas, A, B e C para fazer as colunas com a informação, sendo a coluna a=artista, coluna b=música e coluna c=álbum. Utilizei a célula D1 para introduzirmos o nome do artista. Se quiseres outras colunas ou células, depois terás que alterar o código.

    Vamos ao que interessa:
    Na sheet onde tens a informação toda (no meu foi a sheet1). Cria um Command Button, podes cria-lo da seguinte maneira. Vais a View->Toolbars->Control ToolBox, terás lá um icon que se parece com um botão. Carrega nele e desenha-o na sheet.
    Este botão vai servir para chamar uma caixa de diálogo para introduzirmos o nome do artista que queremos procurar.

    Agora, botão do lado direito em cima do botão e View Code. Vai-te abrir o VBA com algo escrito desta maneira:

    Private Sub CommandButton1_Click()
    End Sub

    Vais introduzir no meio o seguinte código:
    Call GetArtistName

    Ficando desta maneira o teu código:
    Private Sub CommandButton1_Click()
    Call GetArtistName
    End Sub

    Depois do End Sub acrescenta este código, o pricipal:

    Sub GetArtistName()

    Dim Artist As String
    Dim criteria1 As String

    Artist = Interaction.InputBox(prompt:="Qual o artista/grupo que quer encontrar?", Title:="Grupo/Artista.")

    Range("d1") = Artist
    If Range("D1") <> "" Then
    Range("A2:C65536").Select
    Selection.AutoFilter
    Selection.AutoFilter Field:=1, criteria1:=Artist, Operator:=xlAnd
    Columns("A:C").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Columns("A:C").Select
    ActiveSheet.Paste
    Range("A1").Select
    Columns("A:A").EntireColumn.AutoFit
    Columns("B:B").EntireColumn.AutoFit
    Columns("C:C").EntireColumn.AutoFit
    Sheets("Sheet1").Select
    Range("D22").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = ""
    Selection.AutoFilter Field:=1
    Range("A3").Select
    Sheets("Sheet2").Select
    Range("A3").Select

    Else

    End
    End If

    End Sub

    Vais reparar que ele vai passar o artista + música + álbum, do artista que introduziste para a sheet2. Deixando na sheet1 todos os artistas+músicas+álbums que tinhas anteriormente.

    Testa e diz qualquer coisa.
     
  5. bergonzzi

    bergonzzi Power Member

    Bem isso já é um grande avanço!
    Só que não consegui por a funcionar.. tenho um erro "Select method of Range class failed"

    No debug aponta-me para aqui:

    Código:
    If Range("D1") <> "" Then
        Range("A2:C65536").Select
        Selection.AutoFilter
        Selection.AutoFilter Field:=1, criteria1:=Artist, Operator:=xlAnd
        Columns("A:C").Select
        Selection.Copy
        Sheets("Sheet2").Select
       [B] [COLOR=Blue]Columns("A:C").Select[/COLOR][/B]
        ActiveSheet.Paste
        Range("A1").Select
        Columns("A:A").EntireColumn.AutoFit
        Columns("B:B").EntireColumn.AutoFit
        Columns("C:C").EntireColumn.AutoFit
        Sheets("Sheet1").Select
        Range("D22").Select
        Application.CutCopyMode = False
        ActiveCell.FormulaR1C1 = ""
        Selection.AutoFilter Field:=1
        Range("A3").Select
        Sheets("Sheet2").Select
        Range("A3").Select
    Else
    Não sei o que será, o help diz que o Range por vezes falha quando as células estão vazias (que é o caso).. será isso?

    Ainda assim.. este exemplo já é um bom avanço como te disse, mas a minha ideia original era um bocadinho diferente mas talvez a partir daqui dê para desenvolver.
    Imagina isto mas sem eu ter que carregar no botão e dar o nome do artista. Ou seja, ao carregar no botão o que o excel fazia era percorrer a lista encontrando todos os records de users iguais e para cada conjunto copiá-los para o Sheet2 por ex. e adicionando um border por baixo - para separar os vários artistas.
     
  6. DisturbedGod

    DisturbedGod 1st Folding then Sex

    Boas,
    Não sei o porque desse erro, no meu está a funcionar correctamente :\.

    Tenta então mudar o código todo para este:

    Sub GetArtistName()

    Range("A2:C65000").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    Range("A1").Select

    Call Insert_Rows
    End Sub


    Sub Insert_Rows()
    Dim x%, y%
    Range("A2:A30000").Select
    y = Selection.Column
    For x = Selection.Rows.Count To 2 Step -1
    If Cells(x, y).Value <> Cells(x - 1, y).Value Then
    Cells(x, y).EntireRow.Resize(1).Insert

    End If
    Next
    Columns("A:C").Select
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlNotEqual, _
    Formula1:="=$D$1"
    With Selection.FormatConditions(1).Borders(xlLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
    End With
    With Selection.FormatConditions(1).Borders(xlRight)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
    End With
    With Selection.FormatConditions(1).Borders(xlTop)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
    End With
    With Selection.FormatConditions(1).Borders(xlBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
    End With
    Range("A1").Select

    End Sub

    Nota: só espero que não tenhas mais de 30.000 linhas de excel preenchidas, isto porque ao seleccionar mais do que 30.000 linhas a função Insert_rows dá um erro. Não consegui resolver o problema doutra maneira.

    Hugo
     
  7. bergonzzi

    bergonzzi Power Member

    Bem peloq vejo isto já é mais o que eu quero - isto lendo o código pq continua-me a dar aquele erro! Já procurei no google e parece q ha pessoal com o mesmo problema, mas ainda nao percebi como resolver! Já vi que pode ser pelas cells estarem locked, o que nao é o caso.. ja vi pessoal a dizer que funciona em macro mas depois no botão já dá este erro...! Tens alguma pista?

    Ah, apesar de ainda nao ter funcionado aqui obrigadão pela ajuda!

    O erro é aqui:

    Código:
    Sub GetArtistName()
        Range("A2:C65000").Select
        Selection.Copy
        Sheets("Sheet2").Select
        [B][COLOR=Blue]Range("A2).Select[/COLOR][/B]
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Selection.Sort Key1:=Range("B4"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
        Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
        Range("A1").Select
        
        Call Insert_Rows
    End Sub
     
  8. DisturbedGod

    DisturbedGod 1st Folding then Sex

    Ai está mesmo um erro, se reparares falta fechar o range("A2).select

    Tem que ser algo como: Range("A2").Select
    Mas não me parece que seja isto.

    Hmm... já agora, estás com que Office?
     
  9. bergonzzi

    bergonzzi Power Member

    Olha pois é nem reparei que faltavam aspas, seja como for corrigi e dá o mesmo erro na mesma linha..

    Tou com Office 2003 SP2
     
  10. DisturbedGod

    DisturbedGod 1st Folding then Sex

    Fiz o código no Office 2002 do trabalho. Por vezes acontece que certo código funciona num office e noutro não.
    Mas o erro não é esse.

    Tentei fazer o que disseste, meter o código todo numa macro, em que quando carregasse em Ctrl+a ele corresse o código, e funcionou. Não sei porque esse erro acontece. Tenho que ver se encontro maneira de fazer a selecção doutra maneira. :\

    Mas podes ter a macro com o código todo lá dentro, que ele corre. Pelo menos agora testei no Office2003 de casa e deu sem problemas.

    Diz qualquer coisa...
     

Partilhar esta Página