Jump to content

Fnf Excel Experts


Kubrick
 Share

Recommended Posts

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 by Kubrick
Link to comment
Share on other sites

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

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

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

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

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

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

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 by Kubrick
Link to comment
Share on other sites

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.