首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >宏可以很好地复制数据,直到找到重复的数据。我想让它复制副本

宏可以很好地复制数据,直到找到重复的数据。我想让它复制副本
EN

Stack Overflow用户
提问于 2020-10-03 06:37:51
回答 1查看 43关注 0票数 1

如果在图纸表格的A列中找到与图纸Source_1中的A列匹配的值,则此宏将某些单元从图纸Source_1复制到图纸表格。问题是,如果表Source_1的列A中的值重复。它一次又一次地从sheet Source_1复制第一个匹配项的单元格。我想让它复制不同的事件(行)。

代码语言:javascript
运行
复制
Sub RechercheValeursFSI_1()

    Dim FeSource As Worksheet
    Dim FeDest As Worksheet
    Dim PlgSource As Range
    Dim PlgDest As Range
    Dim Cel As Range
    Dim Ligne As Long
    Set FeSource = Worksheets("SOURCE_1")
    Set FeDest = Worksheets("Table")
    With FeSource
        Set PlgSource = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
    End With
    With FeDest
        Set PlgDest = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
    End With
    For Each Cel In PlgDest
        On Error Resume Next
        Ligne = Application.WorksheetFunction.Match(Cel.Value, PlgSource, 0) + 1
        If Err.Number = 0 Then
            Cel.Offset(, 4).Resize(, 5).Value = FeSource.Cells(Ligne, 1).Offset(, 1).Resize(, 5).Value
        End If
    Next Cel
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-03 16:58:36

这对我来说很有效:

代码语言:javascript
运行
复制
Sub RechercheValeursFSI_1()

    'Declarations.
    Dim FeSource As Worksheet
    Dim FeDest As Worksheet
    Dim PlgSource As Range
    Dim PlgDest As Range
    Dim Cel As Range
    Dim Ligne As Long
    Dim IntCompteur As Integer
    
    'Setting variables.
    Set FeSource = Worksheets("SOURCE_1")
    Set FeDest = Worksheets("Table")
    With FeSource
        Set PlgSource = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
    End With
    With FeDest
        Set PlgDest = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
    End With
    
    'Covering the whole PlgDest.
    For Each Cel In PlgDest
        On Error Resume Next
        
        'Setting Ligne for each occurence the code already met.
        IntCompteur = 0
        Ligne = 0
        Do Until IntCompteur >= Excel.WorksheetFunction.CountIf(FeDest.Range(FeDest.Cells(1, 1), Cel), Cel.Value)
            Ligne = Application.WorksheetFunction.Match(Cel.Value, PlgSource.Resize(PlgSource.Rows.Count - Ligne + 1).Offset(Ligne - 1, 0), 0) + Ligne
            IntCompteur = IntCompteur + 1
        Loop
        
        'Copy-pasting the values.
        If Err.Number = 0 Then
            Cel.Offset(, 4).Resize(, 5).Value = FeSource.Cells(Ligne, 1).Offset(, 1).Resize(, 5).Value
        End If
        
    Next Cel
    
End Sub

我添加了一个整数变量(IntCompteur)来运行Do-Loop循环。该循环根据在已经覆盖的单元格中Cel中的值先前出现的次数来重复其自身。它设置Ligne值,直到它到达所需的单元。它基本上实现了在搜索给定值的匹配函数中调整范围的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64179001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档