我有一本excel书,有两张:1)导入2)定价规则。
Pricing Rules Sheet
A
列是我需要匹配的内容。示例值包括STA_PNP4
,STA_PST
..等。工作表中可能有大约50个不同的行,并且它会随着时间的推移而继续增长。然后,对于每一行,B to CF
列中都有定价值。
Import Sheet
此工作表具有相同的列数,但只填写了列A
。示例值包括STA_PNP4_001_00
,STA_PNP4_007_00
,STA_PST_010_00
..等等。
我需要做什么:
如果第二个“_”之前Import Sheet
Column A
中的文字与Pricing Rules Sheet
Column A
中的列标识符匹配,请复制B to CF
Pricing Rules
的其余部分{1}}将该行的工作表放入Import sheet
匹配的行中。
关于从哪一个开始的任何想法?
答案 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可以在整张纸上使用。
将其作为关键字段,然后:
Pricing Rules Sheet
。每次都要“从头开始”填充(可能最适合低容量)或逐步填充(可能适用于高容量)。 答案 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