excel中基于列表的模运算

时间:2015-02-17 21:23:51

标签: excel vba excel-vba

我正在构建一个文件,以便在审核材料时跟踪我的目标。由于目标是每天阅读一章,我想根据开始日期显示我的进度。由于这是一个循环审查,它需要某种形式的模块化算法来正确地考虑在上一次完成结束时重新启动列表。我无法通过excel公式或VBA编程来直接解决这个问题,并认为这里的大师会有所帮助。

样本表:

当前周期:XXX

预订#_of_Chapters

预订A 10

预定B 15

Book C 30

预定D 5

总章数:60

今天:预订YYY Chapter ZZZ

预期结果:如果XXX为40,则YYY为C书,ZZZ为第15章(A书为40-10,B书为15)。如果XXX是62,YYY是A书(自从我们重新开始),ZZZ是第2章。

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

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您跟踪以前的书中有多少章节,那就更容易了。这是我的设置的CSV:

  

当前周期:,16,
,,
书,章,上一页。章
  A,10,0册B,15,10书C,30,25
书D,5,55

我使用了Prev的公式。章节,但如果你的名单真的很短,你就不必这么做了。

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

......或作为独立证人:

=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
  • 将最终输出格式化为您需要的任何内容
  • 保持公式分离,以便在出现问题时进行故障排除。大公式给出了很好的结果,但很难修复。