用查找替换匹配并将所有找到的值粘贴到新行中

时间:2019-07-16 14:01:03

标签: excel vba

我在工作表2中有一个表,其中包含一些数据。在A列中可能有值:“配额编号XYZ”。它可能发生不止一次,也可能根本不发生。

我想找到所有配额编号并将其粘贴到工作表1中的新行中。

宏的工作方式:

我在工作表1的A列中有数字列表。外部数据粘贴到工作表2。宏在工作表2的A列中寻找“ 配额号:”,但是由于我使用Match它仅返回1个值,并将其复制到工作表1中数字旁边的列中。

外观如何:

Value Match  
45678 0110  
12345 0990   
34567 0550  

我想在工作表2中找到“ 配额编号:”,对于找到的第一个值-将其复制到下一列。但是要找到第二个或更多的值,我需要在工作表1中多留一行。例如:

Value Match  
45678 0110  
12345 0990    
12345 0770   
34567 0550 

当前代码如下:

ws2.Activate 

For Each c In ws1.UsedRange.Columns("A").Cells
    If Not IsError(Application.Match("*Quota number:*", Range("A:A"), 0)) Then
        Quota = Application.Match("*Quota number:*", Range("A:A"), 0)
        QuotaVal = ActiveSheet.Cells(Quota, 1)

        ws1.Cells(c.Row, 2).Value = QuotaVal
    End If
Next c

我试图弄清楚,但是我不知道如何制作它,所以它在第二个和以后的比赛中添加了新行,以及如何不让循环本身循环(添加了新行,因此出现了新的c )。

1 个答案:

答案 0 :(得分:0)

我找到了另一种方法,但遇到了一些问题。

我决定查找结果并将其复制到另一个工作表中,因此将结果粘贴到工作表3的第2列中,并用工作表1中的数字填充每个结果的列号1(原始帖子中的“值”)。 / p>

如果我只有1个值,则效果很好。我在sheet1中有2个数字,在Sheet2中有“配额数”的数据,在Sheet3中有结果。在Sheet2中,我有很多行带有伪数据,只有5个“配额号”。

因此,对于Shee1中的每个数字,必须在sheet2中找到“配额号”并将结果粘贴到sheet3中。如果我的“ For”范围只有1个单元格,则效果很好-向我返回5个配额编号。但是,如果我将范围更改为“ A1:A2”,它应该找到2次相同的数据,因此应该找到总共10个数字-但它以某种方式无法正常工作,并找到了7个数字。

外观如何:

Sheet1 - numbers that will be used to generate data in Sheet2

Sheet2 - Generated data

Results when searching only for 1 cell in range (with the code quoted)

Results when searching only for 2 cells in range (with the code unquoted)

Sub GetData()

Dim x As Range

'For Each x In Sheets(1).Range("A1:A2")

With Worksheets(2).Range("A1:A500")

     Set c = .Find("Quota number*", LookIn:=xlValues)
     If Not c Is Nothing Then
        firstAddress = c.Address
        Do
           'Sheets(3).Cells(c.Row, 1).End(xlUp).Offset(1, 0).Value = x.Value
            Sheets(3).Cells(c.Row, 2).End(xlUp).Offset(1, 0).Value = c.Value
            Set c = .FindNext(c)
        If c Is Nothing Then
            GoTo DoneFinding
        End If
        Loop While c.Address <> firstAddress
      End If
DoneFinding:

End With

'Next

End Sub