Sorting excel vba中的字符串匹配难题

Sorting excel vba中的字符串匹配难题,sorting,excel,matching,vba,Sorting,Excel,Matching,Vba,我正在为一个分类问题编写一个程序。 我以代码、说明、小计的形式获取数据,例如: LIQ013 COGNAC 25 LIQ023 VODKA 21 FD0001 PRETZELS 10 PP0502 NAPKINS 5 ALCOHOL 46 FOOD 10 PAPER 5 LIQ013干邑25 LIQ023伏特加21 FD0001椒盐卷饼10 PP0502餐巾纸5 现在一切都是这样的…问题是我的公司提供了许多不同的酒吧。因此,

我正在为一个分类问题编写一个程序。 我以代码、说明、小计的形式获取数据,例如:

LIQ013 COGNAC 25 LIQ023 VODKA 21 FD0001 PRETZELS 10 PP0502 NAPKINS 5 ALCOHOL 46 FOOD 10 PAPER 5 LIQ013干邑25 LIQ023伏特加21 FD0001椒盐卷饼10 PP0502餐巾纸5 现在一切都是这样的…问题是我的公司提供了许多不同的酒吧。因此,每月大约有800条记录包含这样的数据。我的老板想对数据进行细分,这样她就知道我们每个月在某一类别上花了多少钱。例如:

LIQ013 COGNAC 25 LIQ023 VODKA 21 FD0001 PRETZELS 10 PP0502 NAPKINS 5 ALCOHOL 46 FOOD 10 PAPER 5 酒精46 食物10 论文5 我想到的是我设置了一种“数据库”,它实际上是一个csv文本文件,包含如下条目:

LIQ,COGNAC,ALCOHOL LIQ,VODKA,ALCOHOL FD,PRETZELS,FOOD FD,POPCORN,FOOD LIQ013 COGNAC 25 ALCOHOL LIQ023 VODKA 21 ALCOHOL FD0001 PRETZELS 10 FOOD PP0502 NAPKINS 5 PAPER 液体、干邑、酒精 液体、伏特加、酒精 食品、椒盐卷饼、食物 爆米花、食物 我已经编写了将数据库作为工作表导入并将每个字段分隔为自己的列的代码。我希望excel查看文件,当它看到LIQ和COGNAC时,将酒精指示符指定给它。这样我就可以使用透视表来获取类别和。例如,我希望最终产品如下所示:

LIQ,COGNAC,ALCOHOL LIQ,VODKA,ALCOHOL FD,PRETZELS,FOOD FD,POPCORN,FOOD LIQ013 COGNAC 25 ALCOHOL LIQ023 VODKA 21 ALCOHOL FD0001 PRETZELS 10 FOOD PP0502 NAPKINS 5 PAPER LIQ013干邑25酒精 LIQ023伏特加21酒精 FD0001椒盐卷饼10食品 PP0502餐巾纸5张 有人有什么建议吗?我担心的是,单点表达式只匹配代码,即只匹配LIQ而不匹配COGNAC,可能会在以后出现描述冲突时导致问题?我还希望用户能够添加分类账条目,以便识别术语的数据库不断增长,变得更加扩展,希望更加准确

编辑
根据@Marc的要求,我将包括我的解决方案:


请注意,这是一个相当愚蠢的解决方案。我删除了一堆和健壮代码相关但和我们的特定解决方案无关的故障保护和其他代码位

为了实现这一点,有两个部分:

第一个是宏源代码 第二个是实际文件

由于所有的故障保护都已删除,因此需要按照文件的显示方式将其导入excel。i、 e.googleDoc上的Sheet1应该是excel上的Sheet1,开始在单元格“A1”粘贴数据。在运行宏之前,请确保选择表1中的单元格“A1”。正如我所说的,成品中有一些实现,使其更加用户友好!享受吧

编辑2 这些链接很糟糕。它们不能很好地粘贴到excel中。
如果您对它感到满意,我可以通过电子邮件将实际的工作簿发送给您。这将有助于保留格式等。

在单独的工作表中使用查找表。查找表的A列包含查找值(例如椒盐卷饼),B列包含类别(食品、酒精等)。在希望类别显示在原始工作表中的单元格中(让我们使用D3作为B3包含“椒盐卷饼”值的结果),键入以下公式:

=VLOOKUP(B3,OtherSheet!$A$1:$B$500,2,FALSE)
这假设您的查找表位于名为“OtherSheet”的工作表的范围
A1:B500

此公式告诉Excel在查找表的A列中查找值(B3),并从查找表的B列返回相应的值。绝对引用(
$
)确保在其他单元格中复制/粘贴公式时,公式不会增加单元格引用


当您获得新的类别和/或库存时,只需在其中添加新行,即可在此位置更新查找表。

您是否查看了
SUMIF()
函数?或者甚至Excel的小计功能?@Marc好吧,你看SUMIF()会起作用,但项目需要先按类别分开。这看起来是一个有趣的应用程序。谢谢@HeadofCatering这个想法最终会使它半智能化。数据透视表当然可以自动生成。因此,一旦完成了排序,并且数据库相当健壮,那么它应该能够获取原始数据,对其进行排序、分类,然后自动生成一个小计表。当一个项目没有被数据库获取时,唯一的人工输入。非常酷。如果你能尝试一下主题,那就更好了!谢谢@Marc,你的方法正是我的一个同事所用的。但问题是,它不如进行多点搜索的宏那么健壮。事实上我很接近。我很好奇你说的“多点搜索”是什么意思,为什么我的方法不能扩展到你正在尝试的东西。我发现,使用Excel的内置和陈旧功能通常比自定义VBA宏更可靠。此外,听起来每次你想要分类时都必须重新运行宏,而不是自动更新公式。你能解释一下吗?嗨@Marc,我用的“多点搜索”这个词其实就是我用来描述这种搜索模式的。理想情况下,我想到的是一个程序,它可以将类型代码LIQ与酒精相匹配,并将搜索词(即干邑、葡萄酒、波旁威士忌等)与酒精相匹配。然后有两点将被确认为比赛。否则就只有50%的匹配了。随着可搜索术语数量的增加,相关性可以由字段可以匹配的点的数量来确定。我不知道这是否有帮助。顺便说一下,VLOOKUP仍在查找字符串的精确匹配。因此,它的功能并不比我预测的实现将使用的Instr()强。@franklin,如果您使用的是串联字符串,您可以模拟“使用
VLOOKUP
进行所需的多点搜索。使用
Instr
也可以,但听起来像是在使用
Instr
时对列进行迭代。我要说的是,
VLOOKUP
已经编码好了,可以完全完成您想要编写VBA的任务。那么,为什么不调整您的参数以适应值得信赖的乐趣呢