Excel公式每天计算系统中用户点击次数

时间:2014-11-26 17:05:50

标签: excel vba excel-vba excel-formula

这是我之前的问题的延续,我已将我的全球目标纳入项目。

Excel链接:

https://drive.google.com/file/d/0B5W4CgZKsARFSmhqV0ZSM1lBSkE/view?usp=sharing

任务: 任务是在“每天”收集应用程序中用户的“号码点击”。我可以从系统中收集一个日志,它会告诉我用户的名字以及他们的最后一个命中日期和总点击次数。(这个总点击次数不是每天,而是所有天的总和)。我需要制定一个公式来每天隔离这些

截图: 为了更好地理解我创建了一些截图,我希望实现它。

excel有两个标签 raw_data value_capture 。我将使用raw_data粘贴从系统日志和value_capture收集的原始数据,以生成日复一日的统计信息

Raw_data标签: 它有三个细节,1。日期。 2.名称和3个总点击次数(此总点击次数是该用户在所有日期的总点击次数)

enter image description here

value_capture: 这包含标记每一天的所有用户名和所有日期以及显示所有匹配的列。

enter image description here

现在,考虑到日期20141120的示例,所有用户点击数均为0。 raw_data针对所有用户显示0

enter image description here

所以value_capture必须用相同的

更新

enter image description here

现在在20141121的第二天,对某些用户进行了一些点击。 (注意:如果没有针对用户的点击,它只会是前一个日期,即日期只会在当天有点击时更新)

enter image description here

使用该详细信息更新value_capture

enter image description here

在20141122,还有一些针对用户的点击次数

enter image description here

value_capture更新了详细信息。由于raw_data将显示针对用户的总点击次数,因此计算特定内容的方式将为总点击次数 - 上次日期点击

enter image description here

我坚持在这里开发excel公式的方法。想一想实现这个。

注意: 用户名将在两个选项卡上修复,但在raw_data选项卡中可能会有不同的顺序。

更新

我的raw_data表每天都会更新,我希望在从表raw_data更新(删除)值后,我的公式结果会在value_capture表中修复

3 个答案:

答案 0 :(得分:1)

正如我在回答您之前的问题时提到的那样,在删除/删除其参考单元格后保存公式结果的唯一方法是使用
首先
您需要一个合适的公式来从 raw_data 表中提取数据,然后计算公式所在的特定单元格与该行中先前单元格的总和之间的差异。

我们需要两个公式:一个用于 value_capture 表的 列B
<和第二个 表的其余部分 。为什么?因为在第一列中你不能计算它自己和之前单元格之间的差异,因为它没有任何东西。因此公式略有不同。

FORMULA ONE: (粘贴在 B3 并拖放并填充)

=SUMIFS(raw_data!$C:$C;raw_data!$B:$B;$A3;raw_data!$A:$A;B$2)

公式二: (粘贴在 C3 并向下拖动并填充到右侧)
=IF(SUMIFS(raw_data!$C:$C;raw_data!$B:$B;$A3;raw_data!$A:$A;C$2)-IF(ISNUMBER(B3);SUM($B3:B3);0)>0;SUMIFS(raw_data!$C:$C;raw_data!$B:$B;$A3;raw_data!$A:$A;C$2)-IF(ISNUMBER(B3);SUM($B3:B3);0);0)

正如您在我的屏幕截图中看到的用户在单元格 A3 中,我们对 20141120 的日期值 4 第二天,该值 14 ,但是细胞得到差异,即 10 ,然后第二天,值增加到 16 ,因此 D3 的单元格值变为 2 ,这是当天的16和前一个的总和。这一直持续到今天的 24 ,因此单元格 7 ,因为之前的单词总和 17 < /强>点。

enter image description here

既然你已经正确地捕捉了你的价值,那么就前几天的总和来说,是时候把它们固定下来了。 为此您需要一个宏:

Sub saveMyData()
Dim ws As Worksheet
Set ws = ActiveSheet

ws.Range("B3:L18").Copy

ws.Range("B3").PasteSpecial Paste:=xlPasteValues

Application.CutCopyMode = False
End Sub


很明显你需要更新这个范围&#34; B3:L18&#34; 这只是我在示例表中的内容。

现在这个宏,复制粘贴该范围内的所有值本身,这样就会丢失公式。

因此,每天,您需要转到相同表格的* 21行**并从 C21 获取公式并将其粘贴在第3行上的某个地方从哪里可以继续捕获新的一天的数据。 (你不会需要第一个公式,因为它只在第一列第一天使用一次。)

这是使用公式捕获值的唯一方法,然后将公式的结果保存在其位置并获取新数据。我除了编写mova VBA并让excel去找你前一天离开的地方并将公式粘贴在正确的位置并重复任务之外,我无法想到任何其他策略来使其更加自动化

所有这些公式都是数组公式,所以按 ctrl + shift + 输入来计算公式。< / EM>

请记住,将公式调整为您的区域设置,我想通过替换&#34 ;;&#34;与&#34;,&#34;。

here is the example sheet downloadable from this link

如果您在任何地方遇到问题,请告诉我,不要忘记在关于更新value_capture第2行中日期的方式的评论中回答我的问题。

答案 1 :(得分:0)

您正在寻找的公式是SUMIFS

=SUMIFS([SUM RANGE],[RANGE 1],[VALUE 1],[RANGE 2],[VALUE 2])

SUM RANGE是您想要SUM的值列,因此这是您的列C.对于范围1,您要选择ID范围。 VALUE 1将等于A列第X行中的值。对于RANGE 2,它将是Date列。对于VALUE 2,它将是列标题中的值。

把它放在一起,你就有类似的东西:

 =SUMIFS(raw_data!$C:$C,raw_data!$B:$B,$A3,raw_data!$A:$A,B$2)

这将在单元格B3中,您可以从那里填充其他单元格。

如果一天的总命中数是所有命中数的滚动计数,那么在等式结束时,您需要减去前几天的总和。

例如:

 =SUM(B3:B4)

这只需要添加到后续列(而不是第一列)。

因此C3中的等式将是

=SUMIFS(raw_data!$C:$C,raw_data!$B:$B,$A3,raw_data!$A:$A,C$2)-SUM(B$3:C3)

然后在D3中它变成

=SUMIFS(raw_data!$C:$C,raw_data!$B:$B,$A3,raw_data!$A:$A,D$2)-SUM(B$3:D3)

答案 2 :(得分:0)

尝试Sumifs公式

=SUMIFS(raw_data!$C:$C,raw_data!$B:$B,$A3,raw_data!$A:$A,B$2)-IF(ISNUMBER(A3),A3,0)