Jump to content
PauloFMarques

Macro para copiar linhas

Recommended Posts

PauloFMarques

Boa tarde, estou a fazer um trabalho em excel e necessitava da vossa ajuda, tenho uma folha em excel que contem um identificador que aparece uma vez no inicio de cada conjunto de dados, e eu queria saber se é possivel copiar esse identificador na coluna até encontrar outro.

A folha é mais ou menos assim:

1048615013

-

-

-

-

-

-

10774929415

-

-

...

o que eu queria era copiar o primeiro identificador até encontrar o segundo, e quando encontrasse o segundo ele copiava o segundo e ia copiá-lo até encontrar o 3. e por ai fora.

Ou seja deveria ficar com uma aparência assim:

1048615013

1048615013

1048615013

1048615013

1048615013

1048615013

1048615013

10774929415

10774929415

10774929415

...

E necessitava que fosse em marco, pois é para ser utilizado em diversos ficheiros, com esta mesma estrutura..

Desde já agradeço a vossa ajuda.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
jppinto

Sub FillCol()

For i = 1 To Selection.Cells.Count - 1

j = i + 1

If Selection.Cells(j, 1).Value = "" Then

  Selection.Cells(j, 1).Value = Selection.Cells(i, 1).Value

End If

Next i

End Sub

Selecionas as células aonde queres preencher para baixo os dados e corres esta macro.

jpgpinto

www.excel-user.blogspot.com

Share this post


Link to post
Share on other sites
PauloFMarques

Peço desculpa pela ignorância, mas como é que eu faço a macro?? é que nunca me ensinaram a trabalhar com macros.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
PauloFMarques

O link ajudou, mas não é este tipo de macro que estou à procura, pois nesta macro o utilizador tem de seleccionar as linhas que pretende igualar.

A ideia era sem que o utilizador tenha de seleccionar as linhas, ou seja, o utilizador carrega em executar, e a macro descobre as linhas sozinha,

Não sei se me estou a fazer entender, nem se é possível, mas era isto que eu necessitava.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
jpaulino

A ideia era sem que o utilizador tenha de seleccionar as linhas, ou seja, o utilizador carrega em executar, e a macro descobre as linhas sozinha,

Não sei se me estou a fazer entender, nem se é possível, mas era isto que eu necessitava.

A macro nunca descobre nada, tens de ser tu a dizer o que queres fazer.

Por exemplo, se as células a preencher estão num determinado range, aí é fácil de fazer. Existe um range definido ou uma coluna adjacente que esteja preenchida?

Share this post


Link to post
Share on other sites
PauloFMarques

Esse é o problema, é que não existe range definido, pois o identificador pode ter 5 ou 500 dados. A folha é da via verde, ou seja o identificador pode passar 2 vezes, ou 50 vezes pela via verde.

Logicamente eu consigo resolver, o problema é na prática.

Teria de ser algo mais ou menos assim:

A macro "lê" o primeiro identificador e copia, para a célula debaixo, depois verifica se a célula tem outro identificador ou se tem um (-) [entre identificadores as colunas já vêem preenchidas com um (-) quando se faz o download] se tiver um (-) ele cola o identificador, se tiver outro identificador ele copia esse novo identificador e segue para a célula abaixo.

Não sei se me fiz entender.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
PauloFMarques

os dados são apresentados assim:

1048615013

-

-

-

-

-

-

10774929415

-

-

...

os (-) aparecem mesmo na folha e representam a panóplia de dados que aquele identificador tem, neste exemplo o 1º identificador tem 6 dados, que correspondem a 6 passagens na via verde

o objectivo da macro é copiar o primeiro identificador, guarda-o em memória, verifica se a célula que está por baixo tem outro identificador ou se tem um (-), se tiver um menos cola o identificador, se não copia o que está presente, ou seja ficaria algo assim:

1048615013 -1º Identificador

1048615013 -nestes 6 campos existiam um (-) logo ele colou o identificador copiado

1048615013 -faz o mesmo neste

1048615013 - e neste

1048615013 -...

1048615013 -...

1048615013 -ate aqui.

10774929415 - aqui ele já encontra outro identificador, logo ele vai parar de copiar o anterior e começar a copiar este

10774929415 -...

10774929415 - e vai copiando até achar outro identificador diferente

...

Entendeste agora? ou ainda queres uma demo?


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
jpaulino

Se as linhas tiverem um sinal de menos/traço "-", então este código deve funcionar

Sub PreencheValores()
Dim lastRow As Long, firstRow As Long
Dim column As String
Dim id As String
Dim x As Long

' MODIFICAR
firstRow = 1
column = "a"

lastRow = Cells(Cells.Rows.Count, column).End(xlUp).Row
Application.ScreenUpdating = False

For x = firstRow To lastRow
    If id = "" Or Trim(Cells(x, column).Value) <> "-" Then
        id = Cells(x, column).Value
    ElseIf Trim(Cells(x, column).Value) = "-" Then
        Cells(x, column).Value = id
    End If
Next

Application.ScreenUpdating = True

End Sub

Share this post


Link to post
Share on other sites
PauloFMarques

Muito obrigado, funciona na perfeição.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
PauloFMarques

Já agora só um aparte. Há forma de guardar essa macro fora de um livro, para se poder utiliza-la em vários livros?


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
jpaulino

Já agora só um aparte. Há forma de guardar essa macro fora de um livro, para se poder utiliza-la em vários livros?

Criando um Add-Ins. Vê no meu blog que tens lá um exemplo :)

Share this post


Link to post
Share on other sites
PauloFMarques

Muito obrigado.

Uma ultima questão, como é que habilito as macros no office 2010?


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
Share on other sites
jpaulino

File - Options - Trust Center - Trust Center Settings - Macro Settings

Share this post


Link to post
Share on other sites
PauloFMarques

Obrigado mais um vez.


--Sometimes, we do what we want, but we don't want what we have done--

Share this post


Link to post
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

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. 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.