Kubrick Posted June 12, 2011 Share Posted June 12, 2011 (edited) Abro este tópico porque acho que o Excel é uma ferramenta muito boa para se trabalhar e com as dicas de muita malta que tenha experiência podem-se poupar horas de trabalho feito à mão. Como é o meu caso. :-.. Tenho aqui um livro de excel aberto com as 3 folhas abertas, as típicas. Na "folha1" tenho uma base de dados que é basicamente a leitura mensal de vários parâmetros (são 30 ao todo). O que eu gostava de fazer era seleccionar sempre a coluna da data da leitura mais a dos resultados da leitura para um "parâmetro nº1", copiar essas duas colunas seleccionadas e fazer paste na "folha2" e depois regressar à "folha1" para nova selecção de duas colunas (data + "parâmetro nº2"), sendo que a da data fica logo seleccionada. E assim sucessivamente. Ou seja, no fim de tudo, ter nas várias folhas apenas duas colunas, a da data da leitura e a dos resultados para os 30 parâmetro, uma folha para cada. Dá para fazer isso com uma macro em vez de estar a fazer à mão?? Tentei fazer com o "recorder de macros" mas ele só repete a rotina para as colunas que gravou. Este é o exemplo do copy para a folha2, da coluna da data (A1:A13) e da coluna do "parâmetro nº1" (B1:B13). Assim: Sub Copia_Cola() ' ' Copia_Cola Macro ' ' Atalho por teclado: Ctrl+a ' Range("A1:A13,B1:B13").Select Range("B1").Activate Selection.Copy Sheets("Folha2").Select Range("A1").Select ActiveSheet.Paste Sheets("Folha1").Select Application.CutCopyMode = False Range("A1:A13").Select End Sub Como podem ver, é específico. Se eu seleccionar o parâmetro nº2 (C1:C13) e executar a rotina ele repete o que fez acima... Eu gostava que a rotina simplesmente copiasse a selecção que eu faço, qualquer que ela seja dentro da tabela gigante que tenho na folha1, e que a consiga copiar e colar na folha seguinte. Edited June 12, 2011 by Kubrick Link to comment Share on other sites More sharing options...
dreamer Posted June 12, 2011 Share Posted June 12, 2011 Preferia um exemplar do ficheiro mas calculo que seja pessoal. Quando dizes "...e que a consiga copiar e colar na folha seguinte. " significa que a macro vai criar novas folhas consoant o necessário? Do tipo: Parâmetro 1 - Desde B1 a B13 e copiar para folha 2. Parâmetro 2 - Desde C1 a C13 e copiar para folha 3. Parâmetro 3 - Desde D1 a D13 e copiar para folha 4. ... ? Link to comment Share on other sites More sharing options...
Revenge Posted June 12, 2011 Share Posted June 12, 2011 Quando corres este comando: Range("A1:A13,B1:B13").Select, estás a dizer-lhe para fazer a selecção dessas celulas. Removes esse comando, e fazes tu a selecção manual, e depois corres a linha que já ai tens, Selection.Copy. Link to comment Share on other sites More sharing options...
Kubrick Posted June 12, 2011 Author Share Posted June 12, 2011 Preferia um exemplar do ficheiro mas calculo que seja pessoal. Quando dizes "...e que a consiga copiar e colar na folha seguinte. " significa que a macro vai criar novas folhas consoant o necessário? Do tipo: Parâmetro 1 - Desde B1 a B13 e copiar para folha 2. Parâmetro 2 - Desde C1 a C13 e copiar para folha 3. Parâmetro 3 - Desde D1 a D13 e copiar para folha 4. ... ? Sim. É isso mesmo que quero. Ou seja na folha 2 terei duas colunas, a da data e a do parametro 1. Na folha 3 terei a data e o parametro 2... and so on. Não consigo fazer upload para aqui. Quando corres este comando: Range("A1:A13,B1:B13").Select, estás a dizer-lhe para fazer a selecção dessas celulas. Removes esse comando, e fazes tu a selecção manual, e depois corres a linha que já ai tens, Selection.Copy. Podes crer! ;) Agora só falta a cada vez que mudo de coluna ele mudar de folha para fazer o paste. Dá para fazer? Link to comment Share on other sites More sharing options...
dreamer Posted June 12, 2011 Share Posted June 12, 2011 Podes usar este código para criar novas folhas: Sheets.Add After:=Sheets(Sheets.Count) Deste modo adiciona sempre no fim das que já tens criadas. Para a seleccionares fazes: Sheets(Sheets.Count).Select Link to comment Share on other sites More sharing options...
Kubrick Posted June 12, 2011 Author Share Posted June 12, 2011 ahah! Brutal! Já deu! :clap: :clap: :clap: Obrigado dreamer e Rev. Ficou assim (adicionei um bocado de outro site em que permite que quando ele faz o paste que apague as colunas em branco entre a coluna da data e a do parametro nº X): Sub Copia_Cola() ' ' Copia_Cola Macro ' ' Atalho por teclado: Ctrl+a ' Selection.Copy Sheets.Add After:=Sheets(Sheets.Count) Range("A1").Select ActiveSheet.Paste first = Selection.Column last = Selection.Columns(Selection.Columns.Count).Column For i = last To first Step -1 If WorksheetFunction.CountBlank(ActiveSheet.Columns(i)) = 65536 Then Columns(i).Delete End If Next i Sheets("Folha1").Select Application.CutCopyMode = False Range("A1:A13").Select End Sub Agora só falta um macro para fazer sempre o mesmo estilo de gráfico mas em cada folha criada, conforme o parâmetro. Presumo que isso seja só usar o gravador de macro? Correcto? Link to comment Share on other sites More sharing options...
dreamer Posted June 13, 2011 Share Posted June 13, 2011 sim. Gravando a macro deve conseguir rastrear o código que precisas. Para ajudar fica aqui algum: Adicionar gráfico na folha activa: ActiveSheet.Shapes.AddChart.Select Definir a fonte dos dados para o gráfico: ActiveChart.SetSourceData Source:=Range("'Folha1'!$A$1:$A$31;'Folha1'!$C$1:$C$31") ...ou então... Definir a fonte dos dados para o gráfico (Dados e gráfico na mesma folha): ActiveChart.SetSourceData Source:=Range("A1:B31") Escolha do tipo de gráfico: ActiveChart.ChartType = xlXYScatterSmoothNoMarkers Link to comment Share on other sites More sharing options...
Kubrick Posted June 13, 2011 Author Share Posted June 13, 2011 (edited) Consigo gravar a macros para me dar um gráfico, mas agora estou a tentar incorporar a formatação do mesmo para tentar metê-lo com as cores, tamanho, etc como deve ser. Não consigo fazer com que ele faça o resize. Quando corro a macros ele dá-me um gráfico pequeno, e tenho de o redimensionar à mão. Eu queria que todos os gráficos ficassem do mesmo tamanho para depois metê-los no word, não dá para automatizar o resize? Eis o códido que tenho para o parâmetro "transparência", neste caso. este código já faz o seguinte: - Cria um gráfico do tipo xlLine com marcadores; - Cria a legenda para os eixos bem como título para o gráfico; - Apaga as gridlines que aparecem de origem; - Cria uma linha de tendência linear; - Cria um espaçamento de 3 em 3 meses no eixo da data de leitura do parâmetro; - Mete a legenda das rectas do gráfico, em posição superior por baixo do título do gráfico Sub Grafico() ' ' Grafico Macro ' ' Atalho por teclado: Ctrl+g ' Dim NomeFolha As String Range("A1:B63").Select NomeFolha = ActiveSheet.Name Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.Location Where:=xlLocationAsObject, Name:=NomeFolha ActiveChart.Axes(xlValue).MajorGridlines.Select Selection.Delete With ActiveChart .HasTitle = True .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).HasTitle = True End With ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Trendlines.Add Type:=xlLinear, Forward:=0, _ Backward:=0, DisplayEquation:=0, DisplayRSquared:=0, Name:= _ "Linear (Transparência )" ActiveChart.Axes(xlCategory).Select ActiveChart.Axes(xlCategory).MajorUnit = 3 ActiveChart.SetElement (msoElementLegendTop) ActiveChart.PlotArea.Select Selection.Width = 633.136 Selection.Width = 642.136 Selection.Height = 167.512 Selection.Top = 61.493 ActiveChart.ChartArea.Select End Sub O que eu quero que ele faça e não consigo: - Quero que ao correr a macros e ao aparecer o gráfico ele já venha redimensionado com as medidas que coloquei ali a castanho e que por algum motivo ele não assume. Ou seja, ele assume tudo o resto acima programado, mas o resize ele não faz. :ranting: - Também quero mudar a cor dos marcadores e da linha que une os vários pontos, e também a da linha de tendência. Quando gravo a macros ele não parece assumir essa mudança de cor. Edited June 13, 2011 by Kubrick Link to comment Share on other sites More sharing options...
dreamer Posted June 13, 2011 Share Posted June 13, 2011 Não tentei criar uma macro igual à tua, parece ter muitos retoques. Caso os gráficos sejam sempre iguais entre eles no aspecto, porque não guardas um exemplar na primeira folha e vais copiando (através da macro) sempre que necessário para a próxima folha, depois só terás que mudar a origem dos dados (também com a macro). Link to comment Share on other sites More sharing options...
Kubrick Posted June 14, 2011 Author Share Posted June 14, 2011 Entretanto consegui. Os gráficos são todos iguais, o que muda é o parâmetro. Sinto que nunca vou conseguir escrever código VBA, sem ter google comigo. :-.. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now