2015-02-17 86 views
-1

我正在构建一个文件,以便在查看材料时跟踪我的目标。既然目标是每天阅读一章,我想根据开始日期显示我的进度。由于这是一项周期性审查,因此需要采用某种形式的模块化算术来正确考虑在上次完成后重新开始列表。我无法围绕一个简单的方法来通过Excel公式或VBA编程来实现这一点,并且认为这里的专家会有所帮助。excel中基于列表的模块化算术

样品表:

当前周期的天:XXX

预订#_of_Chapters

教科书10

书B 15

预订-C 30

书D 5

章节总数:60

今天:书YYY ZZZ章

预期结果:如果XXX是40,YYY是预定C和ZZZ为预订一种用于书B第15章(40-10和15 )。如果XXX是62,那么YYY是Book A(因为我们已经重新启动)并且ZZZ是第2章。

我目前没有开始添加到此帖子的VBA代码。

谢谢!

回答

2

如果您记录以前的书籍中有多少章,这会更容易。这是我设置的CSV:

周期的当前日期:16,
,,
书,章节,沪指。章节
书A,10,0
书B,15,10
书C,30,25
书d,5,55

我用于上一页的公式。章节,但你真的不需要,如果你的名单真的这么短。

=SUM($B$4:$B4)-B4 

现在你拥有了所有你需要的东西。你可以打破它分为3个配方,使其更容易跟踪:(我的是范围E1:E3

=IF(MOD(B1,60)=0,60,MOD(B1,60)) 
=MATCH(E1,C4:C7) 
="Book " & INDEX(A4:A7,E2) & " Chapter " & E1-INDEX(C4:C7,E2) 

...或者你可以有一个很大的公式:

="Book " & INDEX(A4:A7,MATCH(IF(MOD(B1,60)=0,60,MOD(B1,60)),C4:C7)) & " Chapter " & IF(MOD(B1,60)=0,60,MOD(B1,60))-INDEX(C4:C7,MATCH(IF(MOD(B1,60)=0,60,MOD(B1,60)),C4:C7)) 

如果你想只是书的名称和章号,它会是这些:

=INDEX(A4:A7,E2) 
=E1-INDEX(C4:C7,E2) 

...或standalones:

=INDEX(A4:A7,MATCH(IF(MOD(B1,60)=0,60,MOD(B1,60)),C4:C7)) 
=IF(MOD(B1,60)=0,60,MOD(B1,60))-INDEX(C4:C7,MATCH(IF(MOD(B1,60)=0,60,MOD(B1,60)),C4:C7)) 

对于最终应用程序,我建议如下:

  • 让章动态的,而不是总数量的硬编码在我的例子显示60
  • 格式化最终输出看起来像你需要的任何东西
  • 保持公式分离,所以你可以排除故障,如果事情变得疯狂。大公式给出了很好的结果,但很难解决。
+0

不,这个清单并不是这么简单 - 有超过500个章节分布在多个类别中,有数十本书!这看起来像是可行的。我从来没有像以前那样使用过MOD()函数。希望今后晚些时候我会加入!谢谢! – 2015-02-17 22:11:07