Excel:我想基于单词的修饰符列表对列进行排序

问题描述

我在excel中只有一列,包含275个(单元)句子。现在我要对列进行排序

条件:我想基于修饰符列表对列进行排序。 修饰语列表:此列表包含关键字(每个单元格中有1个关键字),这些关键字可能存在于上述列中句子的开头,结尾或中间。

例如

父列

  • 杰克住在村庄

  • jack

    所述
  • 罗斯已经与 jack 聊了昨晚

  • 罗斯离开了村庄

  • 玫瑰是他们的昨天

    修饰符(列)

  • 杰克

  • 玫瑰

  • 村庄

解决方法

这不是最干净的方法,但可能会有所帮助:

enter image description here

首先,您需要在修饰符列表上添加一个帮助列。您需要为每个修饰符指定一个唯一数值,作为第一个条件为最高值,最后一个条件为最低

例如,我做了Jack是最重要的,Rose是第二重要,最后是Village

我的公式将检查该短语是否包含任何修饰词,如果有匹配项,则选择最大值,如果没有匹配项,则返回0。

我在B2中的公式是:

=SUMPRODUCT(MAX(COUNTIF(A2;"*"&$A$13:$A$15&"*")*$B$13:$B$15))

它是这样工作的:

  1. COUNTIF(A2;"*"&$A$13:$A$15&"*")将返回1和o的数组,如果该短语是否包含修饰词。例如,词组Jack lives in the village将返回{1;0;1}Rose修饰符不存在)
  2. 我们将上一步的数组乘以其修饰符值,因此添加了*$B$13:$B$15。所以我们做{1;0;1} * {3;2;1}= {3;0;1}
  3. 有了MAX,我们从上一步中获得了最高价值(我们获得了3),这就是那句话的重要性。
  4. SUMPRODUCT刚刚添加,因此我们可以作为数组公式并求和最大值。

获得后,使用该列从最高到最低对短语进行排序。

如果您从修饰符列表中更改值,请从最高到最低再次排序:

enter image description here

现在请注意,我为包含Rose的短语赋予了更多价值,因此它们首先被排序。

,

按包含的值排序

  • 使用Parent列表对Modifier列表进行排序。
  • 代码模拟如下内容:获取Modifier的第一个值,并检查它是否包含在Parent的任何项目中。如果是,则将当前的Parent值写入Result列表中。然后,它取Modifier的第二个值并执行相同的操作...最后,将其余部分(不匹配的项)写入Result并将Parent替换为{{1} }。

说明

  • 将文件另存为启用宏的工作簿Result)。
  • 打开 Visual Basic编辑器(VBE) CTRL + F11 )。
  • 项目资源管理器中找到您的文件。右键单击其中的任意位置,然后选择.xlsm
  • 将以下代码复制到打开的窗口中(通常为Insert Module)。
  • 调整代码常量部分中的值以满足您的需要,即调整前3个值对。在每对中,第一个值是指Module1列的位置,而第二个值是指Parent列的位置。
  • 保存文件:在 VBE Excel 中。
  • 要从 VBE 运行代码,可以使用Modifier或按“播放”按钮,也可以使用 F5
  • 要从 Excel 运行代码,请使用Run>Run Sub并找到Developer>Macro。双击它或选择它,然后单击“运行”。
  • 此外,您可以创建一个按钮来运行代码。

代码

sortByCriteria