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


14

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

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

也许最好将标签全部放在一个单元格中,每个单词之间用逗号隔开。我认为,如果每个单词都位于其自己的单元格中,那么它将使表格真正混乱。

我也对其他标签解决方案持开放态度。

谢谢!


我从未在excel中看到过标签解决方案,但这并不是说没有标签解决方案。也许看看evernote
Raystafarian 2012年

Answers:


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

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

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

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

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

在此处输入图片说明

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

您的标题在的位置Column A,标签在的位置Column B,而您要搜索的标签在的位置H2,您可以在其中使用以下数组公式I2并根据需要填写以下内容:

=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)),"")

在此处输入图片说明

该公式的工作原理是首先根据每行中的标签是否包含搜索词来形成一个数字数组。如果找到匹配项,则行号存储在数组中。如果未找到,则将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),...)


哇,这很完美!不过,我更喜欢在Google Spreadsheet上使用它。但是它使用JavaScript。尽管我是该语言的完整而完全的初学者,但我将尝试在其中做类似的事情。还有两个问题:“汇总”数据是什么意思?您在第1步中执行的代码是做什么的?我之所以特别要问这个问题,是因为我认为我可能必须对Google Spreadsheet中的JavaScript进行同样的操作。非常感谢您的解决方案!
nusantara'3

太好了,我很高兴它的使用。“汇总”,我的意思是创建一个用逗号分隔的匹配标题列表。为此,需要VBA。使用内置的Excel函数,可以很容易地创建一个可以选择匹配标签的数组公式。但是,不可能在没有VBA的一个单元格中返回这些结果,因为CONCATENATEExcel中的函数不能将数组作为参数(如果尝试,则只能从数组中读取第一项)。使用VBA函数可以从值数组创建以逗号分隔的列表。
Excellll 2012年

编写完上述响应后,我意识到没有VBA,就有一种方法可以做类似的事情。除了返回一个单元格中的匹配标题列表之外,还可以返回一列匹配标题。如果您有兴趣,我也可以编辑我的帖子以包括此方法。
Excellll 2012年

没有VBA可能吗?我认为那会更好。如果不太方便,是的,如果您可以包括您提到的方法,那就太好了。这将对任何搜索此主题的人都非常有帮助!感谢您解释“摘要”。我也尝试过级联,但是,无法按照我想要的方式使用它。现在我知道它不能像参数那样运行。
nusantara

是的,有可能。我将在几分钟后尝试在此处发布解决方案。抱歉耽搁了!
Excellll 2012年

2

尽管在某些情况下以编程方式执行此操作效果很好,但我发现手动方法对我有用。使用列作为标记,您可以通过在列中输入0来轻松标记行项目。然后,您只有一行,并在该行的每个标签列中输入1(可以为该行上色)。然后,当您按标签之一进行排序时,1(蓝色)行将充当分隔符。在过滤结果(0s)和其他所有结果(_)之间。

这有一些优点。1.您不必每次都键入标签。2.您可以轻松地交叉引用以检查是否有重复项或相似项可以减少为一个。


1

另一个想法:

使用内置的过滤器功能。按“标签”列过滤,然后您可以搜索包含给定标签的行。

带有标签列表的行:喜剧,恐怖,浪漫

搜索这三个标签中的任何一个时都会显示。


1

我的非VBA方法是在一列(例如H列)中列出标签,并用逗号分隔各项。从那里,我结合使用“文本到列”和“删除重复项”来获取标签列表。我将其复制到主工作表的标题行中(在这种情况下,从L列开始。然后,在各个标签标题下方的每个单元格中,输入以下内容:

=IF((ISNUMBER(SEARCH(L$1,$H2)))=TRUE,1,0)

这提供了两全其美的优势-标签栏(H)易于阅读;单个标签列(带有0和1)很容易让计算机读取。如果您留在给定的标签集内,这是动态的。如果不是,则需要将新标签添加到标题行,然后将公式复制过来。

从那里开始,数据透视表就是您的朋友。


0

我不清楚您要如何使用这些标签。但是在Google表格中,您可以使用SPLIT()函数将一串标记(由空格,逗号或任何您想要的字符分隔)拆分为其他几个单元格,而且我敢肯定,即使Excel也具有可以搜索标签的单元格。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.