excel - 如何将单个单元格中的数据分离成多列和多行

标签 excel excel-formula

我有一个电子表格,其中每一行代表一台 PC,每行中的一个单元格包含过去 30 天内创建的所有日志文件的列表,以及在每个日志文件。

这是包含日志文件和错误的单元格的几个示例,一个用于 pc 297441,一个用于 PC 297897。我只在这个示例中包含了几天,通常这会显示所有日志在 30 天内全部在单个单元格中创建。

/cygdrive/c/app1/parent/297441/spfeed.log:0/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-06:0/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-07:0/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-08:2/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-09:0/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-10:1

/cygdrive/c/app1/parent/297897/spfeed.log:0/cygdrive/c/app1/parent/297897/spfeed.log.2022-09-06:3/cygdrive/c/app1/parent/297897/spfeed.log.2022-09-08:0/cygdrive/c/app1/parent/297897/spfeed.log.2022-09-09:0/cygdrive/c/app1/parent/297897/spfeed.log.2022-09-10:0

为了更易于阅读,我将添加几个回车符以在单独的行中显示每个日志文件,但在电子表格中它是一个连续的行,如上所示。

/cygdrive/c/app1/parent/297441/spfeed.log:0
/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-06:0
/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-07:0
/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-08:2
/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-09:0
/cygdrive/c/app1/parent/297441/spfeed.log.2022-09-10:1


/cygdrive/c/app1/parent/297897/spfeed.log:0
/cygdrive/c/app1/parent/297897/spfeed.log.2022-09-06:3
/cygdrive/c/app1/parent/297897/spfeed.log.2022-09-08:0
/cygdrive/c/app1/parent/297897/spfeed.log.2022-09-09:0
/cygdrive/c/app1/parent/297897/spfeed.log.2022-09-10:0

在这里您可以看到每个日志文件都以其创建日期结尾,第一个日志文件不包含日期,因为那是捕获日志的日期,所以在这种情况下应该是 05/09/22。每个日志文件的末尾都有一个 : 以及一个显示错误出现次数的数字。

所以在这里我们可以看到 297441 我们每天都有日志文件,我们在 22 年 8 月 9 日看到错误记录 2 次,在 22 年 9 月 10 日看到错误记录 1 次。对于 297897,我们没有获得 07/09/22 的日志文件,我们在 06/09/22 记录了 3 个错误。

我想做的是对此进行一些分析,例如绘制一个月内错误出现的次数、错误发生次数最多的一天以及每台 PC 看到的错误数量例如在一个月内。

为了创建数据透视表/图表,我认为我需要将包含所有这些信息的单个单元格分离到单独的行中,并将每个元素放入单独的列中,这样它看起来像这样.

PC                                      DATE                         ERROR COUNT
   
/cygdrive/c/app1/parent/297897/    ||   spfeed.log:              ||  0
/cygdrive/c/app1/parent/297897/    ||   spfeed.log.2022-09-06:   ||  3
/cygdrive/c/app1/parent/297897/    ||   spfeed.log.2022-09-08:   ||  0

问题是我不知道该怎么做。有人帮了我here分离出为每个错误创建一系列列的错误计数。这个问题是每台 PC 可能没有相同数量的日志文件,因为有些日子会丢失所以我不能,例如,说第 1 列将始终包含 05/09/22,第 2 06 列的错误/09/22 等。错误计数必须对应于发生的日期。

有人有什么想法吗?谢谢

编辑

这看起来可以做到,但我意识到在复制两个示例行时我犯了一个错误

路径应该是/cygdrive/c/spfeed/parent/而不是/cygdrive/c/app1/parent/我尝试更新你的公式,但它不能正常工作。您介意更新它以使用此路径吗,因为我必须承认我不完全理解您的公式?如果可以,将不胜感激。

/cygdrive/c/spfeed/parent/297441/spfeed.log:0/cygdrive/c/spfeed/parent/297441/spfeed.log.2022-09-06:0/cygdrive/c/spfeed/parent/297441/spfeed.log.2022-09-07:0/cygdrive/c/spfeed/parent/297441/spfeed.log.2022-09-08:2/cygdrive/c/spfeed/parent/297441/spfeed.log.2022-09-09:0/cygdrive/c/spfeed/parent/297441/spfeed.log.2022-09-10:1

/cygdrive/c/spfeed/parent/297897/spfeed.log:0/cygdrive/c/spfeed/parent/297897/spfeed.log.2022-09-06:3/cygdrive/c/spfeed/parent/297897/spfeed.log.2022-09-08:0/cygdrive/c/spfeed/parent/297897/spfeed.log.2022-09-09:0/cygdrive/c/spfeed/parent/297897/spfeed.log.2022-09-10:0

最佳答案

这是使用 ms365 的函数如 REDUCE()TEXTSPLIT() 的一种可能性:

enter image description here

C5 中的公式:

=LET(a,REDUCE({"PC","DATE","ERROR COUNT"},A1:A2,LAMBDA(a,b,VSTACK(a,{"/cygdrive/","spfeed",""}&TEXTSPLIT(b,{"/spfeed",":"},"/cygdrive/",1,,"")&{"",":",""}))),IFERROR(--a,a))

关于excel - 如何将单个单元格中的数据分离成多列和多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74262506/

相关文章:

excel - 如何使用 countif 对多列进行计数

excel - 返回由索引和匹配查找确定的范围的最大值

vba - 设置一个 VBA 宏,它将为我的主工作表中的每一行信息创建一个新工作表并以某种格式布局?

excel - 有没有办法结合 COUNTIF 和 FILTER?

vba - VB - 除整数不包括逗号?

excel - 在 Excel 中按字母顺序排序的顺序公式

vba - 当行数变化时使用worksheet_calculate

excel - 在VBA中粘贴特殊值

两次之间的Excel IF AND公式

excel - 标准 Excel 公式的行为取决于我使用的 Excel 版本