Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 基于匹配将行信息从一张图纸复制到另一张图纸_Vba_Excel - Fatal编程技术网

Vba 基于匹配将行信息从一张图纸复制到另一张图纸

Vba 基于匹配将行信息从一张图纸复制到另一张图纸,vba,excel,Vba,Excel,我有一本excel手册,有两张表格:1)导入2)定价规则 定价规则表 A列是我需要匹配的。示例值包括STA_PNP4,STA_PST。。等等。工作表中可能有大约50个不同的行,并且随着时间的推移,它将继续增长。然后,对于每一行,在B到CF列中都有定价值 导入表 此工作表的列数相同,但仅填写列A。示例值包括STA_PNP4_001_00,STA_PNP4_007_00,STA_PST_010_00。。还有更多 我需要做的是: 如果第二个“u”之前的导入表列A中的文本与定价规则表列A中的列标识匹配,

我有一本excel手册,有两张表格:1)导入2)定价规则

定价规则表

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

导入表

此工作表的列数相同,但仅填写列
A
。示例值包括
STA_PNP4_001_00
STA_PNP4_007_00
STA_PST_010_00
。。还有更多

我需要做的是:

如果第二个“u”之前的
导入表
列A
中的文本与
定价规则表
列A
中的列标识匹配,则将该行
定价规则
表的
的其余部分复制到CF
,并将其匹配的行复制到
导入表


你知道从哪里开始吗?

为什么不只用公式呢

假设:

1.)导入表中的数据为

(A栏)

STA_PNP4_007_00

STA_PNP4_001_00

STA_PNP4_001_00

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

(A栏)(B栏)(C栏)(D栏)

STA_PNP4 1 2 3

STAU PST 4 5 6

STA_ASA2 7 8 9

然后将此公式写在导入表的B1单元格中 =IFERROR(VLOOKUP(左(A1,FIND(“,A1,FIND(“,A1)+1)-1),PricingRules!$A$1:$CF$100,2,0),“”)

在B列中将其向下拖动

对于C列,D只需将索引num从2更改为(3表示C),(4表示D)诸如此类。

因为它会随着时间的推移继续增长,所以最好使用VBA。然而,即使使用代码,我也会首先通过公式应用“组”,这样就不会让电子表格中的公式负担过重,因此可能会变得缓慢和容易损坏。类似于@xtremeExcel解决方案的一部分,我重复这一点,因为下划线在该答案中被视为格式化命令:

=LEFT(A1,FIND("_",A1,1+FIND("_",A1))-1)  
我将此(复制下来)作为您的
导入表中的一个附加列
——作为链接到您的
定价规则表
的关键字段。在最左边标注,以便VLOOKUP在整个表格中使用

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

  • 编写代码以按运行/所需频率填充
    定价规则表
    。无论是每次“从头开始”填充(可能对于低卷最好),还是增量填充(对于高卷可能更可取)
  • 使用VLOOKUP(根据建议)。但是,至少有84列,大概有50多行,这是很多公式,但作为临时“一次性”解决方案(即在填充复制/粘贴特殊值后)可能是可行的
  • 妥协。作为2。但是用适当的公式/a保留一行或一个单元格,并复制该行或单元格以填充其他列,以便添加到列a和/或列a:B中

  • 谢谢大家的意见

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

    3)3)3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 83,84},FALSE)}


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

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

    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
    

    我认为你不需要宏来做这件事。LEFT()、MID()和VLOOKUP()的组合就可以了。只要匹配的列中没有重复的值,请参见look at Vlookup。