0

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

Pricing Rules Sheet

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

Import Sheet

此表的列数相同,但仅A填写了 Column。示例值包括STA_PNP4_001_00STA_PNP4_007_00STA_PST_010_00.. 等等。

我需要做什么:

如果Import Sheet Column A第二个“_”之前的文本与 中的列标识符匹配,则将该行的工作表Pricing Rules Sheet Column A的其余部分复制到它匹配的行中。B to CFPricing RulesImport sheet

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

4

4 回答 4

1

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

假设 :

1.) 导入表中的数据是

(可乐)

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 列中

对于 Column C , D 只需将索引 num 从 2 更改为 (3 for C) , (4 for D) 等等。

于 2013-07-23T20:30:58.890 回答
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)}

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

于 2013-07-23T21:14:32.583 回答
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。
于 2013-07-23T20:55:44.010 回答
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
于 2017-05-17T17:19:26.727 回答