【问题标题】:Copying Row Info from one sheet to another based on match根据匹配将行信息从一张表复制到另一张表
【发布时间】:2017-05-18 01:19:26
【问题描述】:

我有一本包含两张纸的 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 SheetColumn A 中第二个“_”之前的文本与Pricing Rules SheetColumn A 中的列标识符匹配,则将该行的Pricing Rules 表中B to CF 的其余部分复制到@987654338 @ 它匹配的行。

知道从哪里开始吗?

【问题讨论】:

标签: vba excel


【解决方案1】:

你为什么不只使用公式呢?

假设:

1.) 导入表中的数据为

(col A)

STA_PNP4_007_00

STA_PNP4_001_00

STA_PNP4_001_00

。 .

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

(A 列)(B 列)(C 列)(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 只需将索引 num 从 2 更改为 (3 for C) , (4 for D) 等等。

【讨论】:

    【解决方案2】:

    因为它会随着时间的推移而继续增长您可能最好使用 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。

    【讨论】:

      【解决方案3】:

      感谢大家的意见。

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

      {=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)}

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

      【讨论】:

        【解决方案4】:

        下面是我为上述场景创建的函数。它按照您提到的要求工作。

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多