基于另一个列表提取列表的子串

使用两个列表,一个是以各种forms添加信息的名称(例如见下面的列表1),另一个是由明确的格式化名称组成,即没有附加信息(列表2)

List 1 -------- Netto City | Value Imerco City | value Bilka Suburb | value Bauhaus, City | Value City FDB Superb | Value List 2 ------ Netto Imerco Bilka Bauhaus FDB Super 

我想要做的是创build一个filter,以便不pipe我的源数据(列表1)的第一列看起来像什么,我将能够基于(列表2)总结值。

类似于这样的东西: Excel – 基于另一个列表提取数据

我尝试使用vlookup,但是不search子string,然后我尝试使用

 =IF(COUNTIF(A$4:A$9;"*"&D5&"*")>0; INDIRECT(ADDRESS(MATCH("*"&D5&"*";A$4:A$9;0);4));"not found") 

但是,这似乎做了相反的,从列表2的单个单元格值的search列表1。如果这个工作一样好,我不能让我的脑袋周围,我还没有能够得到它的工作,因此我的search换另一种方式。 search列表2,列表1中的每个项目。

但是,最终,我试图完成的是从源数据创build一个列表,我可以使用它来对列表1中的每个项目进行分类,基于列表3

 List 3 Bilka | Cat1 Imerco | Cat2 FDB Super | Cat1 etc. 

为了这个工作,我需要一个干净的源数据列表,没有所有额外的信息。

我使用以下sumif

 =SUMIFS($F$3:$F$703;$B$3:$B$703; "="&$H4;$D$3:$D$703;">="&I$2;$D$3:$D$703;"<="&I$3) 

将所有属于列表3中的特定项目的总和(我已经手动创build列表3)加到date之间。

这样做的目的是创build一张表,其中包含所有支出到一个特定的商店或自己select的类别,例如列表1中列出的主要是食品商店。

编辑 – 澄清。

我打算做的是一个多阶段的过程。 阶段1:插入原始源数据(完成)

阶段2:过滤独特值的源数据(已完成)

阶段3:为源数据中的每个项目创build批准名称列表 – 即比尔卡市郊进入比尔卡,内托市成为内托这里“内托”和“比尔卡”是被批准的名字,手动创build以允许在阶段4分组。我期待自动化这一步。

第四阶段:根据名称和date时间间隔,每周每月一次,将第三阶段列表中的每个项目分组(如果我只能使第三阶段工作),因为它对我手动更正的数据起作用。

阶段5:select适当的类别,然后在第三阶段的结果列表中input每个项目:Bilka是一个食物的地方,所以它会得到类似“netto”的食物,在那里Bauhaus会得到“build筑用品” ,这些项目中的每一个都会得到types“费用”,在这种情况下,工资可以得到types“收入”(完成)

第五阶段的解决scheme,只是一个查找,基于类别到一个表中列出每个类别的types,这是很简单的。

最终解决scheme:要求迭代的列表在列G中,并在列H中输出已批准名称的列表。如果不能知道诸如“Super”和“SU”之类的项目之间的差异“,我不知道如何解决这个问题。 如果有人有任何build议,我都耳朵。

 Sub LoopCells() Sheets("RawData").Select Sheets("RawData").Activate LRApproved = Cells(Rows.Count, "H").End(xlUp).Row LRsource = Cells(Rows.Count, "G").End(xlUp).Row For Each approvedcell In Worksheets("RawData").Range("H2:H" & LRApproved).Cells 'Approved stores entered by users For Each sourcecell In Worksheets("RawData").Range("G2:G" & LRsource).Cells 'items found from bank statement export If InStr(UCase(sourcecell.Value), UCase(approvedcell.Value)) <> 0 Then sourcecell.Offset(0, 2).Value = approvedcell.Value End If Next sourcecell Next approvedcell End Sub 

感谢所有的帮助。 编辑:添加最终的解决scheme和VBA标签。

这适用于我:

 =SUM(B$3:B$7*NOT(ISERROR(SEARCH(A11,A$3:A$7)))) 

这假定您的示例列表1在范围A3:B7中,而您的列表2在A11:B15中。 将上面的公式粘贴到单元格B11中,然后按Ctrl ShiftEnter将其作为数组公式input。 然后,您可以将其拖动到B15。

说明:在列表1的单元格中SEARCH例如“Netto”。对于不包含该string的单元格, SEARCH返回一个错误。 所以我们正在寻找不会返回错误的单元格。 我们现在有一些布尔值表示这一点。 用值数组逐个将其相乘。 在这个乘法中, TRUE被解释为1, FALSE被解释为零,所以你将筛选出不符合“Netto”的值。

这是我的设置的一个截图:

在这里输入图像说明

也许我误解了,但不能使用SUMIF?

=SUMIF(A$4:A$9;"*"&D5&"*";B$4:B$9)

而不是用VBA去,你可以用简单的小公式来提取这个。 = Index(List2!A2:A10,Match(1,Countif(List1A2,“ &List2!A2:A10&” “),0))(按Ctrl + Shift + Enter)。 假设您想要将列表2提取到列表1中。