【问题标题】:Excel Formula to calculate number of user hits in a system everydayExcel公式计算每天系统中的用户点击次数
【发布时间】:2014-11-27 18:58:19
【问题描述】:

这是我之前问题的延续,我已将我的全球目标包含在项目中。

Excel 链接:

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

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

截图: 为了更好地理解,我创建了一些屏幕截图,我正在寻求实现。

excel 有两个标签 raw_datavalue_capture。我将使用 raw_data 粘贴从系统日志和 value_capture 收集的原始数据以生成每日命中统计数据

原始数据选项卡: 它有三个细节,1. 日期。 2.姓名和3个总点击量(这个总点击量是该用户全天的总点击量)

值捕获: 这包含用于标记每一天的所有用户名和所有日期以及用于显示所有命中的列。

现在,以日期 20141120 为例,所有用户点击次数均为 0。 raw_data 对所有用户显示 0

所以 value_capture 必须更新为相同

现在第二天 20141121,有一些针对某些用户的点击。 (注意:如果没有针对用户的命中,则只会更新上一个日期,即只有当日有命中时才会更新日期)

使用该详细信息更新的 value_capture

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

value_capture 已更新详细信息。由于 raw_data 将显示针对用户的总点击数,因此计算特定对象的方式将是total hits- previous date hit

我被困在一种在这里开发 excel 公式的方法上。寻找实现这一点的想法。

注意: 用户名将在两个选项卡上固定,但在 raw_data 选项卡中可能以不同的顺序出现。

更新

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

【问题讨论】:

  • 将每天的数据粘贴到现有数据的末尾,按用户排序,然后按日期排序(升序)。添加从 D2 =IF(B2=B1,C2-C1,C2) 开始的公式并填写。然后从 Cols A、B 和 D 创建一个数据透视表
  • @acr 您是否忘记提出您的 raw_data 表每天更新的问题,并且您希望在从表 raw_data 更新(删除)值后将公式结果固定在 value_capture 表中?我对吗?还是您只是更改了处理策略?
  • 我觉得这些数据在数据透视表中会更好......
  • @AHC :是的,我忘了指定.. 更新了我的问题
  • @AHC : 这是我的总体实施计划。

标签: vba excel excel-formula


【解决方案1】:

正如我在对您之前的问题的回答中提到的,在删除/删除其参考单元格后保存公式结果的唯一方法是使用 强>。
首先
您需要一个适当的公式来从 raw_data 工作表中提取数据,然后计算公式所在的特定单元格与该行中先前单元格的总和之间的差异。
我们需要两个公式:
一个用于您的 value_capture 表的 B 列
第二个 你的桌子的其余部分。为什么?因为在第一列中,您不计算自身与先前单元格之间的差异,因为没有。所以公式有点不同。

公式一:(粘贴在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



既然你已经正确捕获了你的值,关于与前几天总和的差异,现在是时候让它们固定和永恒了。
为此,您需要一个宏:

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



所以显然你需要更新这个范围 "B3:L18" 这只是我在示例表中的内容。

现在这个宏,复制粘贴该范围内的所有值本身,所以你失去了你的公式。
所以每天,您需要转到同一张表的 *line 21** 并从 C21 获取公式并将其粘贴到 row 3 的某个位置您想继续捕获新一天的数据。 (您不需要第一个公式,因为它只在第一列的第一天使用一次。)

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

这些公式都是数组公式,所以按ctrl+shift+enter来计算公式。

记得将公式调整为您的区域设置,我想,通过替换“;”用 ","。

here is the example sheet downloadable from this link

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

【讨论】:

  • 感谢您在这里帮助我。我忘记的一个问题是,一天之内我可能会多次上传原始数据。因此,用户可能会来点击,这将在我第一次将数据上传到原始表后更新点击计数。由于这种方法,要清除 value_capture 中的公式,下次当我在同一天运行脚本时,它将不起作用。所以最好的方法是检查VBA。我没有 VBA 知识,但我会检查基础知识。如果您能给我一些可以在这里使用的公式提示,请不胜感激。
【解决方案2】:

您要查找的公式是 SUMIFS

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

SUM RANGE 是您要求和的值列,因此这是您的列 C。对于 Range 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)

【讨论】:

    【解决方案3】:

    试试Sumifs 公式

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多