【问题标题】:a bit of a string matching conundrum in excel-vbaexcel-vba中的一些字符串匹配难题
【发布时间】:2012-05-12 05:30:45
【问题描述】:

我正在为一个分类问题编写程序。 我以 CODE、DESCRIPTION、SUB-TOTAL 的形式获取数据,例如:

LIQ013 干邑 25 LIQ023 伏特加 21 FD0001 椒盐脆饼 10 PP0502 餐巾纸 5

现在这一切通常都遵循这样的......问题是我的公司提供了许多不同的酒吧。因此,每月大约有 800 条记录包含这样的数据。我的老板想要分解数据,以便她知道我们每个月在某个类别上的花费。例如:

酒精 46 食品 10 论文 5

我想到的是我设置了一种“数据库”,它实际上是一个包含如下条目的 csv 文本文件:

酒液、干邑白兰地、酒精 酒液、伏特加、酒精 FD、椒盐脆饼、食品 FD、爆米花、食品

我已经编写了将数据库作为工作表导入并将每个字段分隔到自己的列中的代码。我希望 excel 浏览该文件,并在它看到 LIQ 和 COGNAC 时为其分配 ALCOHOL 指示符。这样我就可以使用数据透视表来获取类别总和。例如,我希望最终产品看起来像这样:

LIQ013 干邑白兰地 25 酒精 LIQ023 伏特加 21 酒精 FD0001 椒盐脆饼 10 食品 PP0502 餐巾纸 5 纸

有人有什么建议吗?我担心的是,单点表达式匹配 JUST 代码,即仅匹配 LIQ 而没有匹配 COGNAC 可能会在以后有冲突的描述时导致问题?我还希望用户能够添加分类帐条目,以便识别术语的数据库增长并变得更广泛,希望更准确。

编辑

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

code
file

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

为了让它工作,有两个部分:

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

因为所有的故障保险都被删除了,所以文件需要完全按照它的显示方式导入到excel中。即 googleDoc 上的 Sheet1 应该是 Excel 上的 Sheet1,开始在单元格“A1”处粘贴数据。在运行宏之前,请务必在 Sheet1 中选择单元格“A1”。正如我所说,成品中有一些实现使其更加用户友好!享受吧!

EDIT2

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

【问题讨论】:

  • 您查看过SUMIF() 函数吗?甚至是 Excel 的小计功能?
  • @Marc 你看 SUMIF() 可以工作,但项目需要先按类别分开。
  • 这看起来像是一个有趣的应用程序。
  • 感谢@HeadofCatering 这个想法最终是让它成为半智能的。数据透视表当然可以自动生成。所以一旦排序完成并且数据库相当健壮,那么它应该能够获取原始数据,对其进行排序,对其进行分类,然后自动生成一个小计表。唯一的人工输入是当一个项目没有被数据库拾取时。
  • 非常酷。如果您能够对主题进行抽样,那就更好了!

标签: sorting excel matching vba


【解决方案1】:

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

=VLOOKUP(B3,OtherSheet!$A$1:$B$500,2,FALSE)

假设您的查找表位于名为“OtherSheet”的工作表的A1:B500 范围内。

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

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

【讨论】:

  • 感谢@Marc,您的方法正是我的同事使用的方法。但问题是它不像进行多点搜索的宏那样健壮。实际上我很接近。当我可以访问公司的数据库时,可能会在明天发布结果。
  • @franklin,我很好奇您所说的“多点搜索”是什么意思,以及为什么我的方法不能扩展到您正在尝试的内容。我发现使用 Excel 的内置和陈旧的函数通常比自定义 VBA 宏更可靠。此外,听起来您可能必须在每次要分类时重新运行宏,而不是自动更新的公式。你能解释一下吗?
  • 嗨@Marc,我使用的术语“多点搜索”实际上只是我用来描述这种搜索模式的东西。理想情况下,我想到的是一个程序,它将类型代码 LIQ 与酒精匹配,并将搜索词(即干邑白兰地、葡萄酒、波旁威士忌等)与酒精匹配。然后有两个点将被确认为匹配。否则只有 50% 的匹配。随着可搜索术语数量的增加,相关性可以通过字段可以匹配的点数来确定。我不知道这是否有帮助。
  • 顺便说一句,VLOOKUP 仍在查找字符串的精确匹配项。所以它并不比我预测我的实现将使用的 Instr() 更强大/更弱。
  • @franklin,如果您使用的是串联字符串,则可以模拟“使用VLOOKUP 进行多点搜索。使用Instr 很好,但听起来像你”重新谈论在使用Instr 时对列进行迭代。我要说的是VLOOKUP 已经被编码为完全按照您想要编写 VBA 来执行。那么为什么不将您的参数调整为受信任的函数呢滚动你自己的功能?
猜你喜欢
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2014-08-15
相关资源
最近更新 更多