Note: The other languages of the website are Google-translated. Back to English

Como mover uma linha inteira para outra planilha com base no valor da célula no Excel?

Para mover uma linha inteira para outra planilha com base no valor da célula, este artigo o ajudará.

Mova a linha inteira para outra folha com base no valor da célula com código VBA
Mova a linha inteira para outra planilha com base no valor da célula com o Kutools para Excel


Mova a linha inteira para outra folha com base no valor da célula com código VBA

Como mostrado na captura de tela abaixo, você precisa mover a linha inteira da Planilha1 para a Planilha2 se uma palavra específica “Concluído” existir na coluna C. Você pode tentar o seguinte código VBA.

1. Pressione outro+ F11 simultaneamente para abrir o Microsoft Visual Basic para Aplicações janela.

2. Na janela Microsoft Visual Basic for Applications, clique em inserção > Módulo. Em seguida, copie e cole o código VBA abaixo na janela.

VBA code 1: Move entire row to another sheet based on cell value

Sub Cheezy()
'Updated by Kutools for Excel 2017/8/28
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
       If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            xRg(K).EntireRow.Delete
            If CStr(xRg(K).Value) = "Done" Then
                K = K - 1
            End If
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Nota: No código, Sheet1 é a planilha que contém a linha que você deseja mover. E Sheet2 é a planilha de destino onde você localizará a linha. “C: C”É a coluna que contém o determinado valor e a palavra“Pronto ”É o valor certo no qual você moverá a linha. Altere-os de acordo com suas necessidades.

3. aperte o F5 para executar o código, a linha que atende aos critérios na Planilha1 será movida para a Planilha2 imediatamente.

Nota: O código VBA acima excluirá linhas dos dados originais após mover para uma planilha especificada. Se você deseja apenas copiar linhas com base no valor da célula, em vez de excluí-las. Por favor, aplique o código VBA 2 abaixo.

VBA code 2: Copy entire row to another sheet based on cell value

Sub MoveRowBasedOnCellValue()
'Updated by Extendoffice 2017/11/10
    Dim xRg As Range
    Dim xCell As Range
    Dim I As Long
    Dim J As Long
    Dim K As Long
    I = Worksheets("Sheet1").UsedRange.Rows.Count
    J = Worksheets("Sheet2").UsedRange.Rows.Count
    If J = 1 Then
    If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0
    End If
    Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
    On Error Resume Next
    Application.ScreenUpdating = False
    For K = 1 To xRg.Count
        If CStr(xRg(K).Value) = "Done" Then
            xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
            J = J + 1
        End If
    Next
    Application.ScreenUpdating = True
End Sub

Mova a linha inteira para outra planilha com base no valor da célula com o Kutools para Excel

Se você é um novato no código VBA. Aqui eu apresento o Selecione células específicas utilidade de Kutools for Excel. Com este utilitário, você pode selecionar facilmente todas as linhas com base em um determinado valor de célula ou diferentes valores de célula em uma planilha e copiar as linhas selecionadas para a planilha de destino conforme necessário. Faça o seguinte.

Antes de aplicar Kutools for Excel, Por favor baixe e instale primeiro.

1. Selecione a lista de colunas que contém o valor da célula em que moverá as linhas com base e clique em Kutools > Selecionar > Selecione células específicas. Veja a imagem:

2. Na abertura Selecione células específicas caixa de diálogo, escolha Linha inteira no Tipo de seleção seção, selecione É igual a no Tipo específico lista suspensa, insira o valor da célula na caixa de texto e clique no botão OK botão.

Outro Selecione células específicas A caixa de diálogo aparece para mostrar o número de linhas selecionadas e, enquanto isso, todas as linhas contêm o valor especificado na coluna selecionada. Veja a imagem:

3. aperte o Ctrl + C para copiar as linhas selecionadas e, em seguida, colá-las na planilha de destino necessária.

Nota: Se você deseja mover linhas para outra planilha com base em dois valores de células diferentes. Por exemplo, mova as linhas com base nos valores das células "Concluído" ou "Processando", você pode ativar o Or condição no Selecione células específicas caixa de diálogo como a imagem abaixo mostrada:

  Se você quiser ter uma avaliação gratuita (30-dia) deste utilitário, por favor clique para fazer o downloade, em seguida, aplique a operação de acordo com as etapas acima.


Artigos relacionados:


As melhores ferramentas de produtividade para escritório

O Kutools for Excel resolve a maioria dos seus problemas e aumenta sua produtividade em 80%

  • armadilha para peixes: Insira rapidamente fórmulas complexas, gráficos e qualquer coisa que você tenha usado antes; Criptografar células com senha; Criar lista de discussão e enviar emails ...
  • Barra Super Fórmula (edite facilmente várias linhas de texto e fórmula); Layout de leitura (ler e editar facilmente um grande número de células); Colar na faixa filtrada...
  • Mesclar células / linhas / colunas sem perder dados; Dividir o conteúdo das células; Combinar linhas / colunas duplicadas... Evite células duplicadas; Comparar intervalos...
  • Selecione Duplicado ou Único Linhas; Selecione linhas em branco (todas as células estão vazias); Super Find e Fuzzy Find em muitos livros; Seleção aleatória ...
  • Cópia exata Várias células sem alterar a referência da fórmula; Criação automática de referências para várias folhas; Inserir marcadores, Caixas de seleção e mais ...
  • Extrair Texto, Adicionar texto, remover por posição, Remover Espaço; Criar e imprimir subtotais de paginação; Converter entre conteúdo de células e comentários...
  • Super Filtro (salvar e aplicar esquemas de filtro a outras planilhas); Classificação Avançada por mês / semana / dia, frequência e mais; Filtro Especial por negrito, itálico ...
  • Combine pastas de trabalho e planilhas; Mesclar tabelas com base em colunas-chave; Divida os dados em várias folhas; Conversão em lote de xls, xlsx e PDF...
  • Mais de 300 recursos poderosos. Suporta Office / Excel 2007-2021 e 365. Suporta todos os idiomas. Fácil implantação em sua empresa ou organização. Recursos completos de avaliação gratuita de 30 dias. Garantia de devolução do dinheiro em 60 dias.
guia kte 201905

Guia do Office traz interface com guias para o Office e torna seu trabalho muito mais fácil

  • Habilite a edição e leitura com guias em Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Abra e crie vários documentos em novas guias da mesma janela, em vez de em novas janelas.
  • Aumenta sua produtividade em 50% e reduz centenas de cliques do mouse para você todos os dias!
parte inferior da aba do escritório
Comentários (299)
Ainda não há classificações. Seja o primeiro a avaliar!
Este comentário foi feito pelo moderador no site
Olá, achei este guia específico realmente útil em relação aos outros que já vi. Obrigada! O problema que estou tendo é que, se eu alterar meu valor desejado para 'Fechado', tenho que executar F5 para mover a linha. Eu gostaria que ele se movesse automaticamente. Sou novo no Excel, então sua ajuda é muito apreciada. Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Planilhas("Rastreador de Incidentes ECR").UsedRange.Rows.Count J = Planilhas("Problemas Resolvidos").UsedRange.Rows. Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Resolved Issues").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("ECR Incident Tracker").Range("B1:B" & I) Em caso de erro Retome o próximo Application.ScreenUpdating = False para cada xCell em xRg Se CStr(xCell.Value) = "Fechado" Então xCell.EntireRow.Copy Destination:=Worksheets("Problemas resolvidos").Range("A" & J + 1) xCell.EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub
Este comentário foi feito pelo moderador no site
Olá, estou tentando automatizar a movimentação das células sem ter que abrir o módulo e pressionar F5 também. Você já resolveu essa questão? Agradeço antecipadamente!
Este comentário foi feito pelo moderador no site
Crystal forneceu informações sobre como fazer isso hoje - dê uma olhada na primeira página deste tópico para ver a resposta dela. Ele move automaticamente a linha com a data de hoje em uma coluna (L no meu caso) para uma planilha diferente.
Este comentário foi feito pelo moderador no site
Estou executando este código e estou tentando mover uma linha com base na data de hoje que aparece na coluna I - alterei Range("B1:B" & I) para ler Range(I1:I" & I). Done" em seu exemplo para Date. No entanto, quando a data de hoje aparece em qualquer lugar na linha, não apenas na coluna I conforme necessário, a linha se move para a planilha alternativa. Alguma ideia de por que isso está acontecendo e como posso fazer a linha se mover somente quando a data de hoje estiver na coluna I, independentemente de a data de hoje aparecer em outras colunas?
Este comentário foi feito pelo moderador no site
Se eu quisesse ter muitos valores e muitas planilhas para mover minha linha, teria que escrever todo o código novamente com um valor diferente para essa célula? Ou seja, se eu colocar NA em uma célula, ela irá para a folha Na, e se eu colocar W#, ela irá para a folha numérica errada, etc.
Este comentário foi feito pelo moderador no site
oi, isso foi muito útil. Existe uma maneira de fazer isso sem ter a linha de dados movida para a segunda planilha, mas sim copiada? Então os dados permaneceriam em ambas as folhas?
Este comentário foi feito pelo moderador no site
Oi, o código foi muito útil, mas em vez de copiar a linha inteira, exijo que uma determinada seleção de linha seja movida para a próxima planilha. como posso definir um intervalo em vez de uma linha inteira Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets("Sheet1").UsedRange.Rows.Count J = Worksheets(" Sheet2").UsedRange.Rows.Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("Sheet1").Range( "C1:C" & I) Em caso de erro Retome o próximo Application.ScreenUpdating = False para cada xCell em xRg If CStr(xCell.Value) = "Done" Então xCell.Linha inteira.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1) J = J + 1 End If Next Application.ScreenUpdating = True End Sub
Este comentário foi feito pelo moderador no site
qual seria o código se eu quisesse copiar linhas (células específicas) em outra planilha para células específicas? MAS também com base em um valor Exemplo: seqüência de imagens de produtos coloridos white blender 2 whiteblender2 black juicer 3 blackjuicer3 red tv 1 redtv1 green iron 4 greeniron4 Eu gostaria que a string fosse copiada para outra folha, mas o número na coluna de imagens informa quantas vezes ela deve ser copiada (então, neste caso, a string do liquidificador deve ser copiado em 2 linhas
Este comentário foi feito pelo moderador no site
Oi, Muito bom pedaço de código, funcionando muito bem. Como alterar este código para mover linhas de uma tabela para outra tabela, em vez de uma planilha para outra planilha? Muito Obrigado !
Este comentário foi feito pelo moderador no site
Oi, estou tentando usar o código, mas recebo um erro de sintaxe no Dim xCell As Range. Você pode ajudar por favor?
Este comentário foi feito pelo moderador no site
Sub Cheezy() Dim xRg As Range Dim xCell As Range Dim I As Long Dim J As Long I = Worksheets("Sheet1").UsedRange.Rows.Count J = Worksheets("Sheet2").UsedRange.Rows.Count If J = 1 Then If Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Then J = 0 End If Set xRg = Worksheets("Sheet1").Range("C1:C" & I) On Error Resume Next Application.ScreenUpdating = False para cada xCell em xRg If CStr(xCell.Value) = "Done" Então xCell.EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1) xCell. EntireRow.Delete J = J + 1 End If Next Application.ScreenUpdating = True End Sub como pode adicionar uma segunda planilha para que as linhas sejam movidas para a planilha2?
Este comentário foi feito pelo moderador no site
O que devo inserir se quiser incluir qualquer data como meu valor? Então, a linha permanece na folha 1 se não tiver data e se move para a folha 2 se tiver?
Este comentário foi feito pelo moderador no site
[quote]oi, isso foi muito útil. Existe uma maneira de fazer isso sem ter a linha de dados movida para a segunda planilha, mas sim copiada? Então os dados permaneceriam em ambas as folhas?Por Maddie[/quote] alguém resolveu isso
Este comentário foi feito pelo moderador no site
Remova este "xCell.EntireRow.Delete" do código
Este comentário foi feito pelo moderador no site
Quando excluo essa linha de código e executo a macro novamente, o Excel congela. Por que e como faço para corrigir isso?? Quero que os dados estejam nas duas planilhas e não sejam excluídos do original. TIA
Este comentário foi feito pelo moderador no site
existe uma resposta para isso? O meu também congela, gostaria de copiar, mas não excluir a linha
Este comentário foi feito pelo moderador no site
Bom dia,
O código VBA abaixo pode ajudá-lo a copiar apenas as linhas em vez de excluí-las.

Sub Cheezy ()
Dim xRg como intervalo
Dim xCell como intervalo
Escurecer eu enquanto
Dim J enquanto
Dim K enquanto
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Planilhas("Planilha2").UsedRange.Rows.Count
Se J = 1 Então
Se Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Então J = 0
Se acabar
Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
On Error Resume Next
Application.ScreenUpdating = False
Para K = 1 Para xRg.Count
Se CStr(xRg(K).Value) = "Concluído" Então
xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
J = J + 1
Se acabar
Seguinte
Application.ScreenUpdating = True
End Sub
Este comentário foi feito pelo moderador no site
Oi, eu estou procurando uma variação sobre isso. Eu preciso que o script seja executado continuamente ou falhe sempre que o valor nesse campo específico for alterado. O código em si funciona, mas precisa ser executado de forma independente. Gostaria que fosse automatizado. Alguém pode ajudar?

Como um aparte, se eu quiser apenas copiar células específicas no intervalo, como isso é feito?
Este comentário foi feito pelo moderador no site
Caro Rob,

Se você precisar que o script seja executado automaticamente quando as células nesse campo forem alteradas, o código VBA abaixo poderá ajudá-lo. Clique com o botão direito do mouse na planilha atual (a planilha com linhas que você moverá automaticamente) e selecione Exibir código no menu de contexto. Em seguida, copie e cole o script VBA abaixo na janela Código.

Private Sub Worksheet_Change (ByVal Target As Range)

Dim xCell como intervalo

Escurecer eu enquanto
On Error Resume Next

Application.ScreenUpdating = False

Definir xCell = Alvo(1)
Se xCell.Value = "Concluído" Então
I = Worksheets("Sheet2").UsedRange.Rows.Count
Se I = 1 Então

Se Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Então I = 0

Se acabar

xCell.EntireRow.Copy Worksheets("Sheet2").Range("A" & I + 1)

xCell.EntireRow.Delete
Se acabar

Application.ScreenUpdating = True

End Sub


Para sua segunda pergunta, você quer dizer apenas copiar várias células em vez de toda a linha? Ou você poderia fornecer uma captura de tela da sua pergunta? Obrigada!

Atenciosamente, Cristal
Este comentário foi feito pelo moderador no site
Cristal,


Sua ajuda é mais do que necessária :)



Como podemos adicionar outro critério aqui, por exemplo, gostaria de transferir Concluído ao lado de Concluído:


Private Sub Worksheet_Change (ByVal Target As Range)

Dim xCell como intervalo

Escurecer eu enquanto
On Error Resume Next

Application.ScreenUpdating = False

Definir xCell = Alvo(1)
Se xCell.Value = "Concluído" Então
I = Worksheets("Sheet2").UsedRange.Rows.Count
Se I = 1 Então

Se Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Então I = 0

Se acabar

xCell.EntireRow.Copy Worksheets("Sheet2").Range("A" & I + 1)

xCell.EntireRow.Delete
Se acabar

Application.ScreenUpdating = True

End Sub
Este comentário foi feito pelo moderador no site
Oi cristal
Esta é a informação mais útil que encontrei na web e esta macro faz o que eu quero. Mas estou movendo as linhas de uma tabela para outra - e com essa macro as informações se movem para a primeira linha livre fora da tabela, não para a próxima linha livre na tabela? Você pode ajudar?
Este comentário foi feito pelo moderador no site
Estou executando este código e estou tentando mover uma linha com base na data de hoje que aparece na coluna I - alterei Range("B1:B" & I) para ler Range(I1:I" & I). Done" em seu exemplo para Date. No entanto, quando a data de hoje aparece em qualquer lugar na linha, não apenas na coluna I conforme necessário, a linha se move para a planilha alternativa. Alguma ideia de por que isso está acontecendo e como posso fazer a linha se mover somente quando a data de hoje estiver na coluna I, independentemente de a data de hoje aparecer em outras colunas?
Este comentário foi feito pelo moderador no site
Querido David,

O código funciona bem para mim depois de alterar o intervalo e o valor de variação até a data. O formato de data em seu código deve corresponder ao formato de data que você usou na planilha. Ou é conveniente para você anexar sua planilha?
Este comentário foi feito pelo moderador no site
Olá Cristal,


Não estou claro o que você quer dizer quando diz que os formatos de data de código e planilha devem corresponder - não sou um especialista em VB, mais um nível iniciante. Na minha planilha eu insiro a data de hoje na coluna F como data de entrada da linha, no formato ctrl + :. Insiro a data de vencimento na coluna "I" no formato mm/dd/aaaa. No entanto, isso causa problemas ao fazer uma nova entrada de linha e inserir a data de hoje na coluna F porque, assim que ela é inserida, a linha é movida para a nova planilha. correr sem que eu o force a fazê-lo. Desculpe pelo que pode ser para você questões muito triviais, mas eu simplesmente não consigo ouvir essas questões. Qualquer ajuda seria apreciada.
Este comentário foi feito pelo moderador no site
Querido David,

Eu tentei exatamente o que você mencionou acima, mas o problema não aparece no meu caso. Você pode fornecer sua versão do Excel? Preciso de mais informações para ajudar a resolver este problema. Desculpe incomodá-lo novamente.

Atenciosamente, Cristal
Este comentário foi feito pelo moderador no site
Crystal, estas são as planilhas em questão. Você verá no código copiado que estou procurando por "até" a data de hoje na coluna L e se "até" e incluindo a data de hoje estiver nessa coluna, quero mover a linha que contém essa data para uma nova planilha. Atualmente, quando insiro a data de hoje em qualquer lugar da linha (por exemplo, coluna F se uma solicitação for emitida hoje), ela move automaticamente a linha inteira para a planilha arquivada. Eu costumo inserir a data de hoje usando a combinação ctrl + :, geralmente na coluna F.
Além disso, gostaria que essa mudança acontecesse quando eu abrisse a pasta de trabalho. Atualmente eu preciso ir para mostrar o código e pressionar F5. Qualquer dica de como fazer isso será bem vinda.
Este comentário foi feito pelo moderador no site
Infelizmente, minha pasta de trabalho habilitada para macro não será carregada, pois diz que o formato não é compatível. Estes estão no Excel 2016
Este comentário foi feito pelo moderador no site
Querido David,

O código VBA a seguir pode ajudá-lo a alcançá-lo.

Private Sub Workbook_Open ()
Dim xRg como intervalo
Dim xCell como intervalo
Escurecer eu enquanto
Dim J enquanto
I = Planilhas("OPORTUNIDADES ATUAL DO OASIS").UsedRange.Rows.Count
J = Planilhas("OPORTUNIDADES DO OASIS ARQUIVADA").UsedRange.Rows.Count
Se J = 1 Então
Se Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OASIS").UsedRange) = 0 Então J = 0
Se acabar
Set xRg = Worksheets("OPORTUNIDADES OASIS ATUAIS").Range("L1:L" & I)
On Error Resume Next
Application.ScreenUpdating = False
Para cada xCell em xRg
Se CStr(xCell.Value) = Data Então
xCell.EntireRow.Copy Destination:=Worksheets("OPORTUNIDADES OASIS ARQUIVADOS").Range("A" & J + 1)
xCell.EntireRow.Delete
J = J + 1
Se acabar
Seguinte
End Sub

notas:
1. Você precisa colocar o script VBA na janela de código ThisWorkbook;
2. Sua pasta de trabalho precisa ser salva como pasta de trabalho habilitada para macro do Excel.

Após a operação acima, toda vez que você abrir a pasta de trabalho, uma linha inteira será movida para a planilha ARQUIVADO se a célula da coluna L atingir a data de hoje.

Atenciosamente, Cristal
Este comentário foi feito pelo moderador no site
Obrigado Cristal,
Isso funciona muito bem se a data de hoje for alcançada na coluna L. Existe alguma maneira de incluir até a data de hoje na coluna L também, de modo que, se eu não verificar a pasta de trabalho por vários dias, ela incluirá automaticamente datas anteriores de hoje? Muito obrigado por sua ajuda.
Este comentário foi feito pelo moderador no site
Querido David,

Desculpe, não tenho certeza se entendi sua pergunta. Em caso afirmativo, todas as linhas serão movidas desde que as datas anteriores apareçam na coluna L?
Este comentário foi feito pelo moderador no site
Olá Cristal,

Se eu não abrir minha planilha por alguns dias e a data inserida na coluna L já passou, ou seja, a data em uma célula na coluna L é 11 de setembro de 2017, mas não abro minha planilha até 13 de setembro, eu como todas as entradas na coluna L a serem verificadas para todas as datas até a data de hoje, mova as linhas correspondentes para a nova planilha. Atualmente, com o código que você gentilmente forneceu, apenas as linhas com a data atual na coluna L são movidas para a nova planilha, deixando para trás aquelas com uma data anterior na coluna L, que atualmente movo manualmente para a nova planilha. Obrigado pela ajuda.
Este comentário foi feito pelo moderador no site
Querido David,



Eu entendo o seu ponto. Por favor, tente o script VBA abaixo. Ao abrir a pasta de trabalho, todas as linhas com datas até a data de hoje na coluna L serão movidas para a nova planilha especificada.



Private Sub Workbook_Open ()
Dim xRg como intervalo
Dim xRgRtn como intervalo
Dim xCell como intervalo
Dim xLastRow Tão Longo
Escurecer eu enquanto
Dim J enquanto
On Error Resume Next
xLastRow = Worksheets("OPORTUNIDADES OASIS ATUAIS").UsedRange.Rows.Count
Se xLastRow < 1 Então Exit Sub
J = Planilhas("OPORTUNIDADES DO OASIS ARQUIVADA").UsedRange.Rows.Count
Se J = 1 Então
Se Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OASIS").UsedRange) = 0 Então J = 0
Se acabar
Set xRg = Worksheets("OPORTUNIDADES OASIS ATUAIS").Range("L1:L" & xLastRow)
Para I = 2 Para xLastRow
Se xRg(I).Value > Data Então Sair Sub
Se xRg(I).Value <= Data Então
xRg(I).EntireRow.Copy Destination:=Worksheets("OPORTUNIDADES OASIS ARQUIVADOS").Range("A" & J + 1)
xRg(I).EntireRow.Delete
J = J + 1
eu = eu - 1
Se acabar
Seguinte
End Sub

Você precisa colocar o script VBA na janela de código ThisWorkbook e salvar a pasta de trabalho como uma pasta de trabalho habilitada para macro do Excel.
Este comentário foi feito pelo moderador no site
Obrigado Cristal, Isso funciona muito bem.
Este comentário foi feito pelo moderador no site
Crystal, fui um pouco apressado em responder que o código funcionava. Abri minha pasta de trabalho hoje e as linhas contendo entradas de datas anteriores na célula da coluna L ainda estão na "planilha de oportunidades de oásis atual" e não foram movidas para a "planilha de oásis arquivada" conforme o esperado. Alguma idéia de por que esse seria o caso?
Este comentário foi feito pelo moderador no site
As células destacadas estão na coluna L referente à questão acima e são os critérios (até a data de hoje) para mover a linha para a nova planilha. Espero que esta imagem ajude.
Este comentário foi feito pelo moderador no site
Esta também é uma cópia da janela VBA relacionada ao acima.
Este comentário foi feito pelo moderador no site
Crystal, fui um pouco apressado em responder que o código funcionava. Abri minha pasta de trabalho hoje e as linhas contendo entradas de datas anteriores na célula da coluna L ainda estão na "planilha de oportunidades de oásis atual" e não foram movidas para a "planilha de oásis arquivada" conforme o esperado. Alguma idéia de por que esse seria o caso?
Este comentário foi feito pelo moderador no site
Cristal,

Como não consigo carregar minha pasta de trabalho, reproduzirei as linhas e colunas aqui

ABCDEFGHIJKL
# Tipo Alteração de Solicitação de Retirada # Data de Emissão Perguntas Local de Entrega do Cliente Prazo da Proposta do Projeto

1 SS SB 1234567 1 09/6/17 Sem Nome do Exército Local Drive Tank 09/10/17

Usando o código abaixo, quero que ele mova uma linha inteira para uma nova planilha quando a coluna L atingir a data de hoje. Além disso, se eu não tiver concluído a planilha por vários dias, gostaria que ela usasse a pesquisa "até a data de hoje" na coluna L para fazer o mesmo. Eu também gostaria que fizesse isso automaticamente quando eu abrir a pasta de trabalho, se possível. Atualmente, se eu inserir a data de hoje em qualquer célula da linha, por exemplo, coluna F ao inserir dados, a linha inteira será movida para a planilha de arquivamento. (Usando Excel 2016)

[Código do Módulo 1]

Sub Davev ()

Dim xRg como intervalo

Dim xCell como intervalo

Escurecer eu enquanto

Dim J enquanto

I = Planilhas("OPORTUNIDADES ATUAL DO OASIS").UsedRange.Rows.Count

J = Planilhas("OPORTUNIDADES DO OASIS ARQUIVADA").UsedRange.Rows.Count

Se J = 1 Então
Se Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OASIS").UsedRange) = 0 Então J = 0

Se acabar

Set xRg = Worksheets("OPORTUNIDADES OASIS ATUAIS").Range("L1:L" & I)

On Error Resume Next

Application.ScreenUpdating = False

Para cada xCell em xRg

Se CStr(xCell.Value) = Data Então

xCell.EntireRow.Copy Destination:=Worksheets("OPORTUNIDADES OASIS ARQUIVADOS").Range("A" & J + 1)
xCell.EntireRow.Delete

J = J + 1
Se acabar

Seguinte
Application.ScreenUpdating = True

End Sub
Este comentário foi feito pelo moderador no site
[Código da Planilha 1]

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xCell como intervalo
Escurecer eu enquanto
On Error Resume Next
Application.ScreenUpdating = False
Definir xCell = Alvo(1)
Se xCell.Value = Data Então
I = Worksheets("OPORTUNIDADES DO OASIS ARQUIVADO").UsedRange.Rows.Count
Se I = 1 Então
If Application.WorksheetFunction.CountA(Worksheets("ARCHIVED OASIS OASIS").UsedRange) = 0 Then I = 0 End If
xCell.EntireRow.Copy Worksheets("OPORTUNIDADES DO OASIS ARQUIVADO").Range("A" & I + 1)
xCell.EntireRow.Delete
Se acabar
Application.ScreenUpdating = True
End Sub

Espero que o acima ajude, mas não sou uma pessoa de VBA, portanto, não entendo como fazer o código fazer o que preciso. Sua ajuda seria apreciada.
Este comentário foi feito pelo moderador no site
Há um grande erro no seu script!

Digamos que você detectou que a linha 7 tem a palavra "Concluído" na coluna C, então você copia e exclui a linha.
Depois de excluir a linha, a próxima linha da lista será a linha 9 e não a 8, porque uma vez que você removeu a 7ª linha, agora o conteúdo da 8ª linha está na linha 7 e todas as linhas subiram 1 linha. Portanto, a próxima linha a ser verificada deveria ser a linha 8, mas agora ela contém os dados que estavam anteriormente na linha 9, portanto, toda vez que você exclui uma linha, na verdade está pulando uma linha para verificar!!!
Este comentário foi feito pelo moderador no site
Prezado Shau Alon,

Obrigado pelo seu comentário. O código foi atualizado com o erro corrigido. Muito obrigado pelo seu assistente.

Atenciosamente, Cristal
Este comentário foi feito pelo moderador no site
Acho que isso está acontecendo comigo, ele continua copiando a mesma linha várias vezes, embora diga que o código foi atualizado. Isto é o que eu tenho:

Sub Cheezy ()
'Atualizado por Kutools for Excel 2017/8/28
Dim xRg como intervalo
Dim xCell como intervalo
Escurecer eu enquanto
Dim J enquanto
Dim K enquanto
I = Planilhas("PURCHASE FORCAST").UsedRange.Rows.Count
J = Planilhas("Arquivo de Compra").UsedRange.Rows.Count
Se J = 1 Então
Se Application.WorksheetFunction.CountA(Worksheets("Arquivo de Compra").UsedRange) = 0 Então J = 0
Se acabar
Set xRg = Worksheets("PURCHASE FORCAST").Range("H3:H" & I)
On Error Resume Next
Application.ScreenUpdating = False
Para K = 1 Para xRg.Count
Se CStr(xRg(K).Value) = "Sim" Então
xRg(K).EntireRow.Copy Destination:=Worksheets("Arquivo de Compra").Range("A" & J + 1)
xRg(K).EntireRow.Delete
Se CStr(xRg(K).Value) = "Sim" Então
K = K - 1
Se acabar
J = J + 1
Se acabar
Seguinte
Application.ScreenUpdating = True
End Sub
Este comentário foi feito pelo moderador no site
Oi Fred,
Cada vez que você executa o código, o código procura o intervalo especificado, então ele copia a mesma linha várias vezes porque não pode dizer qual linha já foi copiada. Para evitar copiar a mesma linha repetidamente, você pode fazer com que o código seja executado automaticamente quando um valor correspondente for inserido na célula especificada.
Na planilha denominada "PURCHASE FORCAST", clique com o botão direito na aba da planilha e clique em Ver código no menu de contexto. Em seguida, copie o seguinte código VBA na janela Planilha (Código).

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updated by Kutools for Excel 20220830
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("PURCHASE FORCAST").UsedRange.Rows.Count
J = Worksheets("Purchase Archive").UsedRange.Rows.Count
If J = 1 Then
If Application.WorksheetFunction.CountA(Worksheets("Purchase Archive").UsedRange) = 0 Then J = 0
End If
Set xRg = Worksheets("PURCHASE FORCAST").Range("H3:H" & I)
On Error Resume Next
Application.ScreenUpdating = False
For K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Yes" Then
xRg(K).EntireRow.Copy Destination:=Worksheets("Purchase Archive").Range("A" & J + 1)
xRg(K).EntireRow.Delete
If CStr(xRg(K).Value) = "Yes" Then
K = K - 1
End If
J = J + 1
End If
Next
Application.ScreenUpdating = True
End Sub
Este comentário foi feito pelo moderador no site
Alguém poderia me ajudar a fazer isso funcionar? Tentei alterar a parte que precisa corresponder ao meu arquivo, mas isso aparece e não tenho certeza do que fazer.
Este comentário foi feito pelo moderador no site
diz que o arquivo não é suportado quando tento fazer o upload do arquivo do Excel. Desculpe... lutando com isso hoje.
Este comentário foi feito pelo moderador no site
Gostaria de ajuda para uma tarefa semelhante, mas um pouco diferente. Eu tenho 5 colunas de números, cerca de 25000 por coluna, cada coluna com um cabeçalho de 1 a 5. Gostaria de copiar a linha inteira para outra planilha se o valor da coluna 1 for maior que zero, OU a coluna 2 for maior que zero , OR coluna 3 é menor que zero, OR coluna 4 é maior que cinco OR coluna 5 é maior que dois etc. isso é possível?
Este comentário foi feito pelo moderador no site
upload de imagem não está funcionando... desculpe.
Este comentário foi feito pelo moderador no site
Olá,
Por favor, use o botão de upload deste.
Este comentário foi feito pelo moderador no site
Portanto, o objetivo é ver se algum dos gases está acima de um limite que eu definirei na fórmula, todo o roe é COPIADO em uma nova folha.

Muito obrigado por qualquer ajuda.
Este comentário foi feito pelo moderador no site
Imagem anexada
Este comentário foi feito pelo moderador no site
Querido Michael,
Talvez você possa resolver esse problema usando um suplemento do Excel. Aqui eu recomendo o utilitário Select Specific Cells do Kutools for Excel. Com este utilitário, você pode selecionar facilmente todas as linhas em um determinado intervalo se o valor de uma coluna especificada for maior ou menor que um número. Depois de selecionar todas as linhas necessárias, você pode copiá-las e colá-las manualmente em uma nova planilha. Veja abaixo a imagem em anexo.

Você pode saber mais sobre esse recurso seguindo o hiperlink abaixo.
https://www.extendoffice.com/product/kutools-for-excel/excel-select-specific-cells-rows.html
Este comentário foi feito pelo moderador no site
obrigado por esta fórmula, mas tive um problema que é quando quero mover a linha para outra planilha, isso não acontece automaticamente. você pode me dar outra fórmula? então sempre que eu altero o valor da célula, ele se move automaticamente.


obrigado
Este comentário foi feito pelo moderador no site
Caro Janang,
A dose de código não acontece automaticamente até que você acione o botão de execução manualmente.
Este comentário foi feito pelo moderador no site
Oi,

Eu gostaria de ter essa macro configurada, mas com 2 argumentos. Consegui fazer a macro funcionar no meu arquivo com base no valor das células na coluna O. No entanto, gostaria que a Macro verificasse se a Coluna S também está preenchida (ou <> ""), antes de mover a linha . Por fim, também gostaria que as linhas copiadas tivessem a mesma formatação das linhas da segunda planilha. Isso muda completamente a macro?
Este comentário foi feito pelo moderador no site
Caro Hugues,
Não sei se te entendi direito. Você quer dizer que, se a célula na coluna S estiver preenchida e a célula na coluna O contiver o valor determinado ao mesmo tempo, mova a linha com formatação? Caso contrário, não se mova?
Este comentário foi feito pelo moderador no site
Olá Cristal,

Sim, é exatamente isso que quero dizer. Na verdade, meus dados são sobre projetos. Minha coluna O é o status do meu projeto e S a data de término do meu projeto.
Quero que meus usuários, as pessoas que possuem a informação e precisarão inseri-la, possam "Arquivar" um projeto APENAS se tiverem o status "Fechado" e tiverem inserido uma "Data de término".


Espero que isso ajude a esclarecer as coisas
Este comentário foi feito pelo moderador no site
Caro Hugues,
Desculpe por responder tão tarde. O código VBA a seguir pode ajudá-lo a resolver o problema. Siga as etapas deste artigo para aplicar o script VBA.

Sub MoveRowBasedOnCellValue()
Dim xRgStatus como intervalo
Dim xRgDate como intervalo
Escurecer eu enquanto
Dim J enquanto
Dim K enquanto
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Planilhas("Planilha2").UsedRange.Rows.Count
Se J = 1 Então
Se Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Então J = 0
Se acabar
Set xRgStatus = Worksheets("Sheet1").Range("O1:O" & I)
Set xRgDate = Worksheets("Sheet1").Range("S1:S" & I)
On Error Resume Next
Application.ScreenUpdating = False
Application.CutCopyMode = False
xRgStatus(1).EntireRow.Copy
Worksheets("Sheet2").Range("A" & J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
Para K = 2 Para xRgStatus.Count
Se CStr(xRgStatus(K).Value) = "Fechado" Então
Se (xRgDate(K).Value <> "") E (TypeName(xRgDate(K).Value) = "Data") Então
xRgStatus(K).EntireRow.Copy
Worksheets("Sheet2").Range("A" & J + 1).PasteSpecial xlPasteAllUsingSourceTheme
J = J + 1
Se acabar
Se acabar
Seguinte
Application.CutCopyMode = Verdadeiro
Application.ScreenUpdating = True
End Sub
Este comentário foi feito pelo moderador no site
Caro Cristal,

Muito obrigado pela sua ajuda!

Saudações,

Hugues
Este comentário foi feito pelo moderador no site
Olá,


Como faço para copiar as linhas em vez de movê-las?
Este comentário foi feito pelo moderador no site
Olá,


Eu sei que isso já foi postado algumas vezes, mas não consigo encontrar a resposta. Como posso copiar o material para a nova planilha e NÃO excluí-lo da planilha original?
Este comentário foi feito pelo moderador no site
Querido Mike,
Se você deseja copiar as linhas em vez de excluí-las, o código VBA abaixo pode ajudá-lo. Obrigado pelo seu comentário!

Sub Cheezy ()
Dim xRg como intervalo
Dim xCell como intervalo
Escurecer eu enquanto
Dim J enquanto
Dim K enquanto
I = Worksheets("Sheet1").UsedRange.Rows.Count
J = Planilhas("Planilha2").UsedRange.Rows.Count
Se J = 1 Então
Se Application.WorksheetFunction.CountA(Worksheets("Sheet2").UsedRange) = 0 Então J = 0
Se acabar
Set xRg = Worksheets("Sheet1").Range("C1:C" & I)
On Error Resume Next
Application.ScreenUpdating = False
Para K = 1 Para xRg.Count
Se CStr(xRg(K).Value) = "Concluído" Então
xRg(K).EntireRow.Copy Destination:=Worksheets("Sheet2").Range("A" & J + 1)
J = J + 1
Se acabar
Seguinte
Application.ScreenUpdating = True
End Sub
Este comentário foi feito pelo moderador no site
Oi,

Sou novo no uso de macros, é possível colar os dados abaixo após um determinado valor e serão repetidos até o final da coluna?
Assim:

Transferir "Azul" depois de "Cor"

A1 = Azul
A5= Cor
A6= (transfira "Azul" aqui)
e assim por diante...
Este comentário foi feito pelo moderador no site
Caro João,
Você quer dizer que se uma célula contém "Cor" em uma coluna, copie o texto da primeira célula para a célula abaixo da "Cor" e repita a cópia desse texto até o final da coluna?
Não há comentários postados aqui ainda
carregar mais
Deixe o seu comentário
Postando como convidado
×
Avalie esta postagem:
0   Personagens
Locais sugeridos

Siga-nos

Copyright © 2009 - www.extendoffice.com. | Todos os direitos reservados. Distribuído por ExtendOffice. | | | Mapa do site
Microsoft e o logotipo do Office são marcas comerciais ou marcas registradas da Microsoft Corporation nos Estados Unidos e / ou em outros países.
Protegido por Sectigo SSL