根据匹配将行信息从一个工作表复制到另一个工作表

时间:2013-07-23 19:41:12

标签: excel vba excel-vba

我有一本excel书,有两张:1)导入2)定价规则。

Pricing Rules Sheet

A列是我需要匹配的内容。示例值包括STA_PNP4STA_PST ..等。工作表中可能有大约50个不同的行,并且它会随着时间的推移而继续增长。然后,对于每一行,B to CF列中都有定价值。

Import Sheet

此工作表具有相同的列数,但只填写了列A。示例值包括STA_PNP4_001_00STA_PNP4_007_00STA_PST_010_00 ..等等。

我需要做什么:

如果第二个“_”之前Import Sheet Column A中的文字与Pricing Rules Sheet Column A中的列标识符匹配,请复制B to CF Pricing Rules的其余部分{1}}将该行的工作表放入Import sheet匹配的行中。

关于从哪一个开始的任何想法?

4 个答案:

答案 0 :(得分:1)

为什么不使用公式呢?

假设:

1。)导入表中的数据是

(col A)

STA_PNP4_007_00

STA_PNP4_001_00

STA_PNP4_001_00

2.。)定价规则表中的数据

(Col A)(col B)(ColC)(Col D).......

STA_PNP4 1 2 3 .....

STA_PST 4 5 6 .....

STA_ASA2 7 8 9 .....

然后在Import Sheet的B1单元格中编写此公式 = IFERROR(VLOOKUP(LEFT(A1,FIND( “”,A1,FIND( “”,A1)1)-1),PricingRules $ A $ 1:$ $ CF 100,2,0 ), “”)

在B栏中向下拖动

对于C列,D只是将索引号从2改为(3为C),(4为D),就像那样。

答案 1 :(得分:0)

因为它会随着时间的推移而继续增长,所以最好使用VBA。然而,即使使用代码,我也可以通过公式应用“组”,以免电子表格过多地使用公式,因此可能很慢且容易损坏。像@ xtremeExcel解决方案的一部分,我重复一遍,因为下划线在该答案中被视为格式化命令:

=LEFT(A1,FIND("_",A1,1+FIND("_",A1))-1)  

我会设想(复制下来)作为Import Sheet中的附加列 - 作为链接到Pricing Rules Sheet的关键字段。在最左边说,所以VLOOKUP可以在整张纸上使用。

将其作为关键字段,然后:

  1. 编写代码以尽可能频繁地填充Pricing Rules Sheet。每次都要“从头开始”填充(可能最适合低容量)或逐步填充(可能适用于高容量)。
  2. 使用VLOOKUP(如建议的那样)。然而,至少有84列,并且可能是超过50行,这是很多公式,尽管可能是一个临时的“一次性”解决方案(即人口复制/粘贴特殊/值后)。
  3. 妥协。如2.使用适当的公式/ a保留行或单元格并复制它以填充其他列以添加到ColumnA和/或ColumnA:B。

答案 2 :(得分:0)

感谢输入人员。

我通过这样的方法实现了它:

{=VLOOKUP(LEFT($A4,7),PricingRules!A3:CF112,{2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84},FALSE)}

这是我的丑陋功能,应用于整行,在找到匹配项时,每列查找并复制我的定价规则。

答案 3 :(得分:0)

以下是我为上述场景创建的功能。它按照你提到的要求工作。

Sub CopyData()
Dim wb As Workbook
Dim importws As Worksheet
Dim PricingRulesws As Worksheet
Dim Pricingrowcount As Integer
Dim importRowCount As Integer
Dim FindValue As String
Dim textvalue As String
Dim columncount As Integer
Dim stringarray() As String

'Enter full address of your file ex: "C:\newfolder\datafile.xlsx"
Set wb = Workbooks.Open("C:\newfolder\datafile.xlsx")

'Enter the name of your "import" sheet
Set importws = Sheets("Import")

'Enter the name of your "Pricing" sheet
Set PricingRulesws = Sheets("PricingRules")

For Pricingrowcount = 1 To PricingRulesws.UsedRange.Rows.Count
    FindValue = PricingRulesws.Cells(Pricingrowcount, 1)
    For importRowCount = 1 To importws.UsedRange.Rows.Count
        textvalue = importws.Cells(importRowCount, 1)
        stringarray = Split(textvalue, "_")
        textvalue = stringarray(0) & "_" & stringarray(1)

        If FindValue = textvalue Then
            For columncount = 2 To PricingRulesws.UsedRange.Columns.Count
                importws.Cells(importRowCount, columncount) = PricingRulesws.Cells(Pricingrowcount, columncount)
            Next columncount
        End If
    Next importRowCount
Next Pricingrowcount
End Sub