AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79556233
Accepted
Matheus Lors
Matheus Lors
Asked: 2025-04-05 04:52:14 +0800 CST2025-04-05 04:52:14 +0800 CST 2025-04-05 04:52:14 +0800 CST

Como selecionar e copiar conteúdos específicos para outras tabelas

  • 772

Estou tentando copiar todas as linhas definidas como "Masculino" ou "Feminino", dependendo da escolha do usuário, como um estudo e teste de conceito para meu trabalho. No entanto, quando tento executar o código, ele repete a primeira linha para a quantidade de linhas que há na tabela principal ou não copia nada se eu selecionar "Feminino".

Meu código é:

    Sub Seletion()

Dim CatDes As String
Dim Bsd As Excel.Worksheet
Dim Tst As Excel.Worksheet
Dim NR As Integer
Dim i As Integer
Dim N As Integer

'Variables
CatDes = Sheets("issue sheet").Range("B2").Value
Set Bsd = Excel.Worksheets("Base de dados")
NR = Bsd.Range("a1").End(xlDown).Row - 1
N = 2

'Copy headers
Bsd.Select
Range("A1", Range("A1").End(xlToRight)).Copy
Sheets.Add.Name = "Teste"
    'Criar planilha nova
        Set Tst = Excel.Worksheets("Teste")
        Tst.Range("A1").PasteSpecial Paste:=xlPasteValues

'Copy info
While N <> NR

Bsd.Select
Bsd.Cells(N, 1).Select
    Do
        If ActiveCell.Offset(0, 4).Value = CatDes Then
            Range(ActiveCell, Cells(ActiveCell.Row, ActiveCell.End(xlToRight).Column)).Copy
            Tst.Select
            Range("A1").Select
                'Checar Próxima Celula Vazia
            Do While Not IsEmpty(ActiveCell)
                ActiveCell.Offset(1, 0).Select
            Loop
            ActiveCell.PasteSpecial xlPasteValues
            Else
        End If
        N = N + 1
    Loop Until N = NR
Wend
    
End Sub

A ideia é que eu:

  1. Tenho o gênero que desejo selecionado/digitado (CatDes)
  2. Saiba quantas linhas existem no banco de dados principal (NR)
  3. Copie os cabeçalhos do banco de dados principal (já que meu objetivo é criar uma nova planilha como um todo em vez de filtrá-la)
  4. Copie todas as linhas que tenham o gênero exato que selecionei.

Tentei repetir o processo de verificação de gênero tantas vezes quantas forem as linhas no banco de dados principal, mas não tenho certeza se há uma maneira melhor para isso, daí o "N<>NR". Tentei usar o For I ... Next, mas não tive sucesso. Qualquer ajuda é apreciada

excel
  • 1 1 respostas
  • 39 Views

1 respostas

  • Voted
  1. Best Answer
    VBasic2008
    2025-04-05T07:46:30+08:002025-04-05T07:46:30+08:00

    Copiar linhas filtradas como valores

    Sub CopyFilteredValues()
    
        ' Reference the workbook.
        Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
        
        ' Retrieve the criteria from the lookup sheet.
        Dim lws As Worksheet: Set lws = wb.Sheets("Issue Sheet")
        Dim Criteria As String: Criteria = CStr(lws.Range("B2").Value)
        
        ' Return the values of the source table range in an array.
        Dim sws As Worksheet: Set sws = wb.Sheets("Base de dados")
        Dim srg As Range: Set srg = sws.Range("A1").CurrentRegion
        Dim sRowsCount As Long: sRowsCount = srg.Rows.Count
        Dim ColumnsCount As Long: ColumnsCount = srg.Columns.Count
        If ColumnsCount < 5 Then Exit Sub ' 5 is the criteria column
        Dim Data() As Variant: Data = srg.Value
        Dim IsHeaderRow As Boolean: IsHeaderRow = True
        
        ' Declare addtional variables.
        Dim sRow As Long, dRow As Long, Col As Long, AreRowsDifferent As Boolean
        
        ' Loop through the rows of the array and move the matching rows
        ' to the top.
        For sRow = 1 To sRowsCount
            If IsHeaderRow Then
                dRow = dRow + 1
                IsHeaderRow = False
            Else
                If StrComp(CStr(Data(sRow, 5)), Criteria, vbTextCompare) = 0 Then
                    dRow = dRow + 1
                    If Not AreRowsDifferent Then
                        If dRow < sRow Then AreRowsDifferent = True
                    End If
                    If AreRowsDifferent Then
                        For Col = 1 To ColumnsCount
                            Data(dRow, Col) = Data(sRow, Col)
                        Next Col
                    End If
                End If
            End If
        Next sRow
        
        ' Add or clear the destination sheet.
        Dim dws As Worksheet:
        On Error Resume Next
            Set dws = wb.Sheets("Teste")
        On Error GoTo 0
        If dws Is Nothing Then
            Set dws = wb.Sheets.Add
            dws.Name = "Teste"
        Else
            dws.Cells.Clear
        End If
        
        ' Copy the values from the top of the array to the destination sheet.
        dws.Range("A1").Resize(dRow, ColumnsCount).Value = Data
        
        ' Inform.
        If dRow = 1 Then
            MsgBox "No rows matching """ & Criteria & """ found!", vbExclamation
        Else
            MsgBox "Copied rows matching """ & Criteria & """.", vbInformation
        End If
        
    End Sub
    
    • 0

relate perguntas

  • Como posso retornar linhas específicas onde EXISTE uma taxa no contrato listado, mas NÃO há taxa no sistema?

  • adicionar automaticamente um campo de referência em uma tabela quando alguns valores são repetidos?

  • percorrer a coluna com a alteração do endereço da célula

  • Pesquise uma string e os valores de saída correspondentes a essa string

  • Existe uma maneira no Excel de contar as ocorrências de um texto específico em uma string, mas também incluir o caractere anterior?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve