如何在电子表格中标记/标记项目

nus*_*ara 18 spreadsheet google-spreadsheets microsoft-excel

我是电子表格的新手,所以如果我问一个非常明显的问题,我希望你能原谅我。

是否可以在 Excel/Google 电子表格中使用标签?我正在创建一个电子表格来记录我正在阅读的所有文章和书籍。假设我正在阅读“我,克劳迪斯”。我想给它这些标签:历史、小说、传记、残疾、政治、戏剧。然后,如果我想显示所有带有“政治”标签的文章/书籍,我可以使用该标签进行搜索/显示/透视。

也许最好,标签应该都在一个单元格中,每个单词用逗号分隔。我想,如果每个单词都在自己的单元格中,那会使表格变得非常混乱。

我也愿意接受其他标签解决方案。

谢谢!

Exc*_*lll 13

据我所知,Excel 中没有可以解析和汇总逗号分隔标签的内置功能。当然,您可以使用工作表函数和一点 VBA 创建自己的解决方案。这是执行此操作的快速解决方案。

第 1 步:按Alt+F11在 Excel 中打开 VBA 编辑器窗格。插入一个新模块并粘贴此代码以获得自定义函数。

Public Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate.  sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer

On Error GoTo EH
rra = rr
out = ""
i = 1

Do While i <= UBound(rra, 1)
    If rra(i, 1) <> False Then
        out = out & rra(i, 1) & sep
    End If
    i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function

EH:
rra = rr.Value
Resume Next

End Function
Run Code Online (Sandbox Code Playgroud)

此功能将允许您创建逗号分隔的列表来汇总您拥有的标签数据。

第 2 步:在工作表中,在单元格(下例中的 H2)中输入要搜索的标签。在右侧的单元格中,按Ctrl+ Shift+输入以下公式Enter

=IFERROR(CCARRAY(IF(NOT(ISERROR(FIND(H2,$B$2:$B$6))),$A$2:$A$6),", "),"No matches found.")
Run Code Online (Sandbox Code Playgroud)

通过按Ctrl+ Shift+ Enter,你正在输入公式作为数组公式。它将出现{...}在公式栏中。请注意,公式$B$2:$B$6中的范围包含 中列出的项目的所有标签$A$2:$A$6

在此处输入图片说明

编辑:
如果您不介意将匹配项列在列中而不是列在一个单元格的列表中,则可以仅使用工作表函数返回标记的匹配项。

如果您的标题在Column A,标签在Column B,并且您要搜索的标签在H2,您可以使用以下数组公式inI2并根据需要填写:

=IFERROR(INDEX($A$1:$A$6,SMALL(IF(NOT(ISERROR(FIND($H$2,$B$1:$B$6))),ROW($B$1:$B$6),2000000),ROW()-1)),"")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

该公式首先根据每行中的标签是否包含搜索词来形成一个数字数组。如果找到匹配项,则行号存储在数组中。如果未找到,则将 2000000 存储在数组中。接下来,SMALL(<array>,ROW()-1)公式部分返回ROW()-1数组中的第 th 个最小值。接下来,将此值作为索引参数传递给INDEX()函数,其中返回标题数组中该索引处的值。如果将大于标题数组中行数的数字INDEX()作为参数传递给,则返回错误。由于在未找到匹配项时将 2000000 作为参数传递,因此会返回错误。在这种情况下,该IFERROR()函数将返回""

掌握如何ROW()在此公式中使用非常重要。如果要显示SMALL()从不同行开始的结果列表,则需要调整函数的第二个参数,使其返回数组中的第一个最小值。例如,如果您的结果列表从第 1 行而不是第 2 行开始,您将使用SMALL(...,ROW())代替SMALL(...,ROW()-1)

此外,如果您的标题和标签列表不是从第 1 行开始,您还需要调整公式。IF()必须调整函数的第二个参数,以便数据第一行中的匹配项返回 1。例如,如果您的标题列表从第 2 行而不是第 1 行开始,您将需要公式包含IF(...,ROW($A$2:$A$7)-1,...)而不是IF(...,ROW($A$1:$A$6),...)