Vba 基于匹配将行信息从一张图纸复制到另一张图纸
我有一本excel手册,有两张表格:1)导入2)定价规则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中的列标识匹配,
定价规则表
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。